第30篇 Android Studio实现五子棋游戏(一)杂记

1.需求分析

五子棋游戏写Qt的时候就写过一个,现在正在学习Android,所以就想写一个,因为在手机上玩,感觉是不一样的。当然了,实现的功能还是一样的,就是之前的那几种功能。

1.1.判断胜负

判断胜负这个是很容易实现的,既然我们还可以落子,那么我们落子之前,肯定是没有胜负的,那么我们只需在落下当前棋子之后,以这颗棋子为出发点,通过判断它四个方向,即南北反向,东西方向,西北东南方向,东北西南方向是否有同颜色的棋子,统计数量,如果数量达到五颗以上,那么当前棋手就赢了,玩家或者电脑都不能再落子。

1.2.AI拦截及获取落子位

人机模式时,电脑要能够拦截玩家,也要能通过判断获取自己的最佳落子位,那么就要实现拦截功能。电脑落子在获取位置时,可以按一定的优先级去判断最佳位置。
第一级:自己已经有四颗连子,而且可以在尾部或中间落子,此时可落子位置便是最佳位置。
第二级:玩家已经有四颗连子,此时断且不管是否必输,都要在必须在可落子的地方拦截,尽可能避免连成五子。
在这里插入图片描述在这里插入图片描述

第三级:自己三子相连,且能够落子后连成四子并有连成五子的机会,则可落子。
第四级:玩家三子相连,且若不拦截玩家再落子成四子并有成五子的风险,则拦截。
在这里插入图片描述在这里插入图片描述
第五级:自己有三角阵,这个三角阵就是如果再添加一子,那么就能形成两个方向上的三连子,那就破不了,所以在有机会的时候就破,当然如果自己完成这样,那就顺势而为了。
第六级:玩家三角阵,玩家快要形成时,破解掉。
在这里插入图片描述
图片只是展示,不能较真。

第七级:有两颗连子,且能够发展成三连子、四连子,则获取当前位置作为落子位置。
第八级:九宫格找位置,就是以上一颗棋子为中心,在其周围寻找合适的落子位置。
第九级:随机落子。

具体的函数以后再说。

2.界面

界面没有什么花里胡哨的。

2.1.布局

在这里插入图片描述
左边是因为太小,所以看得不是很清楚,布局就看右边就行了,装饰的有了布局就很好弄上去了。
首先总体的布局就是一个线性垂直布局,第一排是一个TextView,显示一句话。
然后第二排是显示当前选手和当前的模式是什么。三个TextView和一个Spinner(下拉选项)。
第三排是放的是三个ImageView,显示三张图片而已。
第四排是一个继承于View的界面,用于显示棋盘和棋子,这个界面是单独写了一个棋盘类,然后通过特定方法调用于布局文件中。
第五排是一排按钮,开始,提示,悔棋,帮助,这四个。

2.2.名称和资源图片

背景图片网上找找就可以了,我喜欢仙侠的,所以找了一张仙侠背景,蛮不错的,然后棋子可以通过截图,然后利用处理工具处理成透明背景的就行(之前学MFC的时候可以用个代码弄的,这个Java代码不知道有没有),利用PS弄一弄就好,具体方法网上有很多的。
找到图片保存之后,复制进来贴上去就行了。
在这里插入图片描述然后就是为了有个良好的编程习惯,也是一种管理数据的习惯吧,把必要的值都用变量表示,让别人一看就知道是什么意思,所以把所以表示名称的都保存在strings.xml文件里。这样就好找了。还有Spinner下拉选项要弄一个数组保存选项。
在这里插入图片描述

3.接口联系

因为棋盘类是作为一个普通的界面类,所以没有直接获取主布局文件的一些信息,比如我需要获取当前的游戏模式,就不能通过layout_main.xml里面的Spinner的对应id对Spinner的变量初始化,然后获取当前的选项名称,就获取不了选项名称。
要实现这一个功能,就要写一个接口类GameCallBack,通过主类重写接口里面的方法,然后棋盘类初始化接口类对象为主类,即可实现获取主类相关数据的方法了。在这里插入图片描述这个是网上学来的,但是添加了自己的方法,需要什么就往里面加什么,这也挺好。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大唐不良猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值