课程设计——五子棋(201521123038)
一.团队课程设计博客链接
二.个人负责模块或任务说明
- 后台算法编程,包括通用棋子的行动判断,电脑玩家的算法等涉及到棋子的部分
- 解决代码bug
三.自己的代码提交记录截图
四.自己负责模块或任务详细说明
- 因为以前没有涉及到游戏设计,遇到棋子的下法还是有点茫然,所以先在网上参考了一些关于棋子方位的判断方法,在有一定的思路之后按照自己的想法编程。
●GomokuModel:用来编写棋子的基本下法,在进行人人对战或人机对战时调用
●类内部数组定义数组 Chess[][]board=new Chess[16][16]
,Chess为枚举类
●将落子信息赋值数组
● 读取该位置棋子信息
●用于判断该位置是否已经有棋子
●清空数组信息,用于清屏
● 重置棋子,清空该位置的棋子信息,用于悔棋操作
●用于电脑玩家判断该位置是否能赢
●上述操作需要异常捕获,因为在代码测试过程中因为逻辑问题产生过数组越界异常,为保证代码安全给予保留
● isWin方法,用于判断是否赢棋
-
以传入棋子的位置为中心点,定义东西南北是个方向的数据
-
由西至东判断,连成五子时返回true,有北至南判断同理
-
在进行两个斜方向判断前要将位置变量复原
-
由西南至东北判断,东南至西北同理
● ComputerPlayer:设置电脑玩家,用于制定电脑玩家的落子
● 默认电脑玩家白棋后手
● playChess方法,返回位置数组pos
-
设定变量,获取人类玩家最后的落子信息
-
全盘遍历,将pos定义在临近人类玩家最后落子的位置
-
判断遍历位置是否能让电脑玩家赢棋,能则返回当前位置信息
-
上述操作没有返回,则从四个方向判断人类玩家是否有三个及三个以上相连棋子,有则将其堵住,没有则将p返回
● check方法,判断人类玩家是否有三个以上相连棋子和GomokuModel中的isWin方法类似
-
定义变量
-
主要判断方法
● Board中关系到棋子操作中的部分
● mousePressed:
-
默认人类玩家先手
-
如果人人对战则将棋子变量colorName置白色,用于下一个人操作
-
如果人机对战,则不对colorName进行操作,启用ComputerPlayer
-
无论哪种方式,在下完一步棋之后都有判断是否赢棋
-
人类玩家操作:
-
电脑玩家:
● goback:悔棋操作,人人对战退一步,人机对战退两步
五.课程设计感想
- 总的来说五子棋对方向判断还是很重要的,需要时刻逻辑清晰,不然后面寻找bug会很艰难。
- 两个人的磨合还是关键,界面和后台操作的融合都需要不断地修改代码。最后的的代码和最初的理念还是有差别的,这个过程中的交流很关键。
- 在进行对战模式切换的时候遇到了变量传参的问题,修改了部分方法的返回值。所以实践还是很重要的。