当前位置: 首页 > news >正文

基于Qt Creator开发的坦克大战小游戏

目录

  • 介绍
  • 开发环境
  • 技术介绍
  • 安装说明
  • 项目目录
  • 设计思想
  • 项目介绍
  • 运行演示
  • 知识点记录
  • Gitee源码链接

介绍

!!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!!
!!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!!
!!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!!

使用VS 2022 + Qt 5.9开发的坦克大战小游戏,使用的技术有QPainter绘制事件、键盘事件、定时器等,游戏模式分为双人大战和人机大战两种模式。

玩家一移动:W、A、S、D。
玩家二移动:上下左右方向键。
子弹发射:自动发射。

开发环境

VS 2022 + Qt Creator5.9。

技术介绍

使用QPainter绘制事件、KeyPressEvent键盘事件、QTimer定时器事件

键盘事件控制角色移动、定时器事件控制子弹发射、人机角色移动、统一交由QPainter进行绘制。

安装说明

1、安装VS 2022和Qt Creator5.9(安装msvc2017_x64组件)

2、搭建环境变量
在这里插入图片描述
按照选中内容定义变量QTDIR,在path(选中行的上一行)中设置bin目录。

在这里插入图片描述环境变量-》系统变量-》path变量设置bin目录

3、使用VS 2022打开解决方案进行编译。

项目目录

项目目录说明

在这里插入图片描述

-include-public: 存放各个模块共用的头文件-interface: 存放提供接口的头文件-res: 存放资源图片-src: -BattleArena:“双人大战” 游戏模式模块-BattleBots:“人机大战” 游戏模式模块-HnCore:项目用到的开发框架模块-Runner:存放main.cpp,主程序模块-TankShowDown:主界面模块-temp: 编译产生的临时文件-x64:-Debug: 存放Debug版本下的exe和所需动态库-Release:存放Release版本下的exe和所需动态库-程序.zip:解压后双击x64/Release下的Runner.exe即可运行

设计思想

游戏开始时定时器启动,超时时间设定100ms,定时器控制子弹移动、人机角色移动、子弹与玩家和墙体的碰撞检测。

定时器超时函数执行完毕就重新绘制,相当于每100ms绘制一帧数据。

地图:一个40 * 30的int类型数组表示,1代表墙,0代表空地,2代表草坪。因为墙和草坪图片的像素为20 * 20,所以窗口大小为800 * 600。

玩家移动:捕获键盘按下事件判断,W键向上、A键向左、S键向下、D键向右,上下左右箭头键同理。

子弹移动:定时器控制,与角色同一朝向的子弹位置不能在角色后面,每次移动一个距离。

碰撞检测:定时器超时函数中会遍历所有子弹坐标,如果子弹坐标和墙体坐标一致就将该子弹从子弹列表中删除,添加到爆炸列表中。

QPainter绘制:超时函数执行完毕重新绘制,会将角色位置、子弹位置、爆炸效果、地图都更新一遍。

绘制爆炸效果时进行判断,如果该爆炸坐标是草坪,就将该坐标在二维数组的值由2改为0,这样下次绘制时草坪就会消失。

还会与玩家坐标进行判断,如果重合说明该玩家失败,另一名玩家获得游戏胜利。

项目介绍

主界面
在这里插入图片描述
双人大战模式
在这里插入图片描述开始并不会发射子弹,按下任意键之后开始游戏、发射子弹、等待玩家键盘控制移动。

图中发射子弹是因为我按下截图快捷键识别到了任意键开始游戏。

左上角为玩家一,右下角为玩家二

爆炸效果在这里插入图片描述
子弹打中草坪,草坪会消失
在这里插入图片描述
击毁玩家二
在这里插入图片描述
之后会弹出“玩家一胜利”的弹窗

玩家一胜利
在这里插入图片描述
点击OK按钮回到主界面

人机大战模式
在这里插入图片描述
人机模式下人机会自动移动,碰到墙壁调转方向。

胜利!!!
在这里插入图片描述
同理,被人机击败会出现失败弹窗,再次回到主界面

运行演示

这视频好糊……

知识点记录

// 区分当前是Debug还是Release环境
#ifndef NDEBUG
#define LibraryDir "../../x64/Debug/"
#else
#define LibraryDir "../../x64/Release/"
#endif // NDEBUG#define PluginPath(x) (std::string(LibraryDir) + x)

Gitee源码链接

https://gitee.com/hnSVN/TankShowDown

相关文章:

基于Qt Creator开发的坦克大战小游戏

目录 介绍开发环境技术介绍安装说明项目目录设计思想项目介绍运行演示知识点记录Gitee源码链接 介绍 !!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!&#xff…...

小说推文和短剧推广以及电影达人带货电影票

小说推文、短剧推广、电影达人(带或电影票)都可以通过“巨量推文“进行申请授权 小说推文和短剧推广是什么? 小说推文和短剧推广的逻辑其实一样,分为cpa拉新和cps分成的推广形式 cpa拉新是你推广的用户必须为新用户&#xff0c…...

朴素贝叶斯分类(下):数据挖掘十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...

9.30作业

C语言基础考题(40) 选择题 20分每题2分 1、已知字母A的ASCII码为十进制数值65,且S为字符型,则执行语句SA6-3;后S中的值为 ( ) A.D B.68 C.不确定的值 D.C 2、若有定义语句:int a12;,则执…...

[GWCTF 2019]枯燥的抽奖

参考 https://www.cnblogs.com/AikN/p/15764428.html [GWCTF 2019]枯燥的抽奖-CSDN博客 打开环境 笑死我了,怎么那么像我高中校长 查看源代码 看到check.php,去访问一下 ok看到源代码了 因为上次做过,看到这个我就想到用php_mt_seed逆推…...

vue3中sync修饰符的使用

props是子组件与父组件进行通信的常用方式,使用步骤主要有以下几个: 1. 在子组件中定义props要从父组件接收的变量(变量的类型必须写明,默认值可选) // 这里以 document.vue 子组件为例 // 通过 defineProps 宏的方…...

Qt全屏显示与退出

仿照 按Escape键退出程序中的实现,我们在程序开始的时候全屏显示,按esc键的时候退出全屏。 showFullScreen 全屏显示只需要调用QWidget类(QMainWindow也是一个QWidget类)的 showFullScreen() 成员函数即可。 退出全屏&#x…...

OpenCV之直线曲线拟合

直线拟合fitLine void fitLine( InputArray points, OutputArray line, int distType,double param, double reps, double aeps ); points:二维点的数组或vector line:输出直线,Vec4f (2d)或Vec6f (3d)的vector distType:距离类型 param:距离参数 reps:径向的精度参数 a…...

2023年哪款PDF虚拟打印机好用?

PDF文档想必大家都不陌生,在工作中经常会用到该格式的文档,那么有哪些方法能制作PDF文档呢?一般都是借助PDF虚拟打印机的,那么有哪些好用的软件呢? pdfFactory不仅为用户提供了丰富的PDF文档生成、打印功能&#xff0…...

Redis各数据类型特定的命令和用法 1.0版本

目录 一、Sring数据类型1.1 概述1.2 set/get/append/strlen命令1.3 incr/decr/incrby/decrby 命令1.4 getset命令1.5 setex命令1.6 setnx命令1.7 mset/mget/msetnx命令 二、List数据类型2.1 概述2.2 lpush/lpushx/lrange命令2.3 lpop/llen命令2.4 lrem/lset/lindex/ltrim命令2.…...

卫星图像应用 - 洪水检测 使用DALI进行数据预处理

这篇文章是上一篇的延申。 运行环境:Google Colab 1. 当今的深度学习应用包含由许多串行运算组成的、复杂的多阶段数据处理流水线,仅依靠 CPU 处理这些流水线已成为限制性能和可扩展性的瓶颈。 2. DALI 是一个用于加载和预处理数据的库,可…...

为什么字节大量用GO而不是Java?

见字如面,我是军哥。 我看很多程序员对字节编程语言选型很好奇,为此我还特地问了在字节的两位4-1的技术大佬朋友,然后加上自己的思考,总结了一下就以下 2 个原因: 1、 选型上没有历史包袱 字节的早期的程序员大多来自于…...

Hive SQL初级练习(30题)

前言 Hive 的重要性不必多说,离线批处理的王者,Hive 用来做数据分析,SQL 基础必须十分牢固。 环境准备 建表语句 这里建4张表,下面的练习题都用这些数据。 -- 创建学生表 create table if not exists student_info(stu_id st…...

NSSCTF做题(6)

[HCTF 2018]Warmup 查看源代码得到 开始代码审计 <?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page) { $whitelist ["source">"source.php","hint"…...

公众号商城小程序的作用是什么

公众号是微信平台重要的生态体系之一&#xff0c;它可以与其它体系连接实现多种效果&#xff0c;同时公众号内容创作者非常多&#xff0c;个人或企业商家等&#xff0c;会通过公众号分享信息或获得收益等&#xff0c;而当商家需要在微信做私域经营或想要转化粉丝、售卖产品时就…...

关于 FOCA

目录 注意团队成员成品官网项目社区 版本信息致谢 注意 此文章会随时更新&#xff0c;最好收藏起来&#xff0c;总对你有好处。我们不定时发布一些 IT 内容&#xff0c;所以请关注我们。 此账号为 FOCA 唯一的官方账号&#xff0c;请勿轻易相信其他账号所发布内容。 团队 全…...

TVP专家谈腾讯云 Cloud Studio:开启云端开发新篇章

导语 | 近日&#xff0c;由腾讯云 TVP 团队倾力打造的 TVP 吐槽大会第六期「腾讯云 Cloud Studio」专场圆满落幕&#xff0c;6 位资深的 TVP 专家深度体验腾讯云 Cloud Studio 产品&#xff0c;提出了直击痛点的意见与建议&#xff0c;同时也充分肯定了腾讯云 Cloud Studio 的实…...

2023-09-27 Cmake 编译 OpenCV+Contrib 源码通用设置

Cmake 编译 OpenCV 通用设置 特点&#xff1a; 包括 Contrib 模块关闭了 Example、Test、OpenCV_AppLinux、Windows 均只生成 OpenCV_World 需要注意&#xff1a; 每次把 Cmake 缓存清空&#xff0c;否则&#xff0c;Install 路径可能被设置为默认路径Windows 需要注意编译…...

ACGAN

CGAN通过在生成器和判别器中均使用标签信息进行训练&#xff0c;不仅能产生特定标签的数据&#xff0c;还能够提高生成数据的质量&#xff1b;SGAN&#xff08;Semi-Supervised GAN)通过使判别器/分类器重建标签信息来提高生成数据的质量。既然这两种思路都可以提高生成数据的质…...

模块化CSS

1、什么是模块化CSS 模块化CSS是一种将CSS样式表的规则和样式定义封装到模块或组件级别的方法&#xff0c;以便于更好地管理、维护和组织样式代码。这种方法通过将样式与特定的HTML元素或组件相关联&#xff0c;提供了一种更具可维护性、可复用性和隔离性的方式来处理样式。简单…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...