- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE
1 -
基于Android的五子棋游戏设计
基于Android的五子棋游戏设计
9416〔2021〕01-0161-02
0引言
五子棋是一种两人对弈的纯策略型棋类游戏,起源于中国古代,它简单上手,老少皆宜,是全国智力运动会竞技项目之一。随着近几年来使用Android手机的用户不断增加,Android平台游戏凭借其可玩性高、上手简单、游戏稳定、沟通方便和扩展性高等特点受到更多人的喜爱[1]。本文将基于Android平台设计一个五子棋游戏,实现黑棋玩家与白棋玩家对弈并判定输赢。
1应用设计分析
1.1应用功能分析
游戏开始时,由黑子开局,将一枚棋子落在棋盘一坐标上,然后由白棋落子,如此轮番下子,直到某一方首先在棋盘的竖、横或斜三方向上的五子连成线,则该方该局获胜。功能划分如图1所示,〔1〕开始;〔2〕黑棋或白棋落子;〔3〕胜负推断;〔4〕重玩;〔5〕任意一方悔棋;〔6〕退出游戏。
1.2应用规律分析
五子棋游戏规律分为四个部分:黑棋下、推断黑棋是否获胜、白棋下、推断白棋是否获胜;在推断获胜的黑白子方法相同,所以只需完成黑棋下、白棋下、推断获胜三个部分。
1.3方法设计
onTouch〔〕负责监听触摸屏幕事件调用悔棋、重玩等功能,推断玩家触摸棋盘是否符合五子棋规则,goBack〔〕实现悔棋功能,rePlay〔〕清空全部棋子数据实现重玩游戏功能,checkWinner〔〕判斷胜负。
2应用关键功能实现
2.1应用界面绘制
五子棋界面的开发主要在Activity中使用自定义View完成。在自定义View中基于Canvas重写onDraw〔〕呈现图像、文字、线条等二维图形和坐标。
2.1.1棋盘绘制
在ChessFiveView类中,定义绘制线条的起始点x0、y0,间距D,最大行数maxRows如图2所示,最大列数maxColx如图3所示,复写父类的onDraw方法,设置画笔颜色为黑色,使用for循环调用drawLine方法即可绘制出垂直交叉的棋盘线如图4所示。
2.1.2棋子绘制
重写onTouch方法监听玩家触摸事件,通过event即可猎取玩家手指触摸棋盘的x、y值。依据棋盘线条的绘制规则进行运算,用对应的棋子占据该位置。使用三目运算符更换下一个棋子类型,调用postInvalidate〔〕方法重新绘制界面,将棋子绘制在棋盘上。当使用postInvalidate〔〕方法后,在onDraw〔〕方法中依据二维数组行列号绘制棋子,如图5所示。
2.2应用功能实现
2.2.1悔棋功能
在goBack〔〕方法中从已下子对象数组中取出最终的一个元素lstStep.get〔n-1〕,获得lstStep中当前行和列的信息,将对应位置的二维数组清零chess[row][col]=0,使用postInvalidate方法重新画图,把最终一个元素移除lstStep.remove〔n-1〕。
2.2.2重玩功能
在rePlay〔〕方法中用for循环将chess[row][col]数组数值清零,重置棋子类型和胜负,并重新画图。
2.3五子棋胜负推断
checkWinner〔〕中给定一个点、一个方向、一个相对坐标值,就能得到一个二维坐标。将坐标代入当前棋盘数组chess中,保存对应位置每个棋子的类型。在游戏中,每当玩家下一步棋后猎取该棋子,推断其横、竖、正斜、反斜4个方向是否符合赢的条件[2]。若某一方向同类型棋子大于等于5,则猎取当前棋子类型进行胜负推断,游戏结束。
文档评论(0)