基于c++的中国象棋游戏设计与实现
目录
- 1.文档
- 2.游戏操作逻辑
- 3.UI框架
- 4.网络通信
1.文档
文档分为两部分,一部分在代码中,然后通过doxygen
生成HTML。解压本目录下的html.zip后打开index.html即可查看;第二部分在此说明文档内,在这里会介绍一些架构方面的信息。
2.游戏操作逻辑
相关的命名空间有:
Chess:这是包含中国象棋的操作逻辑的命名空间
主要操作是possibleMove(int x, int y)
,通过整个棋盘每个位置上的信息、中国象棋的规则来获得位置(x, y)这个棋子可以移动到的位置。
其余操作有“判断是否将、帅对视`、”判断当前局面是否为必胜、必败态”、“是否将军”等,这些操作均使用最简单的枚举算法。
3.UI框架
相关的类有:
- MainWindow:主窗体
- ChessWidget:主窗体里的主要部件,用于显示棋盘、操作棋盘,并且会发出相应音效
- PanelWidget:一个dock部件,置于主部件上方,用于显示“轮到谁进行下棋”、“当前回合所剩时间”、“认输按钮”
- ClientDialog:连接到对战的对话框,可以设置IP(IPv4)和端口
- ServerDialog:建立服务器,可以设置监听的端口、当前用户执红or执黑、每回合时间
- LoadingDialog:一个能播放动画的等待连接的对话框
棋盘的绘制是用paintEvent和QPainter进行绘制的。
4.网络通信
使用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: 我赢了!接下来不传输任何其他东西
相关推荐
-
基于C++和MFC开发象棋程序
这是我要和大家分享的基于C++和MFC开发的一个象棋程序,目的是练习编程实践和大家分享同时希望大家能给出指教. 进入主题 一.棋盘分析 这是我绘制的棋盘,棋盘的组成由9条竖线和10条横线构成.这儿我们设置每条线间的间隔是50. 二.绘制过程 1.在vs中新建MFC程序,去除环境自动生成的按钮和文字. 2.打开***Dlg.cpp文件,在void CChessDlg::OnPaint()中定义一个棋盘间隔值和绘图设备CDC *cd = CWnd::GetDC(); int nWid = 50; C
-
C++实现鼠标控制的黑框象棋
本文实例为大家分享了C++实现鼠标控制的黑框象棋的具体代码,供大家参考,具体内容如下 该象棋小游戏的特色 有颜色标注出 红方和绿方 可以用鼠标控制 颜色原理 直接调用用Windows自带的颜色API 用到了 颜色头文件.h 代码. //consolecolor.hpp这是着色的实现头文件 #pragma once #include<Windows.h>//调用win32API函数 #include<iostream>//调用flush成员函数,首先刷新缓冲区 namespace c
-
C++ 中国象棋的实现流程详解
中国象棋的中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规则简明易懂.中国象棋在中国的群众中基础远远超过围棋,是普及最广的棋类项目,中国象棋已流传到十几个国家和地区. 中国象棋使用方形格状棋盘,圆形棋子共有32个,红黑二色各有16个棋子,摆放和活动在交叉点上.双方交替行棋,先把对方的将(帅)"将死"的一方获胜. 我们今天就来看看我们自己能不能写出这样一个游戏呢? 今天就不话不多说了,先说一下,今天我们做的是一个简易版的单机中国象棋,希望大家理解,联网对弈的话需要用到的知
-
基于c++的中国象棋游戏设计与实现
目录 1.文档 2.游戏操作逻辑 3.UI框架 4.网络通信 1.文档 文档分为两部分,一部分在代码中,然后通过doxygen生成HTML.解压本目录下的html.zip后打开index.html即可查看:第二部分在此说明文档内,在这里会介绍一些架构方面的信息. 2.游戏操作逻辑 相关的命名空间有: Chess:这是包含中国象棋的操作逻辑的命名空间 主要操作是possibleMove(int x, int y),通过整个棋盘每个位置上的信息.中国象棋的规则来获得位置(x, y)这个棋子可以移动到
-
Python实现人机中国象棋游戏
目录 导语 1.游戏规则&基本玩法 1.1 基本玩法 1.2 行棋规则 2.素材文件 3.主要代码 3.1 Chinachess.py 为主文件 3.2 Constants.py 数据常量 3.3 Pieces.py 棋子类,走法 3.4 Computer.py 电脑走法计算 3.5 Button.py按钮定义 4.游戏效果 总结 导语 哈喽!哈喽!我是木木子!今日游戏更新——中国象棋上线啦! 中国象棋是一种古老的棋类游戏,大约有两千年的历史. 是中华文明非物质文化经典产物,艺术价值泛属于整个人
-
基于Matlab实现中国象棋的示例代码
目录 设置变量 绘图 绘制棋盘 绘制棋子 棋子移动规则 判断是否可以移动 移动棋子 吃子 设置变量 nRowNum = 8; % 画布行数 nColNum = 9; % 画布列数 offset_x = 0;% 红车坐标起点 offset_y = 0;% 红车坐标起点 chess_name = {{'帥','仕','相','马','車','炮','兵'},{'將','仕','象','马','車','炮','卒'}}; chess_type = [5 4 3 2 1 2 3 4 5 6 6 7 7
-
Java+Swing实现中国象棋游戏
目录 一.系统介绍 1.开发环境 2.技术选型 3.系统功能 二.系统展示 三.部分代码 一.系统介绍 1.开发环境 开发工具:Eclipse2021 JDK版本:jdk1.8 Mysql版本:8.0.13 2.技术选型 Java+Swing 3.系统功能 实现中国象棋游戏,开始游戏,悔棋,退出功能. 二.系统展示 1.首页 2.红旗走 3.黑棋走 三.部分代码 ChineseCheseRule.java package com.sjsq; import java.awt.event.Mouse
-
Android实现中国象棋游戏(局域网版)
本文实例为大家分享了Android实现中国象棋游戏的具体代码,供大家参考,具体内容如下 实现环境: android studio 3.2.1, 手机分辨率为: 1920 * 1080 局域网 UDP 连接分主活动类,棋类,主机类 代码如下: 清单文件要添加的权限: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name=
-
Java实现中国象棋游戏
目录 一.界面 二.按钮 三.加棋子 四.实现棋子的移动 五.判断胜负 六.按钮“开始游戏”和“重新开始”的实现 七.加规则 八.轮次 九.悔棋 十.背景 及 提示 本文实例为大家分享了Java实现中国象棋游戏的具体代码,供大家参考,具体内容如下 实现一个小游戏需要知道从哪里下手,一步步实现和完善,对于一个中国象棋的小游戏,我们可以按这样的顺序展开: 一.界面 下棋的棋盘首先要准备好,这就是一个合适大小合适比例合适位置的界面,然后在窗体上画上(没错drawLine的那种画上)n条直线和斜线,具体
-
js实现中国象棋游戏
本文实例为大家分享了js实现中国象棋游戏的具体代码,供大家参考,具体内容如下 使用table元素作表格,div元素作象棋. 效果如下: 代码如下: <html> <head> <title>中国象棋</title> <meta charset="UTF-8"> <style> table{ margin:10px; border-collapse:collapse; } table.board{
-
Java棋类游戏实践之中国象棋
本文实例讲述了java实现的中国象棋游戏代码,分享给大家供大家参考,具体代码如下 一.实践目的: 1.鼠标点击.拖动等事件的应用与区别 2.棋谱文件的保存与读取 3.完善象棋的规则. 二.实践内容: 中国象棋历史悠久,吸引了无数的人研究,现对中国象棋的对战和实现棋谱的制作做如下的设计和说明,供大家参考学习. 1.机机对弈,红方先手.在符合规则的情况下拖动棋子到目的地,松鼠标落子. 人人对弈图 2.制作棋谱,选择制作棋谱菜单后,对弈开始,并记录了下棋过程. 选择"制作棋谱"菜单 棋谱制作
-
基于HTML+JavaScript实现中国象棋
目录 效果展示 项目基本结构 HTML 代码 CSS 代码 JS 代码 人工智能初始化 迭代加深搜索算法 取得棋盘上所有棋子 取得棋谱所有己方棋子的算法 A:当前棋手value/B:对手value/depth:层级 奖着法记录到历史表 评估棋局 取得棋盘双方棋子价值差 完整源码下载 效果展示 在线演示地址 项目基本结构 目录结构如下: HTML 代码 HTML 主要代码: <div class="box" id="box"> <div class=
-
Java实现中国象棋的示例代码
目录 前言 主要设计 功能截图 代码实现 总结 前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 中国象棋使用方形格状棋盘,圆形棋子共有32个,红黑二色各有16个棋子,摆放和活动在交叉点上.双方交替行棋,先把对方的将(帅)“将死”的一方获胜. 中国象棋是一款具有浓郁中国特色的益智游戏,新增的联网对战,趣味多多,聚会可以约小朋友一起来挑战.精彩的对弈让你感受中国象棋的博大精深. <中国象棋>游戏是用java语
随机推荐
- EntityFramework 6.x学习之多个上下文迁移实现分布式事务详解
- XML轻松学习手册(5)XML实例解析
- dell笔记本维修-芯片级-技巧
- Zabbix监控Linux主机设置方法
- 5个可能被你忽略的Linux安全设置方法
- DataSet.Tables[].Rows[][]的用法详细解析
- 在C#中global关键字的作用及其用法
- 深入了解php4(1)--回到未来
- 用jquery实现自定义风格的滑动条实现代码
- web标准常见问题集合5
- jquery如何把参数列严格转换成数组实现思路
- js实现ifram取父窗口URL地址的方法
- 亲密接触PHP之PHP语法学习笔记1
- php简单实现发送带附件的邮件
- springboot整合rabbitmq的示例代码
- Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
- C#基于简单工厂模式实现的计算器功能示例
- python获取代理IP的实例分享
- Android GridView添加头部问题的解决
- navicat连接mysql出现2059错误的解决方法