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++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M