基于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源码链接 介绍 !!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!ÿ…...
小说推文和短剧推广以及电影达人带货电影票
小说推文、短剧推广、电影达人(带或电影票)都可以通过“巨量推文“进行申请授权 小说推文和短剧推广是什么? 小说推文和短剧推广的逻辑其实一样,分为cpa拉新和cps分成的推广形式 cpa拉新是你推广的用户必须为新用户,…...
朴素贝叶斯分类(下):数据挖掘十大算法之一
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介: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文档生成、打印功能࿰…...
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"…...
公众号商城小程序的作用是什么
公众号是微信平台重要的生态体系之一,它可以与其它体系连接实现多种效果,同时公众号内容创作者非常多,个人或企业商家等,会通过公众号分享信息或获得收益等,而当商家需要在微信做私域经营或想要转化粉丝、售卖产品时就…...
关于 FOCA
目录 注意团队成员成品官网项目社区 版本信息致谢 注意 此文章会随时更新,最好收藏起来,总对你有好处。我们不定时发布一些 IT 内容,所以请关注我们。 此账号为 FOCA 唯一的官方账号,请勿轻易相信其他账号所发布内容。 团队 全…...
TVP专家谈腾讯云 Cloud Studio:开启云端开发新篇章
导语 | 近日,由腾讯云 TVP 团队倾力打造的 TVP 吐槽大会第六期「腾讯云 Cloud Studio」专场圆满落幕,6 位资深的 TVP 专家深度体验腾讯云 Cloud Studio 产品,提出了直击痛点的意见与建议,同时也充分肯定了腾讯云 Cloud Studio 的实…...
2023-09-27 Cmake 编译 OpenCV+Contrib 源码通用设置
Cmake 编译 OpenCV 通用设置 特点: 包括 Contrib 模块关闭了 Example、Test、OpenCV_AppLinux、Windows 均只生成 OpenCV_World 需要注意: 每次把 Cmake 缓存清空,否则,Install 路径可能被设置为默认路径Windows 需要注意编译…...
ACGAN
CGAN通过在生成器和判别器中均使用标签信息进行训练,不仅能产生特定标签的数据,还能够提高生成数据的质量;SGAN(Semi-Supervised GAN)通过使判别器/分类器重建标签信息来提高生成数据的质量。既然这两种思路都可以提高生成数据的质…...
模块化CSS
1、什么是模块化CSS 模块化CSS是一种将CSS样式表的规则和样式定义封装到模块或组件级别的方法,以便于更好地管理、维护和组织样式代码。这种方法通过将样式与特定的HTML元素或组件相关联,提供了一种更具可维护性、可复用性和隔离性的方式来处理样式。简单…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
