QT5/C++项目:基于QT的跨平台网络对战象棋(三)(推荐★★★★)
QT5/C++项目:基于QT的跨平台网络对战象棋(三)(推荐★★★★)
文章目录
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
本篇副标题:
基于QT的跨平台网络对战象棋项目之Qt的项目在多平台的移植和开源在github、性能测试
本篇博客讲了什么or解决了什么问题?
实现了QT5的项目在windows、Linux、MacOS、Android平台的发布
项目在发布之后,就在github上面进行开源的部署;项目在的黑盒和白盒测试和性能等测试
项目简介:
为毕业需要一份毕业设计;提高自己对于C/C++语言的熟悉和运用**;**加强跨平台QT的框架熟悉,和熟悉掌握完整的项目开发流程;写一些个人而言比较大的项目,用于面试时候的底气和经验;规范编码格式,和逻辑思维锻炼。
其他:
无
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
项目演示效果:
视频演示:
Qt5_ChinessChess 基于QT的跨平台网络象棋对战演示
图片演示:
开发平台环境:
windows 10 专业版、Qt Createor 4.7.1、Enigma+Virtual+Box+7.80、VMware Workstation Pro、GitHub Desktop
项目下载地址:
源码:https://github.com/touwoyimuli/2019_01_Qt5_ChinessChess
成品:https://github.com/touwoyimuli/2019_01_Qt5_ChinessChess/releases
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
项目在各大平台发布:
Windows平台的发布
本次发布测试的平台为Windows 7 x64
和 Windows 10 x64
。
步骤:
(1)打开ChineseChess
项目。点击Qt Creator
左下角的运行程序,选择构建的套件为:Desktop Qt 5.9.7 MinGW 32bit
,再构建里面选择Release版本,点击绿色三角形图案。等待程序跑起来之后,关闭掉程序。
(2)打开项目文件管理器,找到生成的便以文件。然后打开路径D:\programming\qt\build-ChineseChess-Desktop_Qt_5_9_7_MinGW_32bit-Release\release(这里以我的路径为例)
。将里面的ChineseChess.exe
复制一份,将拷贝的程序另外保存在一个名为英文(这里我为Chess
)的空的文件夹里里面。
(3)双击运行Qt 5.9.7 for Desktop (MinGW 5.3.0 32 bit)
,用cd命令进入到上一步创建的空文件夹路径(eg: D:\Chess
)。然后运行命令
windeployqt+ 运行程序名
(eg:windeployqt ChineseChess.exe)
,回车,将所需的库文件全都拷贝到该.exe程序的当前文件
(4)双击运行Enigma+Virtual+Box+7.80
程序,在这里面,在“主程序文件名称里面”选中刚刚的拷贝版本D:\Chess\ChineseChess.exe
。然后会自动生成输出虚拟文件名称的路径。在文件的Virtual Box Files
里面,将上一步骤的上面。然后点击右下角的“文件选项-压缩文件”。最后一步点击右下角的打包。件夹里面生成许多库等,全选,除了ChineseChess.exe
以外,全部拖进这里
(5)等待一分钟,生成的绿色单机版,免安装的有游戏.exe文件,放到任意一个没有任何环境的windows
系统的都可以跑起来。不会提示那种缺少xxx.dll
的错误提示。完美打包发布这一份作品。
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**
Linux平台的发布
开发平台环境:
编程环境: Ubuntu 16.04.5 x64 (LTS)
编程软件: Qt Creator 4.7.1 (Enterprise)
, Qt 5.9.7
步骤:Linux发布免安装的运行程序
(1)同样,将完整的ChineseChess
项目在Linux
用Qt Creator
编译运行Release
版本。
(2)但是编译不通过,会出现两个错误提示。
error:-1: error: cannot find –lGL和
error:-1: error: collect2: error: ld returned 1 exit status。
原因:是这是由于 Qt5.0
以上的版本默认将OpenGL
加入了工程,但是在Linux
的机器上没有安装OpenGL
,所以只需要在机器系统安装OpenGL
即可,此时打开终端,运行
sudo apt-get install libgl1-mesa-dev
即可,再次编译运行。即可成功。
(3)同样将生成的Release
文件夹下ChineseChess
文件放到一个英文文件夹(eg: qwer)
里面.
(4)在上一步的文件夹中新建文件pack.sh。内容如下:
\#!/bin/sh
exe="ChineseChess" #你需要发布的程序名称
des="/home/yuanyi/Desktop/qwer" #步骤1中的目录即本文件所在目录
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
(5)cp $deplist $des
在此目录下再新建一个ChineseChess.sh
文件(文件名必须与可执行文件名字一样), 文件内容如下(不需要修改):
\#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "aaa@qq.com"
(6)打开终端,执行命令如下
chmod +x ChineseChess.sh
或者 ./ ChineseChess.sh
会自动ChineseChess.sh
(7)将此目录打包发布即可,点击即可以执行。
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MacOS平台的发布
1)同样子,在MacOS
的Qt Creator
里面编译运行Release
版本的ChineseChess
项目。
(2)打开build-ChineseChess-Desktop_Qt_5_9_7_clang_64bit-Release
文件夹。进到该目录,会看到有一个ChineseChess.app
。这个并不是文件,而是一个目录,只是OS X
系统看到某个目录的扩展名是app
,就会将其认为是Bundle
目录,所以双击会直接执行(当必须要是真正的Bundle
)。
(3)使用QT
提供了一个非常方便的打包工具macdeployqt
,该文件位于如下目录/Users/yuanyi/Qt5.9.7/5.9.7/clang_64/bin
,可以将这个目录加入到PATH
环境变量中。这里有点复杂,(需要注意的是,Unix
【MacOS
就是其中一种】及类Unix
系统里,每行结尾只有换行“\n”
,Windows
系统里面,每行结尾是换行+回车“\n\r”
)。当在终端里面,将上面目录路径添加到PATH
之后。输入一下命令在终端。
:set ff=unix #转换为unix格式
:wq #保存、退出
方可保存和退出成功。
(4)现在只需要执行如下的命令,系统就会自动该着Bundle
,把相关的文件和目录都放到Bundle
中的相关位置。命令语句如下:
macdeployqt ChineseChess.app
(5)处理完后,Bundle
的目录结构发生改变,很明显,macdeployqt
命令将相关文件和目录都放到了Bundle
中。现在将这个处理完的ChineseChess.app
复制到任何OS X
系统上都可以运行了,无论安装没安装QT
,都可以运行
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Android平台的发布
步骤:
(1)网上分别下载Java JDK的最新版本,在Oracle的官网里面,安装之后,然后自行配置JAVA的环境变量PATH等。比如我下载的是jdk-8u201-windows-x64.exe。
(2)在下载所需要的Android配置环境。需要下载Android SDK和Android NDK这两样。当然都是推荐越新越稳定的越好。下载之后,全部解压,放置于一个英文目录下。我都放在了D:\software_install\android_qt目录下,里面包含有adt-bundle-windows-x86_64-20140702和android-ndk-r15c-windows-x86_64和android-sdk_r24.4.1-windows和apache-ant-1.10.5-bin。
(3)打开左上角的工具栏的“工具-选项-设备”一栏。选中Android一栏,进行构建环境的环境配置。在Java Setting里面,将JDK location设置设置为C:\Program Files\Java\jdk1.8.0_201;在Android Setting里面将Android SDK的路径设置为D:\software_install\android_qt\adt-bundle-windows-x86_64-20140702\sdk;Android NDK的路径设置为D:\software_install \android_qt\android-ndk-r15c-windows-x86_64\android-ndk-r15c。当如下图的时候,全部只检测路径通过,会出现一系列的绿色√。然后点击右下角的“Apply”和“OK”。
(4)上一步骤配置Android的SDK路径之后,如果弹出x的无法通过的话,且提示有“android build tools intall 错误!解决方案27.0.3 ”,报错原因是
是android SDK的版本不是最新的原因,更新SDK中的build-tools 添加27.0.3包即可。解决方案:更新SDK中的build-tools 添加27.0.3包即可,(即将27.0.3这个文件夹复制到D:\software_install\android_qt\adt-bundle-windows-x86_64-20140702\sdk\build-tools文件夹下即可)。若是上一步骤成功,可直接跳过这一步骤,直接看下一个步骤。
(5)选择如下的构建Android的组件构建,编译运行Realease版本。
(6)打开自己的安卓手机,用数据线连接电脑,然后一定要打开“开发者模式”,且“允许数据通过USB数据线传输”,最好是还把“允许自动安装.apk程序”一栏开启。点击电脑的Qt Creator的运行,在弹出框里面点击插入电脑的所识别的Android手机。
(7)然后导入选择连接的Android手机,即可以看到项目在手机加载完成。然后点击运行即可。
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
跨平台游戏演示
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
项目开源在github
项目源码在GitHub上面开源
步骤:
(1)登录github官网网站:https://github.com/
(2)注册一个其网站的账号。用已发布自己的项目,确保在全球范围之类均可以直接看到你说发布的项目的成品和源码。用以帮助其他人和自己人学习,和提供便捷的下载服务。
(3)注册成功之后,创建一个新的仓库,通常是一个项目作为一个单独的仓库repositories。简单的填写一些项目名称和备注说明,然后点击创建的时候,可以根据自己的需要,看是设置该仓库是公有public还私有private类型的。其中一个可以被全世界范围人点击查看,后者只能够被自己个人查看修改。
(4)上传源码。点击<>Code界面,然后选定上传Upload Files 按钮,将你的源码拖曳到待选框里面,点击发布即可。需要注意的是,其中一般会默认有一个README.md文本,你可以在里面书写一些简要介绍,或者一些重要信息,这样子源码就会发布成功了的,全球任何人都可以下载源码检验和提交修改使得其更加完美。
项目成品在GitHub上Release发布
步骤:
(1)如同上一步骤,发布源码类似。在进入该仓库中,单击<>Code界面下的releases按钮。进入之后,再点击Draft a new release 按钮,然后将此之前都编译好的成品。命名好之后,拖曳到待选框里面,给写好说明和简易注释之后,自己命名好版本号,选择发布即可。
(2)如若有修改,可以参考上一步骤,重新发布一版版本即可。需要说明的是,选择过程中,Release 为历史版本;而Latest release才是最好的一个稳定版本,也是推荐下载一个版本;而Latest release则是开发者开发版本,通常就是最新但是却不稳定的版本,推荐喜欢尝鲜的玩家下载。
(3)说明:若有其他需求,可以自己详细研究github的使用。
(4)提供链接下载地址:https://github.com/touwoyimuli/2019_01_Qt5_ChinessChess/releases
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
项目测试及演示
测试目的
当基于QT的跨平台网络对战象棋游戏设计完成以后。就开始了测试工作。包括采用的QtDesigner设计,界面绘画显示,棋盘棋子的绘画与更新重绘,网络模块中的Socket套接字是否连接成功。存储在容器里面的棋子步骤是否正确,场面分的计算是否规范合理,网络延时产生的误差毫秒级数。以及自定义的协议传输是否正确连接与解读[12]。玩家与自己对战模式中,一人控制双方轮流切换是否正确;玩家与电脑AI对战中,电脑AI“智慧”程度的设计是否合理;多人网络对战模式中,服务器器端是检测和等待连接否正确;多人网络对战模式中的客户端中,主动提出连接服务器是否会出现异常;对于并发处理的问题是怎么解决的等。为了使的最后开发的中国象棋游戏项目的稳定性、容错性、健壮性、可维护性等。以及是否简易操作、界面是否美观做一个把关测试。也同时对每一个模块都进行功能测试。所以必须使得采用简单地黑盒测试和深入的白盒测试来测试。
测试过程
黑盒测试
站在一个一点都不懂得编程的玩家的角度来玩这个中国象棋游戏来做这个测试。简单的体验一下中国象棋游戏的流程程度,界面操作简易程度,入手困难程度。
测试流程:GitHub官网下载相应的中国象棋游戏绿色版–>点击运行游戏–>选择游戏模式–>开始游戏–>启动对战计时器–>游畅享中–>游戏结束–>终止对战计时器–>游戏结束–>点击关于作者作品–>返回主界面–>在点击进入游戏。
体验感受:官网可以看到游戏的下载项目程序比较小,且覆盖了各个主流版本的系统平台就有下载;其次每一个运行程序离线安装包都很小,在Windows上面也仅仅只有20M左右,当在Linux上面的,仅仅只有676KB,程序体积小的令人不敢相信,和现在市场上面动辄几个G的游戏相比,让人感动。再就是进入游戏界面之后,没有任何花里胡哨的,不适的图片场景和内置诱导付费等场景等,给人极大的舒适感觉和愉悦感。最后就是游戏操作上手度简单易懂,且没有过于繁冗的新手指导,只有点击正确就会有反应,错误点击没有反应。最后就是流程程度,网络延时和操作延时属于毫秒级别的,根本感觉不出来。
白盒测试
(测试一)语句覆盖:针对逻辑中显示存在的条件语句(即可以执行语句)进行相关的判断。使得下面的流程图每一种都执行到至少一次。
(测试二)判定覆盖:对于每一个判定的分支都执行到了至少一次
(测试三)条件覆盖:每一判定中的每个条件,分别按“真”、“假”至少各执行一次
(测试四)判定/条件覆盖:同时满足判定复盖和条件复盖的要求
(测试五)条件/组合覆盖:求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次
上面的多种测试方法,均有测试到,且通常是一边编程,每到一个小的功能实现之后,就会对所有分支进行一下子测试。然后当确认无误之后,再开始进行下一个小模块或者
模块测试
所属板块 | 测试项 | 测试点 | 测试内容 | 测试次数 | 测试结果 |
---|---|---|---|---|---|
开发工具 | Qt设计师 | Qt Designer | 布局是否合理,界面美观程度,是否闪退,缩放有问题 | 5 | 良好 |
后台数据 | 资源的加载 | 容器QVector<ChessStep *> &steps | Qvector里面存放所有可以下棋的走法步骤 | 3 | 良好 |
图片资源 | 文件夹图片是否均被加载 | 4 | 良好 | ||
UI界面 | 选择板块 | 选择游戏模式 | 点击相应游戏模式,是否进入正确的界面 | 9 | 良好 |
游戏模式 | 单机模式 | 玩家与自己对战 | 一个设备鼠标,轮流红黑双方执棋子 | 6 | 良好 |
玩家与电脑AI对战 | 电脑AI玩家执棋下棋的“聪慧”程度 | 4 | 良好 | ||
网络模式 | 多人网络对战模式(服务器端) | 检测局域网所有预定短端口的请求 | 3 | 良好 | |
多人网络对战模式(客户端) | 请求连接指定IP指定端口的服务器 | 4 | 良好 | ||
附加功能 | 关于作者板块 | 界面连接跳转 | 关于作者、作品界面、查看退出是否异常 | 6 | 良好 |
计时板块板块 | 对战计时器 | 计时器的开始、停止、继续、终止重置功能 | 6 | 良好 | |
胜负判断 | 对方将帅被击杀 | 对方将帅被击杀状态 | 4 | 良好 | |
无可选棋子或可下目的地 | 无可选棋子或可下目的地状态 | 4 | 良好 | ||
和棋 | 均胜不了,也负不了 | ||||
算法 | 电脑AI | 可选择棋子可能 | 无棋子可选状态 | 7 | 良好 |
选棋子后到达目的位置 | 没有可落子站台 | 7 | 良好 | ||
所有可行走法储到容器 | 查看容器存储可走步骤 | 7 | 良好 | ||
场面局面分分析 | 局面分优化合理,是否智能 | 7 | 良好 | ||
选择最有利走法 | 是否选择最佳有利走法 | 7 | 良好 |
性能测试
面对一个开发出来的中国象棋游戏程序,是还要有必须的游戏性能测试。简单地就是用户玩游戏需要等待多久?多对应的响应时间;游戏是否会崩溃或者失败?对应的稳定性;还有架构设计是否合理,数据结构设计是否合理?资源整合利用是否有效,代码是否还有进一步的重构能力、以及测试资源的利用率、可扩展性。系统容量等。以上都是需要测试的,其性能的测试水平高低直接影响到的游戏的流畅程度。
性能 | 性能参数 | 结论 |
---|---|---|
客户机自动连接时间 | 0.09s | 良好 |
服务器响应连接时间 | 0.14s | 良好 |
棋局刷新延时时间 | 0.03s | 良好 |
稳定性 | 98% | 良好 |
内存泄露 | 0% | 良好 |
软件启动时间 | 0.5s | 良好 |
平均响应时间 | 0.13s | 良好 |
游戏程序体积 | 676KB—20.6M | 良好 |
电脑AI智能程度 | 70% | 良好 |
测试结果
本小章节,是严格经过白盒测试、黑盒测试、以及性能参数测试等。尤其是对于每一个小板功能板块均进行了测试。其中无论是游戏单机模式,亦或者游戏连接网络对战之后的的模式,均测试得出网络时延属于ms级别的,且运行的时候,所占有的CPU和硬件等资源,网络带宽等,都是非常小的。且游戏运行非常流畅,运行游戏的离线安装包也是非常只之小的,让人感觉舒适开心。且上面各个测试均最后的结果显示为通过。且表现状态为良好。说明此次的基于QT的跨平台网络对战象棋游戏项目从一开始的设计、到中间的编码测试、到最后的设计完成是比较完美的实现的了,且完全达到预期符合要求.
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
上一篇博文:
[QT5/C++项目:基于QT的跨平台网络对战象棋(二)(https://blog.csdn.net/qq_33154343/article/details/89285968#_606)
上一篇: 乱码!解决方案