c++国际象棋有人机qt5.9.9启动chesss

2023-12-13 12:52

本文主要是介绍c++国际象棋有人机qt5.9.9启动chesss,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目简介:

利用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系统整体架

一个游戏的设计与实现,不仅要包括游戏本身的界面,还需要有用户的信息,可以存储读取用户的信息,完善一个游戏的基本功能。基于游戏这一任务,我们系统主要由欢迎界面进入注册与登录界面,登陆后进入游戏主界面这一步骤串联而成。登入后进入游戏界面,可以选择人人对战、人机对战、残局练习这三个主要模式,同时可以在游戏界面选择复盘、悔棋、存档、重开游戏、帮助、关于等功能。

  1. 欢迎界面需要实现登录按钮,注册账号按钮,退出按钮,然后分别进入后能够实现各自按钮所实现的功能,例如注册账号按钮点击后,要能够实现注册账号功能。
  2. 登陆界面除了实现登录功能,还有忘记密码功能按钮。点击按钮验证完用户的密保问题后可以重新注册。

3. 然后是游戏主界面。可以选择人人对战、人机对战、残局练习这三个主要模式,可以在人人对战、人机对战、残局练习这三种界面选择复盘、悔棋、存档、重开游戏、帮助、关于功能。

2.2 UML类图

classBoard是游戏主界面类,如图二所示。

总结与体会

因为想做一个完整的游戏出来,所以选择了国际象棋。根据需要选择了qt这个图形界面设计框架。但是从来没有学过qt,所以需要上网搜索qt的知识,由于网上资料多且杂,所以是一次对自学能力的挑战。

在学习了qt的基本知识后,就要开始着手写程序了。遇到各种各样的实际的问题时,又会上网搜有没有对应的解决办法,发现前人经历了和自己一样的问题并把解决问题的经验写成博客供别人学习的时候,就会产生一种感激之情。于是我也开了一个CSDN的博客,并且准备录制讲解视频发到B站上,感谢前人的帮助,并把帮助传承下去。

在编写的过程中也遇到过几次问题。

一次是复盘怎么也实现不了,曾经想要放弃这个功能。经过好几天的debug和思考,终于找到了结症所在——update()更新太过频繁导致程序卡死。于是上网搜了这个问题,并找到了解决这个问题的函数——成功复盘的那一刻,感觉这几天的挣扎都值了。

另一次的问题让我初步有“优化”的概念:背景音乐播放的同时进行别的操作,音乐就会断一下,听着很卡顿。想了想,感觉是别的操作把音乐播放的操作挤掉了,就像一条狭窄的道路,一个人要超车的时候,另一个人只能暂时停下。上网搜了搜类似的概念,居然真的让我发现了——多线程。运用这个知识,也是成功解决了这个问题。

不足之处一是在于对于qt的一些功能,在网上找到代码之后并没有透彻的理解,而是只学习了在自己的这种情况时候的作用和用法,而且也不能很好地记住代码。二是在于对C++知识,特别是继承的理解不够。三是对程序的优化还不够,具体体现在函数封装性不够,类太多。

在平常学习课程中要更加的关注基本功,基础不牢地动山摇,只有基础牢固了,这样在编写代码的时候才不会感觉手足无措或是用的不准确,避免一些没有必要的bug的出现。 另外,我感觉对于这门课设,很多人都有很好的方法和很好的作品,我建议老师可以在课程结束后组织一次优秀作品展示,在提意见和被提意见中,同学们不仅可以看到自己的不足,也可以看到自己的优点。

这篇关于c++国际象棋有人机qt5.9.9启动chesss的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/488552

相关文章

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决