第一阶段报告
小组分工
- 孙筠桐
> - 对走法规则算法的具体实现与调试。
> - 对程序界面构建的理论建议与实践。
- 马境鸿
> - 对程序界面的实际编辑与调试。
> - 对多个界面切换的实现以及对各个界面的设计。
- 邓李俊
> - 对程序界面构建的理论建议与调试。
> - 对程序总体框架构建的实现与各个阶段的建议。
代码框架设计
1.进入界面
1.1第一个界面
| 欢迎界面。用label调整了欢迎语句,并且添置了两个按钮,“开始游戏”按钮打开下一个界面,“退出”按钮直接退出程序。
|

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

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

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

注:每个界面都有“返回”与“退出”按钮,“返回”返回上一个界面,“退出”则直接退出程序。
2.棋盘实现
- 通过构建painter,调用库函数,通过对直角坐标系中各个点的连线,完成所有的线段构建。再调用库函数,在所有的交点处画出圆圈,使得成为基本的棋盘。
3.棋子实现
3.1通过定义了一个棋子类,私有成员为横坐标,纵坐标,id以及状态。再通过对所有棋子进行挨个赋值,依次把基本信息输入,完成对棋盘上所有棋子信息的构建,再通过painter画出棋子。
3.2四个基本棋盘界面
4.走法规则实现
4.1构建鼠标左键释放事件,先判断是要选中棋子还是放下棋子,再对棋盘进行重绘,标出所有合法位置。
4.2考虑每个棋子具有两种走法,一种向相邻位置走,取六种坐标并进行后续判定合法,即包括在棋盘格点上、不与其它棋子重合;另一种则是跳跃,取六种方向,判定合法性,即中间相隔一个棋子,后续无棋子。跳跃方式采用深搜并记忆,从而保证取到所有可走位置。两种走法均会修改棋盘上对应数据,再调用repaint函数进行再绘画,标明可走位置。
遇到的问题及解决方法
1.坐标偏移问题
| 为了避免在界面原坐标原点进行绘制,导致顶端棋子只能被遮挡的问题,我们对坐标进行了偏移,但随之而来的是鼠标点击位置与棋子不匹配的问题。为此我们新设置了一个函数来处理鼠标位置偏移,使之与棋子坐标相符。
|
2.深搜算法问题
| 对走法规则的算法中,我们设计了很多方案,也进行了多次尝试,最终确定了穷举与深搜相结合的算法:涉及到走一步的使用穷举,对所有可能方向进行搜索。涉及到跳步的算法,使用深搜,进行所有合法位置的搜索。
|
3.界面优化问题
| 在对棋盘的染色上,进行了多次讨论,使用在线颜色选择器进行了选色,并对贴入照片进行了尝试。决定在下一阶段继续进行ui界面的优化。
|