跳转至

第一阶段报告

小组分工

  • 孙筠桐 > - 对走法规则算法的具体实现与调试。 > - 对程序界面构建的理论建议与实践。
  • 马境鸿 > - 对程序界面的实际编辑与调试。 > - 对多个界面切换的实现以及对各个界面的设计。
  • 邓李俊 > - 对程序界面构建的理论建议与调试。 > - 对程序总体框架构建的实现与各个阶段的建议。

代码框架设计

1.进入界面

1.1第一个界面

1
欢迎界面。用label调整了欢迎语句,并且添置了两个按钮,“开始游戏”按钮打开下一个界面,“退出”按钮直接退出程序。

1.2第二个界面

1
选择模式界面。两个按钮,一个连接到“单人模式”界面,一个连接到“联机模式”界面。

1.3第三个界面

1
选择类型界面。两个按钮,一个连接到“单人对战”界面,一个连接到“人机对战”界面。

1.4第四个界面

1
选择类型界面。四个按钮,分别连接到二人模式,三人模式,四人模式与六人模式。

注:每个界面都有“返回”与“退出”按钮,“返回”返回上一个界面,“退出”则直接退出程序。

2.棋盘实现

  • 通过构建painter,调用库函数,通过对直角坐标系中各个点的连线,完成所有的线段构建。再调用库函数,在所有的交点处画出圆圈,使得成为基本的棋盘。

3.棋子实现

3.1通过定义了一个棋子类,私有成员为横坐标,纵坐标,id以及状态。再通过对所有棋子进行挨个赋值,依次把基本信息输入,完成对棋盘上所有棋子信息的构建,再通过painter画出棋子。

3.2四个基本棋盘界面

  • 二人模式
  • 三人模式
  • 四人模式
  • 六人模式

4.走法规则实现

4.1构建鼠标左键释放事件,先判断是要选中棋子还是放下棋子,再对棋盘进行重绘,标出所有合法位置。

4.2考虑每个棋子具有两种走法,一种向相邻位置走,取六种坐标并进行后续判定合法,即包括在棋盘格点上、不与其它棋子重合;另一种则是跳跃,取六种方向,判定合法性,即中间相隔一个棋子,后续无棋子。跳跃方式采用深搜并记忆,从而保证取到所有可走位置。两种走法均会修改棋盘上对应数据,再调用repaint函数进行再绘画,标明可走位置。

遇到的问题及解决方法

1.坐标偏移问题

1
为了避免在界面原坐标原点进行绘制,导致顶端棋子只能被遮挡的问题,我们对坐标进行了偏移,但随之而来的是鼠标点击位置与棋子不匹配的问题。为此我们新设置了一个函数来处理鼠标位置偏移,使之与棋子坐标相符。

2.深搜算法问题

1
对走法规则的算法中,我们设计了很多方案,也进行了多次尝试,最终确定了穷举与深搜相结合的算法:涉及到走一步的使用穷举,对所有可能方向进行搜索。涉及到跳步的算法,使用深搜,进行所有合法位置的搜索。

3.界面优化问题

1
在对棋盘的染色上,进行了多次讨论,使用在线颜色选择器进行了选色,并对贴入照片进行了尝试。决定在下一阶段继续进行ui界面的优化。