中国象棋游戏设计与实现
资源下载地址: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
:一个能播放动画的等待连接的对话框
棋盘的绘制是用paintEvent
和QPainter
进行绘制的。
网络通信
使用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
中国象棋游戏设计与实现相关推荐
- 基于python的游戏设计与实现-基于Python的网络中国象棋游戏设计与实现
基于Python的网络中国象棋游戏设计与实现 摘要中国象棋是一种家喻户晓的棋类游戏,随着互联网时代的到来,人们的娱乐方式也逐渐向PC端和移动端上发展.本文将传统的中国象棋游戏和当下的互联网技术结合作为 ...
- 团队-中国象棋游戏-设计文档
http://www.cnblogs.com/zhanghongjian/p/7574218.html 成员:赵建辉 张明成 张洪剑 张鸿程 徐宏璇 喻政博 目标:1.绘制象棋棋盘 2.在指定位置绘制 ...
- 设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal();设计ChessPiece的具体实现类(如车,马,帅等)
设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal():设计ChessPiece的具体实现类(如车,马,帅等),这些类能够根据自身特点实现不 ...
- 基于Java的中国象棋游戏的设计与实现
技术:Java等 摘要: 近些年,Java技术日趋成熟,它的跨平台性,健壮性以及使用人数的增多都表明了它的受欢迎程度不断攀升,因此选用了Java语言作为中国象棋游戏的开发语言.并且中国象棋文化源远流长 ...
- 朋友写的一个中国象棋游戏,JAVA代码
朋友写的一个中国象棋游戏,JAVA代码.有兴趣的可以这里下载:中国象棋下载 (1)地址,不知现在还能下否....中国象棋历史悠久,吸引了无数的人研究,现对中国象棋的对战和实现棋谱的制作做如下的设计和说 ...
- 基于Java+Swing实现中国象棋游戏
基于Java+Swing实现中国象棋游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味 ...
- Qt终极教程——用Qt编程实现中国象棋游戏(提供源代码和程序编译运行教程)
Qt终极教程--用Qt编程实现中国象棋游戏 目录 Qt终极教程--用Qt编程实现中国象棋游戏 简介 运行可执行程序体验象棋游戏 Qt 安装 源代码的编译.运行与调试 生成预编译的可执行程序 简介 本文 ...
- c语言编程一个象棋游戏,急求:C语言编写的中国象棋游戏一个
急求:C语言编写的中国象棋游戏一个 來源:互聯網 2009-09-08 12:30:35 評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 由于学习 ...
- C++900行代码实现中国象棋游戏规则以及相关功能
本文章通过C++中的900行代码实现中国象棋游戏以及相关功能,主要的内容如下: 1.设置未进入游戏前的主页面: 2.绘制棋盘(如果有刚好尺寸的图片也可直接加载),包括棋盘网格,炮与兵的特殊标记绘制: ...
- 中国象棋游戏Chess(3) - 实现走棋规则
棋盘的绘制和走棋参看博文:中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制,中国象棋游戏Chess(2) - 走棋 现在重新整理之前写的代码,并且对于每个棋子的走棋规则都进行了限制,不像之前那 ...
最新文章
- 最新!中国内地大学ESI排名出炉:313所高校上榜!
- 清华大学AMiner团队发布《超级计算机研究报告》(附下载)
- numpy之reshape()
- 怎么删除顽固的服务器文件夹,实用技巧:删除Windows XP下顽固文件方法
- 10投屏后没有声音_手机投屏到电视没有声音?
- jozj3419-最大利润【树形dp】
- Superset单点登录调整源码
- vue.js踩坑之ref引用细节点
- python基础教程运行程序_Python入门基础教程:WSGI
- 不同程序语言的注释和变量要求
- iOS中滤镜处理及相关内存泄漏问题的解决
- nc财务系统适配的java_用友NC系统使用过程中常见问题和解决方法!财会必看!...
- 数据挖掘导论课后习题答案 第二章(一)
- C++求100以内中的所有素数
- 计算机基础知识及键盘熟悉实验报告,实验报告-实验一计算机的认识与指法练习.doc...
- 52周存钱挑战2.0
- OpenSTF手机设备管理平台-------二次开发
- Gradle剔除依赖
- 影响微信公众号排名的因素
- java程序调用百度Geocoding API逆地址解析通过经纬度查询位置
热门文章
- 曼昆《经济学原理(微观经济学分册)》(第6版)课后习题答案
- 2013 VS 2018:五年前和今天的十大数字货币大比拼
- 生信技能树linux虚拟机,Linux 20题-生信技能树
- 算法学习笔记(使用追赶法解三对角方程组)
- 大学四年,电脑必备的三个宝藏工具软件
- 记录甘肃机顶盒MG101_U2破解之路的辛酸历程
- android添加本地视频播放器,找到令人满意的Android本地视频播放器是如此困难吗?...
- MapReduce----并行支持向量机(PSVM)第二部分之原始对偶内点法
- 两种内点法,障碍函数法(Barrier Method)和原始对偶法(Primal-Dual Method)
- 苹果手机以旧换新价格表_苹果支持安卓手机以旧换新;索尼公司将更名;百度网盘推出“防误删”文件恢复服务...