三三棋也称侗棋、棋三,是自古以来就流传于**少数民族民间尤其是侗族、壮族人民的一种双人对弈的版图休闲娱乐棋类游戏,并流传到我国其它地区。由于规则简单,劳动人民在劳作之余随手用粉石画出棋盘,以小树枝、小石子、小瓦片作为棋子即可开始下棋。本人在幼时曾见过家中长辈在田间下三三棋,印象很深。在构思软件创意时 发现三三棋在网络上还查不到已经发布的游戏程序,在各类网页小游戏平台上也找不到对应的游戏。在和同学朋友交流的过程中,发现我们青年一辈中很少有人了解三三棋的下法。在网络游戏发展如此迅猛的当下,这样兼具传统人民智慧和数学内涵的游戏也值得传承下来。因此本人萌生了开发三三棋游戏程序的构想。
本次开发计划实现单机的棋谱查看、自我练习和双人对战功能,实现基本的棋类游戏的功能。鉴于目前三三棋的受众群体并不广泛,因此需要加入规则演示的模块,通过提示引导玩家一步步学会游戏规则。由于能力有限,希望在日后的新版本中可以加入人机对战和网络对战等功能。
可以使用 Qt 导入,编写时使用的 Qt 版本为 Qt 5.9.0,使用的编译器为 Qt 5.9 for Desktop (MinGW 5.3.0 32 bit)。为了使得数据查看顺利,请将代码文件夹中的 ChessBook.db 文件加入项目 build 文件夹,将 data 文件夹加入项目 build 文件夹下的 debug 或 release 文件夹中。
在 windows 7 或 windows 10 系统(32 位或 64 位均可)下打开安装包三三棋.msi ,根据提示选择安装文件夹即可完成安装。
共设计了四个窗口,通过总窗口选择规则演示、练习模式和对战模式三个窗口。然后用户可进入对应的窗口开始游戏,每个窗口可以返回总窗口来选择其他 的模式。四个窗口对应的设计了 Login,Introduction,Practice,Humanplay 四个 ui 界面。为了图形对象处理方便,设计了 BoardView 棋盘类,Piece 棋子类,用于在 ui 界面中添加棋盘和棋子对象。对于盘面信息和棋谱信息的处理,分别设计了 Board 和 ChessBook 两个类,程序运行时生成盘面数据对象和棋谱数据对象进行记录和分析。Controller 对象是控制整个游戏的核心,信息从界面类经过 Controller 的处理传递给数据部分,信息的反馈等指令也通过 Controller 发出。Generator 类用于存储棋子走法判断的函数,可以对棋盘上的棋子落子给出判断,或根据落子 情况对棋盘信息进行计算修改。
三三棋的规则相对简单,在规则演示模块中设计了五个步骤解释下棋规则。 其中关于落子和运子的规则用户可以在棋盘上操作来加深理解,用户可以通过点 击上一步、下一步按钮一步步学习。
练习模式下,用户可以自己在棋盘上练习棋路,也可以打开存储的历史棋谱 进行复盘。用户可以在打开的棋谱中选择在当前局面试下,以达到更好的复盘效果。对棋谱的打开、保存和删除等功能都是通过 ChessBook 类中的方法实现,更 新控制器 Controller 中的数据对象,并由控制器修改 Practice 窗口中的棋盘盘面 状态和棋谱状态。下棋的逻辑是通过 Controller 调用 Generator 中的方法实现。
对战模式下,双人可以设置局时限时比赛,可以选择暂停、悔棋、认输等操作。对战的棋谱可以在对局后保存,并在练习模式中查看历史棋谱。下棋的逻辑 与练习模式类似。
本程序的数据存储主要是对于历史棋谱信息的存储管理。棋谱以文本形式存 储于 data 文件夹中。采用了 Qt 中自带的 QSQLITE 数据库存储棋谱的文件名与 路径等信息,调用时通过数据库中的路径索引查询棋谱数据。
三三棋游戏中关键的函数围绕着行棋逻辑展开。 在对战模式中,棋盘对象 BoardView 中 getPoint 函数将鼠标点击落点的像素 坐标转化成棋盘位置坐标。控制器对象 Controller 中的 playPiece 三个系列函数对 通过信号和槽机制传递的棋盘位置坐标进行判断,并调用行棋逻辑生成器 Generator 中的判断函数 isValidPose,isValidMove 等函数判断行棋的逻辑合理性, 对合法的行棋则调用 Genetator 中的函数 setStepNext 来完成数据的更新。悔棋则 主要调用了 Generator 中的函数 setStepLast 完成数据的处理。 在练习模式中对棋谱上一步和下一步的调用与上述相似,回退上一步以利用 Generator 中的 setStepLast 函数为主,前进下一步则主要是利用 Generator 中的 setStepNext 函数。
安装包位于:threeChess/install package/三三棋.msi
本游戏经过测试可以在前述 windows 系统中正常安装。
由于在设计时考虑了窗口的大小问题,三个游戏模式的控件大小会随着窗口大小变化,窗口在不小于 1000px × 600px 的基础上都可以自行调整。运行时可以通过总窗口中的按钮选择关闭或打开背景音乐。
本次开发三三棋小游戏的过程也是本人第一次完全独立地设计、规划、编写 一个游戏软件,无论是对于代码的理解,还是查询帮助文档和查询相关资料的能力都有了进一步的提升。 与此同时,由于选题三三棋游戏可查找的资料很少,大多来自于民间和自己的传闻,因此自己对于一款游戏的定义、设计、规则规范都有了更深的体会。甚 至为了数据处理,自己定义了这款棋类游戏的棋谱规范和术语,感受到了超出代 码本身的获得感和价值感。 当然,不足之处也很明显,这款游戏的功能还不够完善,如果要做到真正的推广工作,还要再详细地了解人机博弈算法和计算机网络的知识,完善人机对战和联网对战的功能,希望在日后可以将这部分工作逐步完善。