项目简介:
利用C++的知识和QT以及一些自行拓展的新知识,实现国际象棋的开发。
使自己更加深层的理解和掌握c++并在程序中展现出来,同时开发编程的思想和能力,以及扩展知识面,学习一些课上没有涉及的内容。同时通过阅读一定量他人的代码,使自己更加熟练的看懂别人的思想及做法从中学习,提高自己的编程能力。
主要功能:
(1)用户注册、登录
(2)人人对战
(3)人机对战
(4)悔棋、存档、复盘、认输
(5)残局练习
(6)更换棋盘图片
1.2文件与执行环境
1.2.1电子文档打包文件名及文件列表
Debug :Debug版本
Release :release版本
res :资源文件
chess.pro : 本项目的工程文件
board.cpp
board.h : 含有游戏主界面(人人模式)的类
board.ui 游戏主界面的ui
board2.cpp
board2.h :和board.h的区别在于背景图不一样
board2.ui
board3.cpp
board3.h:和board.h的区别在于背景图不一样
board3.ui
canju.cpp
canju.h :第一个残局的类
canju1.cpp
caniu1.h :第四个残局的类
canju2.cpp
caniu2.h :第二个残局的类
canju3.cpp
caniu3.h :第三个残局的类
mainwindow.h :欢迎界面的类
mainwindow.cpp
mainwindow..ui
mythread.h :子线程的类
mythread.cpp
Inform.h:关于界面的类
Inform.cpp
inform.ui
help.h :帮助界面的类:
help.cpp
help.ui
exitapp.h :退出界面
exitapp.cpp
exitapp.ui
main.cpp :主程序
编译环境:Qt5.9.9
数据文件Player.txt
Qt的运行按钮即可
主要任务:
1. 欢迎与登录界面的编写(实现按钮功能:登陆,忘记密码,注册,帮助)
2.注册界面的编写(实现按钮功能,密保问题,存入文件)
4.帮助(棋子走法)和关于界面的编写(实现帮助信息滚动,返回按钮)
5.游戏主界面编写(实现棋盘、棋子的展示、帮助和关于界面)
6.对战时的菜单编写(不包括功能):取消、认输、暂停、休赛、悔棋、配置(盲棋、声音设置)
7.人人对战(实现显示轮到谁下、悔棋、复盘、认输)
8.残局功能的实现(四种残局)
9.实现重新开局
10.人机对战,并实现与人人相似的悔棋、认输、复盘功能
任务分工:
项目的任务分工如表一所示。
二.项目内容
2.1系统的整体架构
一个游戏的设计与实现,不仅要包括游戏本身的界面,还需要有用户的信息,可以存储读取用户的信息,完善一个游戏的基本功能。基于游戏这一任务,我们系统主要由欢迎界面进入注册与登录界面,登陆后进入游戏主界面这一步骤串联而成。登入后进入游戏界面,可以选择人人对战、人机对战、残局练习这三个主要模式,同时可以在游戏界面选择复盘、悔棋、存档、重开游戏、帮助、关于等功能。
- 欢迎界面需要实现登录按钮,注册账号按钮,退出按钮,然后分别进入后能够实现各自按钮所实现的功能,例如注册账号按钮点击后,要能够实现注册账号功能。
- 登陆界面除了实现登录功能,还有忘记密码功能按钮。点击按钮验证完用户的密保问题后可以重新注册。
3. 然后是游戏主界面。可以选择人人对战、人机对战、残局练习这三个主要模式,可以在人人对战、人机对战、残局练习这三种界面选择复盘、悔棋、存档、重开游戏、帮助、关于功能。
2.2 UML类图
classBoard是游戏主界面类,如图二所示。
总结与体会
因为想做一个完整的游戏出来,所以选择了国际象棋。根据需要选择了qt这个图形界面设计框架。但是从来没有学过qt,所以需要上网搜索qt的知识,由于网上资料多且杂,所以是一次对自学能力的挑战。
在学习了qt的基本知识后,就要开始着手写程序了。遇到各种各样的实际的问题时,又会上网搜有没有对应的解决办法,发现前人经历了和自己一样的问题并把解决问题的经验写成博客供别人学习的时候,就会产生一种感激之情。于是我也开了一个CSDN的博客,并且准备录制讲解视频发到B站上,感谢前人的帮助,并把帮助传承下去。
在编写的过程中也遇到过几次问题。
一次是复盘怎么也实现不了,曾经想要放弃这个功能。经过好几天的debug和思考,终于找到了结症所在——update()更新太过频繁导致程序卡死。于是上网搜了这个问题,并找到了解决这个问题的函数——成功复盘的那一刻,感觉这几天的挣扎都值了。
另一次的问题让我初步有“优化”的概念:背景音乐播放的同时进行别的操作,音乐就会断一下,听着很卡顿。想了想,感觉是别的操作把音乐播放的操作挤掉了,就像一条狭窄的道路,一个人要超车的时候,另一个人只能暂时停下。上网搜了搜类似的概念,居然真的让我发现了——多线程。运用这个知识,也是成功解决了这个问题。
不足之处一是在于对于qt的一些功能,在网上找到代码之后并没有透彻的理解,而是只学习了在自己的这种情况时候的作用和用法,而且也不能很好地记住代码。二是在于对C++知识,特别是继承的理解不够。三是对程序的优化还不够,具体体现在函数封装性不够,类太多。
在平常学习课程中要更加的关注基本功,基础不牢地动山摇,只有基础牢固了,这样在编写代码的时候才不会感觉手足无措或是用的不准确,避免一些没有必要的bug的出现。 另外,我感觉对于这门课设,很多人都有很好的方法和很好的作品,我建议老师可以在课程结束后组织一次优秀作品展示,在提意见和被提意见中,同学们不仅可以看到自己的不足,也可以看到自己的优点。
。