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

news2024/10/6 12:35:32

项目简介:

利用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的出现。 另外,我感觉对于这门课设,很多人都有很好的方法和很好的作品,我建议老师可以在课程结束后组织一次优秀作品展示,在提意见和被提意见中,同学们不仅可以看到自己的不足,也可以看到自己的优点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1306117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应用程序映射的 5 个安全优势

现代企业依靠无数的软件应用程序来执行日常运营。这些应用程序相互连接并协同工作以提供所需的服务。了解这些应用程序如何相互交互以及底层基础设施对于任何组织都至关重要。这就是应用程序映射概念的用武之地。 顾名思义,应用程序映射是创建应用程序架构&#xf…

Java键值对Pair的使用方式和操作流程

Java键值对Pair的使用方式和操作流程 什么是键值对 键值对是一种常见的数据结构,它由一个唯一的键(key)和与之关联的值(value)组成。键和值之间存在一种映射关系,通过键可以查找或访问对应的值。 在键值对…

设计模式——原型模式(创建型)

引言 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。 问题 如果你有一个对象, 并希望生成与其完全相同的一个复制品, 你该如何实现呢? 首先, 你必须新建一个属于…

【vue实战项目】通用管理系统:信息列表,信息的编辑和删除

本文为博主的vue实战小项目系列中的第七篇,很适合后端或者才入门的小伙伴看,一个前端项目从0到1的保姆级教学。前面的内容: 【vue实战项目】通用管理系统:登录页-CSDN博客 【vue实战项目】通用管理系统:封装token操作…

【日积月累】Spring中的AOP与IOC相关问题详解

Spring中的AOP与IOC 1.前言2.Spring AOP(面向切面编程)2.1 AOP的实现过程2.2 AOP代理模式的类型2.2.1JDK的动态代理2.2.2CGLIB的动态代理 2.3AOP应用常见场景2.3.1日志记录 2.4对AOP的理解 3.Spring IOC(Inversion of Control,控…

【JVM从入门到实战】(五)类加载器

一、什么是类加载器 类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。 类加载器只参与加载过程中的字节码获取并加载到内存这一部分。 二、jdk8及之前的版本 类加载器分为三类: 启动类加载器-加载Ja…

Linux驱动入门 —— LED点灯驱动程序

目录 IMX6ULL 的 GPIO 操作方法 GPIO 操作相关名词 IMX6ULL 的 GPIO 模块结构 GPIO 模块内部 读 GPIO​编辑 写 GPIO​编辑 LED 点灯驱动程序 字符设备驱动程序框架 编写驱动程序的步骤: 先编写驱动程序代码: 再编写测试程序代码:…

【华为数据之道学习笔记】4-2信息架构原则:建立企业层面的共同行为准则

信息架构承载了企业如何管理数据资产的方法,需要从整个企业 层面制订统一的原则,这些原则不仅是对数据专业人员的要求,也是对业务的要求,因为业务才是真正的数据Owner。所以,公司所有业务部门都应该共同遵从信息架构原…

【人工智能】人工智能中的Agent:法律虚拟助手简单示例

人工智能中的Agent:法律虚拟助手简单示例 随着人工智能技术的发展,Agent(代理)的概念在这个领域中变得愈发重要。在人工智能的应用中,Agent可以是一个系统、软件或机器人,能够执行特定的任务,理…

【JNA与C++基本使用示例】

JNA中java与C使用注意事项和代码示例 JNA关系映射表使用案列注意代码示例C代码java代码 JNA关系映射表 使用案列 注意 JNA只支持C方式的dll使用C的char* 作为返回值时,需要返回的变量为malloc分配的地址C的strlen函数只获得除/0以外的字符串长度 代码示例 C代码…

jumpserver web终端无法展示资产信息

前言 最近搭建了jumpServer 然后在web终端无法展示资产信息 错误展示 我的资产列表里面是有资产的 解决办法:

element Transfer 穿梭框 内容太长显示不全,鼠标移动上去显示全部

element Transfer中文字太长会造成显示不全&#xff0c;然后加了个提示 我这边是加了个插槽的形式&#xff0c;根据长度判断的&#xff0c;这个有个弊端就是如果是手机号的话&#xff0c;可能会没有省略号&#xff0c;然后也会有个黑色的提示框 <el-transferfilterable :d…

基于SSM实现的精品课程网站

一、系统架构 前端&#xff1a;jsp | js | css | jquery | bootstrap 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.7 | mysql | maven | tomcat 二、代码及数据库 三、功能介绍 01. 登录页 02. web端-首页 03. web端-视频教程 04. web端-资料…

【React】在移动端使用iconfont图标库

1、首先将需要的图标加入购物车 2、点击右上角的购物车&#xff0c;将购物里的图标添加到项目中 3、点击添加项目就会有选择的项目&#xff0c;选择后保存 如果有项目可以直接选择需要添加的项目&#xff0c;没有的需要新建项目存放到项目中 4、确定之后进入我的项目中&…

【初阶C++】前言

C前言 1. 什么是C2. C发展史3. C的重要性4. 如何学习C 1. 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; …

网神 SecGate3600 authManageSet.cgi信息泄露漏洞复现

漏洞概述 网神SecGate 3600 authManageSet.cgi 接口存在敏感信息泄露漏洞&#xff0c;未授权得攻击者可以通过此漏洞获取控制台管理员用户名密码等凭据&#xff0c;可登录控制整个后台&#xff0c;使系统处于极不安全的状态 复现环境 FOFA&#xff1a;body"sec_gate_im…

开源 CAD 计算机辅助设计软件,基于 Node.js 开发,使用浏览器进行访问-供大家学习研究参考

下载&#xff1a;开源CAD计算机辅助设计软件&#xff0c;基于Node.js开发&#xff0c;使用浏览器进行访问-供大家学习研究参考资源-CSDN文库 https://download.csdn.net/download/weixin_43097956/88623022

昇腾910安装驱动出错,降低Centos7.6的内核版本

零、问题描述&#xff1a; 在安装Atlas800-9000服务器的驱动的时候&#xff0c;可能会出现错误&#xff1a;Dkms install failed, details in : /var/log/ascend_seclog/ascend_install.log 如下所示&#xff1a; [rootlocalhost ~]# ./Ascend-hdk-910-npu-driver_23.0.rc3_l…

Python和Beautiful Soup爬虫助力提取文本内容

大家好&#xff0c;网络爬虫是一项非常抢手的技能&#xff0c;收集、分析和清洗数据是数据科学项目中最重要的部分。今天介绍如何从链接中爬取高质量文本内容&#xff0c;我们使用迭代&#xff0c;从大约700个链接中进行网络爬取。如果想直接跳转到代码部分&#xff0c;可以在下…

如何通过IDM进行统一权限

IDM身份管理平台在当今企业信息化建设中扮演着至关重要的角色&#xff0c;它不仅仅关乎用户身份的管理&#xff0c;更牵涉到对企业内部各种资源的合理分配和访问控制。其中&#xff0c;统一权限是 IDM 的一个核心概念&#xff0c;它通过集中管理用户的身份和访问权限&#xff0…