基于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:一个能播放动画的等待连接的对话框

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

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: 我赢了!接下来不传输任何其他东西
(0)

相关推荐

  • C++ 中国象棋的实现流程详解

    中国象棋的中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规则简明易懂.中国象棋在中国的群众中基础远远超过围棋,是普及最广的棋类项目,中国象棋已流传到十几个国家和地区. 中国象棋使用方形格状棋盘,圆形棋子共有32个,红黑二色各有16个棋子,摆放和活动在交叉点上.双方交替行棋,先把对方的将(帅)"将死"的一方获胜. 我们今天就来看看我们自己能不能写出这样一个游戏呢? 今天就不话不多说了,先说一下,今天我们做的是一个简易版的单机中国象棋,希望大家理解,联网对弈的话需要用到的知

  • C++实现鼠标控制的黑框象棋

    本文实例为大家分享了C++实现鼠标控制的黑框象棋的具体代码,供大家参考,具体内容如下 该象棋小游戏的特色 有颜色标注出 红方和绿方 可以用鼠标控制 颜色原理 直接调用用Windows自带的颜色API 用到了 颜色头文件.h 代码. //consolecolor.hpp这是着色的实现头文件 #pragma once #include<Windows.h>//调用win32API函数 #include<iostream>//调用flush成员函数,首先刷新缓冲区 namespace c

  • 基于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++的中国象棋游戏设计与实现

    目录 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语

随机推荐