Android Studio实现五子棋小游戏

news2024/12/24 8:15:46

项目目录

  • 一、项目概述
  • 二、开发环境
  • 三、详细设计
    • 1、布局设计
    • 2、验证码
    • 3、AI人机
    • 4、背景音乐
  • 四、运行演示
  • 五、项目总结

一、项目概述

五子棋是一种两人对弈的策略型棋类游戏,本次五子棋小游戏具有人机对战和人人对战两种玩法。人机对战可以单人挑战AI,实时记录比赛得分,AI是根据棋盘上每个点的得分进行决策,人人对战采用轮流下棋方式进行对决,下棋过程中会记录当前棋子的颜色。可以在下棋过程中开始新游戏或者悔棋。在主界面可以设置背景音乐的开关,查看游戏的介绍。

ServiceSQLiteActivityHandler
SurfaceViewBundleBinderDialog
ListViewAdapterKeyEventPaint

二、开发环境

本项目是用Android Studio 4.0.1开发的,只要你的AS是近两年从官网下载的,都是可以满足的,日期版本是比4.0.1高的。
在这里插入图片描述

三、详细设计

1、布局设计

主页面的设计采用简单的4个按钮竖直排列的方式,使用LinearLayout的专属weight,平分300dp,margin间隔为20dp,text采用string存储。

在这里插入图片描述

注册页面,ImageView的scaleType设置为fitXY,下面的LinearLayout的background使用设置的样式表,设置margin和padding,login_form.xml代码如下。中间每个LinearLayout都是ImageView+EditText,下面的LinearLayout是验证码,包含一个输入框和一个图片框,比例为3:1。底部的Button为注册按钮,设置上下左右的margin和text,右下方是一个TextView,设置padding和margin,layout_gravity设置为right。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!---->
    <item>
        <shape android:shape="rectangle">
            <padding
                android:bottom="2dp"
                android:left="1.5dp"
                android:right="2dp"
                android:top="1.5dp" />
            <solid android:color="#F2F2F2" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <!-- 中心背景 -->
    <item>
        <shape
            android:shape="rectangle"
            android:useLevel="false">
            <!-- 实心 -->
            <solid android:color="#ffffff" />
            <corners android:radius="10dp" />
            <padding
                android:bottom="10dp"
                android:left="10dp"
                android:right="10dp"
                android:top="10dp" />
        </shape>
    </item>
</layer-list>

在这里插入图片描述

游戏页面,使用自定义的布局GameView,也就是棋盘格,黑棋和白棋放置在两侧,会不停地占据网格点,下面是新游戏和撤销的按钮,中间是双方比分的TextView。

 <com.android.game.fivechess.game.GameView
     android:id="@+id/game_view"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_centerInParent="true" />

在这里插入图片描述

2、验证码

先定义char类型的随机数数组CHARS,去掉容易混淆的字母和数字,接着进行默认设置,比如随机数的个数、字体大小和边距,randomTextStyle()随机生成文字样式,颜色,粗细,倾斜度,randomColor()生成随机颜色,drawLine()绘制干扰线,起始坐标和终止坐标都随机。createBitmap()创建验证码图片,逻辑上是先创建一个长宽固定的Bitmap,然后createCode()随机生成字符串,然后画笔设置样式,开始绘制验证码,然后绘制干扰线,返回位图。

    //生成验证码
    private String createCode() {
        StringBuilder buffer = new StringBuilder();
        for (int i = 0; i < codeLength; i++) {
            buffer.append(CHARS[random.nextInt(CHARS.length)]);
        }
        return buffer.toString();
    }

3、AI人机

当玩家落子后,电脑对棋盘扫描获取可行棋的位置集合,然后遍历该集合,利用评估函数对每个空位依次估分,得分最高的位置即为电脑将要落子的位置,在使用评估函数对空位打分时,为了避免电脑只攻不守,需要使用“换位思考”的思想,也就是说打分时不仅考虑进攻,还要考虑防守,所以给每个点设置权值updateValue(int[][] map)方法很关键。对于每个网格点,我们使用Coordinate类表示,属性为x和y,getPosition(int[][] map)就是获得权重最高的网格点坐标。

    // 五子棋中的各个点的权值
    int[][] plaValue = {{2,6,173,212,250,250,250},{0,5,7,200,230,231,231},
                        {0,0,0,0,230,230,230,0}};
    int[][] cpuValue = {{0,3,166,186,229,229,229},{0,0,5,167,220,220,220},
                        {0,0,0,0,220,220,220,0}};

4、背景音乐

定义MusicService类,在内部定义一个MusicControl类继承Binder,定义playMusic()方法播放uri地址的音乐文件,也就是包下的raw文件夹下的music.mp3文件,重置播放器,再创建播放器,开始播放并设置循环;pauseMusic()就是暂停播放器。在MainActivity中,利用MusicControl对象控制音乐的播放和暂停。

    // Binder是一种跨进程的通信方式
    public class MusicControl extends Binder {
        // 播放音乐
        public void playMusic() {
            Uri uri = Uri.parse("android.resource://" + getPackageName() + "/raw/music");
            try {
                mediaPlayer.reset();
                mediaPlayer = MediaPlayer.create(getApplicationContext(), uri);
                mediaPlayer.start();
                mediaPlayer.setLooping(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 暂停音乐
        public void pauseMusic() {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
            }
        }
    }

四、运行演示

Android Studio实现五子棋

五、项目总结

五子棋是一款非常经典的棋类游戏,总结下Android实现五子棋的步骤:

  1. 创建一个Android项目,并在布局文件中添加一个棋盘布局,用于展示游戏棋盘。

  2. 在代码中定义游戏棋盘的二维数组,并初始化棋盘数据。

  3. 实现游戏角色的落子功能:根据用户的操作,在棋盘上落子,并更新棋盘数据和角色位置,刷新游戏棋盘。

  4. 实现游戏的胜利判定:判断落子的角色是否连成五子,如果是,则游戏胜利。

  5. 在布局文件中添加游戏控制按钮,用于控制游戏角色的落子。

  6. 实现游戏控制按钮的点击事件,根据用户的操作调用游戏角色落子函数。

  7. 在游戏结束时,弹出游戏结束提示框,询问用户是否重新开始游戏。

  8. 完成以上步骤后,就可以实现一个简单的五子棋小游戏了。可以根据需要添加一些额外的功能,例如计分系统、关卡系统等。

五子棋是一种复杂的博弈算法,在实现过程中需要考虑多种情况,例如棋子的放置位置、棋子的颜色、棋盘的大小等。同时,为了实现更好的用户体验,还需要设计游戏界面、添加音效等。因此,实现五子棋小游戏需要一定的编程经验和逻辑思维能力,在学习中也可以得到提升。


🚀这有你错过的精彩内容🚀
Android Stduio实现外卖订餐系统
Android Studio实现考试管理系统
Android Studio实现选课系统
Android Studio实现购物商城
Android Studio实现记账本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL语言的规则与规范

SQL语言的规则与规范 前言一、SQL概述1、SQL背景知识2、SQL语言排行榜3、SQL 分类 二、SQL语言的规则与规范1、基本规则2、SQL大小写规范 &#xff08;建议遵守&#xff09;3、注 释4、命名规则&#xff08;暂时了解&#xff09;5、数据导入指令 前言 本博主将用CSDN记录软件开…

怎么用pe系统重装系统,如何用pe重装系统

其实&#xff0c;电脑装系统并没有这么难&#xff0c;尤其是u盘pe系统相对来说比较简单一点。但是&#xff0c;现在还有很多朋友一直在问这个是怎么装系统的&#xff0c;关键是装系统耗的时间比较长&#xff0c;步骤好像很复杂的样子&#xff0c;担心自己操作出现失误。确实&am…

Ansys Zemax | 如何以数据的方式定义网格矢高表面

引言 本文示范了如何输入表面起伏数据&#xff0c;以定义Zemax OpticStudio中的网格矢高 (Grid Sag) 类型表面&#xff0c;表面起伏数据应为Z坐标轴上的矢高 (Sag)。(联系我们获取文章附件) 正文 表面起伏数据格式是这样定义的&#xff1a; 第一行&#xff0c;由7个数字表示。 …

ASEMI代理英飞凌TDK5100F射频模块的性能与应用分析

编辑-Z 本文将对TDK5100F射频模块进行详细的介绍与分析&#xff0c;包括其性能特点、应用领域、使用方法。通过对这三个方面的阐述&#xff0c;希望能够帮助读者更好地了解TDK5100F射频模块的优势和应用场景。 1、TDK5100F射频模块的性能特点 TDK5100F射频模块是一款高性能的…

IPV6地址基础

IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写&#xff0c;是互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代IPv4的下一代IP协议。其地址数量号称可以为全世界的每一粒沙子编上一个地址 1. ipv6地址表示方法 IPv6的…

【前端播放器】前端播放器的时延问题小总结

目录 结论 播放器的优化测试与小结论 结论 根据理论知识&#xff0c;及代码查看&#xff0c;实验后 【ZLM】ZLM源码阅读三----延时问题_dualven_in_csdn的博客-CSDN博客 发现&#xff0c;结论大概与文中相同 &#xff1a;主要的延时&#xff0c;主要是播放器端形成的。 播放…

科技数据分析,2022年授权通过的专利数高达近80万项

哈喽大家好&#xff0c;中国科技发展在近年来取得了巨大进步&#xff0c;相关部门也积极推动科技创新&#xff0c;加大科技投入&#xff0c;鼓励企业加强研发&#xff0c;加速科技成果转化落地。此外&#xff0c;中国还在国际科技合作方面取得了积极进展&#xff0c;与各国合作…

使用 Golang 在 GitLab 上拉取代码并将静态资源部署到 Nginx,同时将图库上传至阿里云 OSS

使用 Golang 在 GitLab 上拉取代码并将静态资源部署到 Nginx&#xff0c;同时将图库上传至阿里云 OSS 本文章采用几个任务执行 最终想要实现效果&#xff0c; 1、golang做成一个服务占用一个端口&#xff0c;然后监测gitlab仓库webhook 2、前端人员提交代码到gitlab&#xff…

5.3图的综合应用算法

一.最小生成树算法 1.概念&#xff08;Minimum-Spanning-Tree&#xff09;MST 生成树&#xff1a;针对于连通图&#xff0c;包含全部顶点&#xff0c;去掉一条边后不连通&#xff0c;加一条边形成环 最小生成树:带权连通无向图&#xff0c;边的权值之和最小的生成树(MST) 2.…

insightface 人脸检测与识别

参考&#xff1a;https://huaweicloud.csdn.net/638088d7dacf622b8df89c0c.html insightface模型下载可能需要连接外网&#xff0c;模型自动下载保存再models\buffalo_l下&#xff0c;人脸注册自动保存再face_db目录下 1、具体人脸录入 python face_label.py --picture 刘亦…

GD32E230F4使用硬件IIC+DMA读写24C04

前言 在很久很久以前&#xff0c;我就写过GD32E230替换STM32F031的帖子&#xff0c;主要介绍了USART和SPI的外设移植开发&#xff0c;当时IIC使用的是软件i2c&#xff0c;没有介绍的价值。在使用IIC时&#xff0c;大多数我们都是采用软件的方式&#xff0c;因为软件的方式及其…

护网是什么?怎么参加

一、什么是护网行动&#xff1f; 护网行动是以公安部牵头的&#xff0c;用以评估企事业单位的网络安全的活动。 具体实践中。公安部会组织攻防两方&#xff0c;进攻方会在一个月内对防守方发动网络攻击&#xff0c;检测出防守方&#xff08;企事业单位&#xff09;存在的安全…

对象进阶、原型-原型链

工厂方法创建对象 我们之前已经学习了如何创建一个对象&#xff0c;那我们要是想要创建多个对象又该怎么办&#xff1f;聪明的同学可能会说&#xff0c;直接在写几个对象不就好了吗&#xff1f;比如下边的代码&#xff1a; var person1 {name: "孙悟空",age: 18,s…

2核2G3M轻量服务器腾讯云和阿里云怎么选择?

2核2G3M轻量应用服务器选阿里云还是腾讯云&#xff1f;腾讯云2核2G3M轻量应用服务器95元一年&#xff0c;阿里云2核2G3M配置优惠价108元一年&#xff0c;如何选择&#xff1f;阿腾云详细对比阿里云和腾讯云轻量应用服务器2核2G3M配置CPU性能及选择方法&#xff1a; 目录 轻量…

基于STM32F103+思岚A1激光雷达的扫描仪

前言 一个朋友在做服务机器人项目&#xff0c;用到思岚的激光雷达&#xff0c;于是便把淘汰的A1M8雷达送我一个&#xff0c;本着拿到啥就玩啥的态度&#xff0c;必须整一波。其实激光雷达还是搭配ROS才能发挥最大的作用&#xff0c;奈何资源有限&#xff0c;实力不足&#xff…

STM32 USB CDC VPC

STM32 USB CDC VPC 关键字 STM32,STM32CubeMX,HAL库,USB,虚拟串口,串口不定长接收 1.简介 通过使用stm32cubemx&#xff0c;实现USB CDC虚拟串口&#xff0c;并与硬件串口进行数据传输&#xff0c;实现了硬件串口数据的不定长接收&#xff0c;以及USB虚拟串口超过64字节的数…

钉钉H5微应用基础学习

钉钉开发文档 一、使用调试工具——IDE&#xff1a; 1、先下载调试工具&#xff0c;并且新建一个企业内部应用。 如果需要管理员权限&#xff0c;可以自己创建一个企业。 &#xff08;tips&#xff1a;一定要屏蔽自己创建的企业的消息&#xff0c;不然消息很多&#xff09; 2…

Burpsuite超详细安装教程

概述 Burp Suite 是用于攻击web 应用程序的集成平台&#xff0c;包含了许多工具。Burp Suite为这些工具设计了许多接口&#xff0c;以加快攻击应用程序的过程。所有工具都共享一个请求&#xff0c;并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报。 接下来我来给大…

Linux4.8Nginx Rewrite

文章目录 计算机系统5G云计算第六章 LINUX Nginx Rewrite一、Nginx Rewrite 概述1.常用的Nginx 正则表达式2.rewrite和location3.location4.实际网站使用中&#xff0c;至少有三个匹配规则定义5.rewrite6.rewrite 示例 计算机系统 5G云计算 第六章 LINUX Nginx Rewrite 一、…

看完一位毕业的拼多多“P9”级别员工以及他的四页半简历,我悟了

前几天在脉脉上看到一个热帖&#xff0c;是刚从PDD毕业的P9级别员工吴可发的&#xff0c;同时附上了他的简历&#xff0c;这个简历很有意思&#xff0c;基本上和国内互联网这十多年来的发展步骤重叠&#xff0c;能够反映出&#xff0c;在这样一个跌宕起伏的时代里&#xff0c;个…