基于QT(C++)实现的坦克大战

一、环境

  • 语言:C++
  • 编译器:gcc version 7.3.0
  • 应用程序开发框架:Qt version 5.14.1
  • 集成开发环境:Qt Creator 4.11.0 (Community)

二、游戏总体介绍

1.设计规则

该游戏总共有35关,每关有20个敌方坦克,玩家每关3条命,因为是在个人电脑上玩所以仅实现了单人游戏

击败20个敌人自动进入下一关,通过35关游戏胜利,当生命数为0或大本营被击中游戏失败

玩家坦克由键盘W、S、A、D键控制移动方向,J键发射子弹,敌方坦克则自动控制

2.效果展示图

3.UML 类图

4.运行流程图

三、全局参数的设置

1.定义全局参数

我们的全局参数主要是枚举类型方向,地图数组,图像的单位尺寸,窗口长和宽

用一个config.h头文件来设置这些全局参数,并由其他类进行include

2.遇到的问题

按照上面的方式写好代码进行编译时发生了变量的重复定义报错(已经进行了宏定义防止头文件多次包含)

后来经过跟踪报错发现子弹类包含了一个map数组,而坦克类中也有map数组,两者分开是不会互相影响的,但把这两个对象放到Widget对象中就会发生冲突

3.解决方法

在config.h中指明变量为外部变量,把具体变量定义到config.cpp中

这样子弹类和坦克类所包含的同名变量都为同一个外部变量,且指向同一个地址

四、主要代码

1.初始化

游戏初始化时先加载资源文件,各定时器开始计时,创建玩家角色,和敌方坦克

我们规定地图上最多只能有四个敌方坦克,用enemyNum变量记录剩余敌人数量,用cursor来标记出生点的位置

用enemies列表来储存敌方坦克对象

void Widget::init()
{
    //加载地图
    loadMap();

    camp.load((rootdir+"pic\\camp0.gif").c_str());
    camp = resizePic(camp,SIZE,SIZE);

    QSound::play((rootdir+"sound\\start.wav").c_str());
    //创建敌人
    cursor=0;
    enemyNum = 20;
    for(int i=0;i<4;i++)
    {
        createEnemy();
    }
    //创建玩家
    createPlayer();
    life = 3;
    // 开始游戏
    start = 30;
    timer1->start(120);
    timer2->start(150);
    timer3->start(1000);
    timer4->start(60);
    timer5->start(33);
}

void Widget::createPlayer()
{
    role1.bullet.setActive(false);
    role1.setDir(direct::up);
    role1.ismove=false;
    role1.rect.setRect(9*BASESIZE,24*BASESIZE,SIZE,SIZE);
}

void Widget::createEnemy()
{
    if(enemyNum<4)
        return;
    Enemy enemy;
    enemy.rect.setRect(cursor
C++控制台编程“坦克大战” 新手C++ 坦克大战 本人新手写的比较乱,不喜勿喷, 1、首先,先用图片介绍下代码运行逻辑, 2、这是控制台的界面,展示一下各个功能的界面 开始界面 单人模式界面 双人模式界面 自定义地图 3、以下是代码展示 这是菜单类 #include "Menu.h" #include <windows.h> #include "Game.h" //显示欢迎界面 void Menu::S... 阅读详情

相关推荐

c++经典坦克大战

bool hittest(TankFriend& tank_f, TankEnemy* Etankarr, list& listmap) //参数:我方坦克对象,敌军坦克对象数组,地图list容器。//img再获取img_2中的图像。else if (m_y == 480 && m_x == 200 && temp == false) //右。

Merlinsman的博客 2013

C++(qt)实战项目:坦克大战

==先插个眼,等学完c++的基本内容后就准备拿来和上位机和这个坦克大战的项目进行练手,当然还需要学一下Qt的内容 1https://blog.csdn.net/ZhangXiaoyu_sy/article/details/78925221 各种非常有意思的上位机编写的软件附带源码虽然要积分下载 https://download.csdn.net/download/zhangxiaoyu_sy/10...

oooooooooooooookjk的博客 1174

用Qt复刻FC坦克大战:游戏循环、碰撞检测与AI实战

从经典游戏复刻切入,探讨如何利用C++与Qt框架构建完整的2D游戏。游戏开发中最核心的环节包括渲染框架选型、主循环设计、碰撞检测与AI决策。本文以QGraphicsView为基础,通过13×13地图矩阵和16ms定时器实现稳定的游戏循环,并介绍了基于预测矩形的碰撞判定方法,有效避免穿模与卡墙。进一步讨论了敌人AI的决策节奏、道具系统及胜负判定,最后总结了Qt 5.15.2环境下的常见坑点。无论是想要吃透QGraphicsView的开发者,还是希望入门游戏逻辑设计的学习者,都能从这篇工程实践中获得可复用的经验

weixin_29008691的博客 247

用C++/Qt重写坦克大战:从QGraphicsView到碰撞检测的完整工程实践

在游戏开发学习路径中,经典小游戏是验证编程语言与图形框架掌握程度的试金石。C++/Qt 作为桌面应用开发的主流组合,其图形视图框架(QGraphicsView/QGraphicsScene)提供了对象化管理、坐标变换与碰撞检测等底层能力,非常适合用来构建坦克大战这类具有实时交互逻辑的项目。理解场景(Scene)、图元(Item)与视图(View)三者的关系,掌握信号槽驱动的游戏循环,以及基于几何判定与生命周期管理的碰撞处理,是突破“写出能玩”到“写出工程化代码”的关键。从地图渲染、坦克移动、子弹发射到多类型

weixin_30907685的博客 256

c++坦克大战源码_写的不错

写的非常好的坦克大战,用c++编写的坦克大战源码,非常有学习价值,用作期末课程设计,分数非常美丽。一起学习,一起学习。

坦克大战——C++游戏代码

游戏分里外两个部分组成,里部分(用户不可见) 通过里部分执行判断,地图数组更改,和各种值的改变。更改完里部分再根据相应变化更改表部分。(用户可视部分)表部分的打印通过gotoxy去到相应坐标再printf打印出字符,通过文本函数改变文字字体颜色与文字背景颜色与字符组合实现图形界面。 程序通过 计数器+循环判断 的思想,类似单核cpu的多线程实现(单线程在不同程序/函数间来回执行)省去了多线程。(具体过程在功能设计与描述有详细描述) 另AI实现与加强依赖于rand随机函数的运用,进一步强化AI,增加游戏乐趣 功能方面,游戏参考于80年代任天堂红白机(FC/FamilyComputer)上的游戏坦克大战(Battle City),包括地图,游戏模式等等(当时的游戏直接烧在电路板上)。所以游戏平衡方面已经有了很好的参考,无需再花大量时间测试平衡性。 但诸如地图中的树林元素,随机道具等没有实现。但较之原版,该游戏由C/C++编写PC运行,由字符界面实现游戏画面。原版一辆坦克的子弹未消失之前不能发射第二颗。导致子弹打击远处CD长,近处CD短。该游戏每个子弹都有相同CD,子弹未消失只要CD达到即可发射第二颗,第三颗…增加了真实性,相较于原版是个改进。且考虑到PC性能不一内置了游戏速度调整。玩家可根据PC性能调整至合适的速度。

C++ 控制台版本坦克大战游戏

C++ 控制台版坦克大战游戏简介 内容概要 C++ 控制台版坦克大战游戏是一款基于C++编程语言开发的经典射击游戏。 通过键盘控制坦克移动攻击,躲避敌方坦克的攻击,同时消灭它们以完成关卡任务,支持地图编辑。 适用人群 这款游戏适用于对C++编程和游戏开发感兴趣的广大学生、编程爱好者以及初学者。通过参与游戏开发,他们可以深入了解C++编程语言的应用,学习游戏逻辑设计、用户输入处理。此外,对于想要通过实践提升编程能力和算法思维的人群,这款游戏也是一个不错的选择。 使用场景及目标 C++ 控制台版坦克大战游戏可以在多种场景下使用,并达到以下目标: 学习与实践场景:在编程学习或实践课程中,教师可以利用这款游戏作为教学案例,引导学生逐步完成游戏的开发。学生在开发过程中将学习并应用C++的基础知识,包括变量、数据类型、循环、条件语句等,同时培养解决问题的能力。

基于C++开发的坦克大战

基于C++开发的坦克大战游戏,之前上课的时候根据老师要求自己完成的

(OSTrack)Joint Feature Learning and Relation Modeling for Tracking A One-Stream Framework

Joint Feature Learning and Relation Modeling for Tracking A One-Stream Framework (OSTrack)

小火山的博客 1647

GBASE南大通用GBase 8s数据库-从零开始的手动安装与实例配置指南

本文详细介绍了GBASE南大通用GBase 8s数据库的手动安装与实例配置全过程,包括环境准备、用户创建、安装包准备、实例创建、环境变量配置等关键步骤。通过实战经验分享和常见问题解决方案,帮助用户快速掌握GBase 8s数据库的安装与配置技巧,确保数据库稳定运行。

weixin_29209825的博客 450

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤 1.背景及问题 最近在使用自动化学报latex模板写作业时,一只对latex搞不清楚,网上关于各种版本的latex下载了一堆(比如ctex中文套装方案的各个版本及texlive+texstudio方案,中间还升级了miktex,windet等),发现都未能成功编译出来自动化学报的latex模板,反正开始头很大!!!最后终于没忍住打开了: 自动化学报官网下载模板链接,因为我就要用latex模板(不能服输!)找到的解决方案是:使用

QIANFANGshiwo的博客 7703

告别繁琐同步:Zotero与Obsidian双向联动新方案(基于Better BibTeX与MarkDBConnect)

本文详细介绍了一套基于Better BibTeX、Bibnotes Formatter和MarkDBConnect插件的Zotero与Obsidian双向联动方案。该方案通过建立智能数据通道,实现文献信息的自动同步与笔记的增量更新,解决了手动同步的繁琐问题,并支持在两大工具间无缝跳转,极大提升了科研和知识管理的工作效率。

weixin_29213827的博客 633

(第100天)Oracle GoldenGate 常见故障处理指南

OGG 运维的核心在于细致的配置管理和主动的问题排查。熟悉常见错误、掌握关键操作流程、并善用日志和调试工具,是保障数据同步任务稳定运行的关键。希望这份指南能帮助您更高效地解决 OGG 同步中遇到的问题。祝您运维顺利!

LuciferLiu_DBA 295

Python 爬虫实战:爬虫与 ECharts 结合 —— 前端可视化展示

本文介绍了爬虫技术与ECharts可视化结合的完整实现流程。首先使用Python爬取京东商品数据(价格、评价数等),通过BeautifulSoup解析和pandas处理转换为JSON格式。然后构建前端页面,利用ECharts实现价格分布柱状图、价格-评价数散点图和店铺占比饼图三种可视化效果。文章详细解析了爬虫数据提取、格式转换和前端图表配置等关键技术点,并提供了完整的代码示例。最后提出了基于API接口、数据库存储等扩展方向,为数据采集到可视化展示提供了完整的解决方案。

2503_91057718的博客 627

【示波器专题】示波器探头的原理深入——有源探头之差分有源探头

差分有源探头是一种特殊的有源探头,与普通单端有源探头的区别在于其前端的放大器是差分放大器。差分放大器的好处是可以直接测试高速差分信号,同时其共模抑制比高,对共模噪声的抑制能力比较好。...

一点硬件 2616

Yield Management软件:Lam Research二次开发_(5).缺陷分析与分类方法

在半导体制造过程中,缺陷分析和分类是提高良率管理(Yield Management)的关键步骤。通过准确地识别和分类缺陷,可以更好地理解工艺过程中的问题,从而采取有效的措施来提高生产效率和产品质量。本节将详细介绍缺陷分析和分类的方法,包括缺陷检测、特征提取、分类算法及其在Lam Research软件中的应用。

2401_87715305的博客 680

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 基于PHP+MySQL实现的web端借还书系统
下一篇: 基于Android实现的小说阅读APP
神仙别闹
博客等级 码龄18年 6243粉丝 1093原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值