资源下载地址:https://download.csdn.net/download/sheziqiong/85734829

文档

文档分为两部分,一部分在代码中,然后通过doxygen生成HTML。解压本目录下的html.zip后打开index.html即可查看;第二部分在此说明文档内,在这里会介绍一些架构方面的信息。

游戏操作逻辑

相关的命名空间有:
Chess:这是包含中国象棋的操作逻辑的命名空间

主要操作是possibleMove(int x, int y),通过整个棋盘每个位置上的信息、中国象棋的规则来获得位置(x, y)这个棋子可以移动到的位置。

其余操作有“判断是否将、帅对视`、”判断当前局面是否为必胜、必败态”、“是否将军”等,这些操作均使用最简单的枚举算法。

UI框架

相关的类有:
MainWindow:主窗体
ChessWidget:主窗体里的主要部件,用于显示棋盘、操作棋盘,并且会发出相应音效
PanelWidget:一个dock部件,置于主部件上方,用于显示“轮到谁进行下棋”、“当前回合所剩时间”、“认输按钮”
ClientDialog:连接到对战的对话框,可以设置IP(IPv4)和端口
ServerDialog:建立服务器,可以设置监听的端口、当前用户执红or执黑、每回合时间
LoadingDialog:一个能播放动画的等待连接的对话框

棋盘的绘制是用paintEventQPainter进行绘制的。

网络通信

使用QTcpSocket进行传输数据(监听端是使用QTcpServer进行监听,并且只返回一个可用的socket)

发送端是阻塞(同步)发送的,接收端是非阻塞(异步)接收的。

我用的是QDataStream来操作QTcpSocket,这样省去很多麻烦,比如发送、接受数据只需要简单的这样写:

发送端:

QByteArray data;
QDataStream st(&data, QIODevice::WriteOnly);
QString str = "hahaha";
int op = 2333;
st << op << str;
socket->write(data);
socket->waitForBytesWritten();

接收端:

auto data = socket->readAll();
QDataStream st(&data, QIODevice::ReadOnly);
QString str;
int op;
st >> op >> str; // op == 2333, str == "hahaha"

通信协议如下:

第1个数字表示操作类型:

  • 0: server传输初始数据到client;首先传输client是红方(0)还是黑方(1),接着传输每一回合的时间,最后将残局文件传输过去
  • 1: 移动棋子;接下来4个整数x1, y1, x2, y2,表示坐标(x1, y1)移动到(x2, y2)
  • 2: 认输;接下来不传输任何其他东西
  • 3: 我赢了!接下来不传输任何其他东西

资源下载地址:https://download.csdn.net/download/sheziqiong/85734829

中国象棋游戏设计与实现相关推荐

  1. 基于python的游戏设计与实现-基于Python的网络中国象棋游戏设计与实现

    基于Python的网络中国象棋游戏设计与实现 摘要中国象棋是一种家喻户晓的棋类游戏,随着互联网时代的到来,人们的娱乐方式也逐渐向PC端和移动端上发展.本文将传统的中国象棋游戏和当下的互联网技术结合作为 ...

  2. 团队-中国象棋游戏-设计文档

    http://www.cnblogs.com/zhanghongjian/p/7574218.html 成员:赵建辉 张明成 张洪剑 张鸿程 徐宏璇 喻政博 目标:1.绘制象棋棋盘 2.在指定位置绘制 ...

  3. 设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal();设计ChessPiece的具体实现类(如车,马,帅等)

    设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal():设计ChessPiece的具体实现类(如车,马,帅等),这些类能够根据自身特点实现不 ...

  4. 基于Java的中国象棋游戏的设计与实现

    技术:Java等 摘要: 近些年,Java技术日趋成熟,它的跨平台性,健壮性以及使用人数的增多都表明了它的受欢迎程度不断攀升,因此选用了Java语言作为中国象棋游戏的开发语言.并且中国象棋文化源远流长 ...

  5. 朋友写的一个中国象棋游戏,JAVA代码

    朋友写的一个中国象棋游戏,JAVA代码.有兴趣的可以这里下载:中国象棋下载 (1)地址,不知现在还能下否....中国象棋历史悠久,吸引了无数的人研究,现对中国象棋的对战和实现棋谱的制作做如下的设计和说 ...

  6. 基于Java+Swing实现中国象棋游戏

    基于Java+Swing实现中国象棋游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味 ...

  7. Qt终极教程——用Qt编程实现中国象棋游戏(提供源代码和程序编译运行教程)

    Qt终极教程--用Qt编程实现中国象棋游戏 目录 Qt终极教程--用Qt编程实现中国象棋游戏 简介 运行可执行程序体验象棋游戏 Qt 安装 源代码的编译.运行与调试 生成预编译的可执行程序 简介 本文 ...

  8. c语言编程一个象棋游戏,急求:C语言编写的中国象棋游戏一个

    急求:C语言编写的中国象棋游戏一个 來源:互聯網  2009-09-08 12:30:35  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 由于学习 ...

  9. C++900行代码实现中国象棋游戏规则以及相关功能

    本文章通过C++中的900行代码实现中国象棋游戏以及相关功能,主要的内容如下: 1.设置未进入游戏前的主页面: 2.绘制棋盘(如果有刚好尺寸的图片也可直接加载),包括棋盘网格,炮与兵的特殊标记绘制: ...

  10. 中国象棋游戏Chess(3) - 实现走棋规则

    棋盘的绘制和走棋参看博文:中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制,中国象棋游戏Chess(2) - 走棋 现在重新整理之前写的代码,并且对于每个棋子的走棋规则都进行了限制,不像之前那 ...

最新文章

  1. 最新!中国内地大学ESI排名出炉:313所高校上榜!
  2. 清华大学AMiner团队发布《超级计算机研究报告》(附下载)
  3. numpy之reshape()
  4. 怎么删除顽固的服务器文件夹,实用技巧:删除Windows XP下顽固文件方法
  5. 10投屏后没有声音_手机投屏到电视没有声音?
  6. jozj3419-最大利润【树形dp】
  7. Superset单点登录调整源码
  8. vue.js踩坑之ref引用细节点
  9. python基础教程运行程序_Python入门基础教程:WSGI
  10. 不同程序语言的注释和变量要求
  11. iOS中滤镜处理及相关内存泄漏问题的解决
  12. nc财务系统适配的java_用友NC系统使用过程中常见问题和解决方法!财会必看!...
  13. 数据挖掘导论课后习题答案 第二章(一)
  14. C++求100以内中的所有素数
  15. 计算机基础知识及键盘熟悉实验报告,实验报告-实验一计算机的认识与指法练习.doc...
  16. 52周存钱挑战2.0
  17. OpenSTF手机设备管理平台-------二次开发
  18. Gradle剔除依赖
  19. 影响微信公众号排名的因素
  20. java程序调用百度Geocoding API逆地址解析通过经纬度查询位置

热门文章

  1. 曼昆《经济学原理(微观经济学分册)》(第6版)课后习题答案
  2. 2013 VS 2018:五年前和今天的十大数字货币大比拼
  3. 生信技能树linux虚拟机,Linux 20题-生信技能树
  4. 算法学习笔记(使用追赶法解三对角方程组)
  5. 大学四年,电脑必备的三个宝藏工具软件
  6. 记录甘肃机顶盒MG101_U2破解之路的辛酸历程
  7. android添加本地视频播放器,找到令人满意的Android本地视频播放器是如此困难吗?...
  8. MapReduce----并行支持向量机(PSVM)第二部分之原始对偶内点法
  9. 两种内点法,障碍函数法(Barrier Method)和原始对偶法(Primal-Dual Method)
  10. 苹果手机以旧换新价格表_苹果支持安卓手机以旧换新;索尼公司将更名;百度网盘推出“防误删”文件恢复服务...