课程设计——五子棋(201521123038)

课程设计——五子棋(201521123038)


一.团队课程设计博客链接

JAVA课程设计——团队博客


二.个人负责模块或任务说明

  • 后台算法编程,包括通用棋子的行动判断,电脑玩家的算法等涉及到棋子的部分
  • 解决代码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会很艰难。
  • 两个人的磨合还是关键,界面和后台操作的融合都需要不断地修改代码。最后的的代码和最初的理念还是有差别的,这个过程中的交流很关键。
  • 在进行对战模式切换的时候遇到了变量传参的问题,修改了部分方法的返回值。所以实践还是很重要的。
原文地址:https://www.cnblogs.com/sakurai3104/p/7063564.html