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

相关文章

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve