QT做的成三棋、打三棋、九连棋、莫里斯九子棋应用程序及其源码

古老的游戏

莫里斯九子棋

九子棋(Nine Men's Morris)是一个非常古老的智力的游戏。其历史甚至可以追溯到公元前1400多年的古埃及时代。

  1. 棋盘有24个格点,对弈双方各有九个棋子,轮流下到棋盘的空位上。
  2. 如果一方有三个棋子连成一线,就可以选择吃掉对方的一个棋子。被吃的棋子不可以是位于对方所形成的三连之内,除非对方所有棋子都形成了三连。
  3. 在九个棋子都布放到棋盘上以后,可以沿棋盘上的线条移动到相邻的位置来形成三连以吃掉对方的棋子。一个三连可以开开合合重复使用。如果一方所剩下的棋子只有三个时,棋子可以飞到任意空位。
  4. 当一方的棋子少于三枚,则告负,游戏结束。

此外,国内还有几个变种:​​成三棋,打三棋(12子棋),九连棋等。

成三棋

与莫里斯九子棋类似,但一方仅剩3子时不能飞子。

打三棋(12子棋)

  1. 双方各12颗子,棋盘有斜线;
  2. 摆棋阶段被提子的位置不能再摆子,直到走棋阶段;
  3. 摆棋阶段,摆满棋盘算先手负;
  4. 走棋阶段,后摆棋的一方先走;
  5. 一步出现几个“三连”就可以提几个子;
  6. 其它规则与成三棋基本相同。

九连棋

  1. 规则与成三棋基本相同,只是它的棋子有序号;
  2. 相同序号,位置的“三连”不能重复提子;
  3. 走棋阶段不能行动(被“闷”),则由对手继续走棋;
  4. 一步出现几个“三连”就可以提几个子。

应用程序说明

用户界面

系统支持

Windows版支持64位Windows 7,8,10系统,不支持32位系统及Windows XP。

Linux的的的版支持的Debian的的系列(如Ubuntu的的的,Deepin等等)。

程序功能

  1. 含四种不同规则的游戏(成三棋,打三棋,九连棋,莫里斯九子棋);
  2. 鼠标放在规则菜单下各规则项,有会有详细的规则提示;
  3. 可以限制时间,限制步数;
  4. 落子音效,落子动画;
  5. 行棋状态栏提示;
  6. 棋谱的前后遍历(可以悔棋);
  7. 棋谱的自动演示;
  8. 棋局转变(翻转,镜像,旋转),棋子颜色交换;
  9. 对战电脑,及不同AI引擎对战(待完善);
  10. 联网对战(待完成);
  11. 文本棋谱显示,打开及保存;
  12. 其它。

源码说明

软件构架

  • GUI框架:Qt5.11,QT5大版本下均可通用。
  • 编译器:MSVC2017,MSVC2013及以上版本可用。
  • 源文件编码:所有头文件(* .h)中和源文件(*的.cpp)采用UTF-8 + BOM编码格式的.pro文件等采用UTF-8无BOM编码。
  • 本程序采用MVC(模型 - 视图 - 控制器)设计规范,对应类如下:  
 MVC
 ├─Model
 │  ├─NineChess:         用标准C++写的棋类模型,处理下棋过程
 │  └─NineChessAi_ab:    用标准C++写的alpha-beta剪枝算法AI模型,模仿人类下棋
 ├─View
 │  ├─NineChessWindow:   从QMainWindow派生的主窗口类,由Qt自动生成
 │  ├─ManualListView:    从QListView派生的列表框,用于显示棋谱
 │  ├─GameView:          从QGraphicsView派生的视图框,用于显示棋局
 │  ├─GameScene:         从QGraphicsScene派生的场景类
 │  ├─BoardItem:         从QGraphicsItem派生的棋盘图形类
 │  └─PiecedItem:        从QGraphicsItem派生的棋子图形类
 └─Controller
    ├─GameController:    从QObject派生的控制类
    └─AiThread:          从QThread派生的AI线程类

这个程序用到了很多的Qt的特性,其模式后期可以扩展到各种棋类游戏。

许可协议

本项目所有类代码全部原创。 
详见文末Gitee项目内的License文件。请取用的朋友尊重知识产权。

更新历史

详见文末Gitee项目内的History文件。

作者声明

由于本人非IT科班出身,未经专业培训,也没有现成的QT棋类游戏源码做参考,源码中肯定有很多不合理,不规范之处。望好心的前辈不吝赐教。对于同道初学者,可以参考,相互学习,共同进步。  
多年前上大学那会儿,笔者就打算做这么个程序出来,然而条件比较艰苦:  
一来没有老师教,课上只学了Ç语言和VB,C++是笔者自学的,一个人啃晦涩过时的MFC;  
二来我穷到连个电脑都没有......  
三嘛,就是贪玩......  
工作之后有条件了,我又自学了C#和Qt,但都很肤浅,没深入学,只用来做几个小工具而已。  
这个项目,我在2013年用标准C++写了个模型类,然后扔了不管;2015年自学Qt写了个简单的界面,又扔了不管;直到2018年5月才重新开始做。  
如果你发现本程序有什么问题或好的建议,请与本人联系。我的邮箱是:liuweilhy@163.com  
>                                            by liuweilhy 2018年11月26日

项目源码及发行版下载

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
乘三对弈时,可由对弈双方中任意一方持任黑色子先下,另一方持另白色子后下,并交替进行;对弈过程中,分为放和走两个阶段,下面分别介绍: 第一阶段:放   开局时,先下一方在盘中任一下点上放一子,后下一方再在先下一方放点以外的其他下点上放一子,依次循环,轮流放子,在放子过程中,如果有一方的三个子成一线(即为成三)时,成三的一方可以吃掉另一方的一枚非成三的子(如果对方的子全部都是成三状态,那就可以吃掉对方任意一颗子)。然后由被吃方继续下子。直到双方手中无子(先下一方必先于后下一方无子)。   成三:当一方的三枚子成一线(即纵线或横线的三个下点上为同一色子)时,该方成三;得到成三棋的一方可吃掉对方的一枚子;然后由对方继续下。   需注意的是:一方成三吃掉对方的子后,在放阶段接下来的一段时间内,任何一方均不得再将子放在被吃掉子的那个下点上,直到走阶段开始。   第二阶段:走   走阶段开始于放阶段结束,双方手中均已无子时。由先放完一方先走子每次只能向周边空的位移动一步;对弈双方轮流走。成三时与放阶段成三一样。   开三:当一方的子再走一步就能成三时,称为开三。   输赢判断:   1、当盘上一方的子数少于3个时,即没有成三的可能时,局终,盘上多一方为胜方,少一方为负方。   2、当盘上一方的子都无法移动时,局终,子无法移动的一方为负方。另外一方为胜方。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值