坦克大战GUI版本
设计内容:坦克大战GUI版本
1. 设计目标
保留课程设计二完成的坦克大战控制台版本的所有功能,用Qt实现图形界面
以下为课程设计二中实现的功能(略长,可跳过):
1.1模仿设计四类游戏模型/属性:
- 游戏地形
砖墙:除四周围墙外均可被一级子弹打穿
海水:坦克和子弹均不可穿越
铁墙:可被二级子弹打穿
森林:坦克和子弹均可穿越,但显示上会被森林覆盖
基地:“★”表示基地中心,被打中则游戏结束
- 游戏道具
坦克:玩家可以增加一条命。
炸弹:全屏敌人遭到爆炸攻击,全数毁灭。
- 三种坦克属性:
生命值:即HP,表示坦克可以被子弹命中多少次
攻击力:一方面表现为子弹种类,一级子弹只能打穿砖墙,二级子弹可打穿铁墙;另一方面表现为子弹射速,即子弹的移动速度
移动速度:坦克的移动速度
- 五种类型的坦克:
轻型坦克:移动速度普通,一级子弹,子弹射速普通,生命值为1
装甲车:移动速度快,一级子弹,子弹射速普通,生命值为2
反坦克炮:移动速度普通,二级子弹,子弹射速快,生命值为2
重型坦克:移动速度普通,一级子弹,子弹射速普通,生命值为3
玩家坦克:移动速度普通,一级子弹,子弹射速普通,生命值为10
1.2实现基本游戏逻辑:
按照一定的策略刷出敌军坦克,敌军坦克随机移动并攻击。玩家控制的坦克在基地旁边刷出
玩家控制的坦克通过灵活移动保卫基地不被摧毁并消灭敌军坦克
游戏过程中在地图上会随机刷出道具,玩家可通过道具强化自己
失败条件:基地被摧毁或者玩家生命耗尽
胜利条件:消灭所有敌军坦克
1.2.1实现当前局的状态栏
显示玩家生命值、敌军剩余坦克数量
游戏结束时显示:
胜负:赢了显示“Win!“,输了显示”Game Over”;
得分:根据玩家消灭的敌方坦克的种类和数量计算得分
1.2.2支持双人模式
游戏开始时选择模式,游戏结束时显示计分板
2. 基本实现效果
初始界面:


2.设计思路
窗口交互和图形界面的实现
2.1窗口的实现:
设计了两个窗口类:MainWindow和subWindow类
MainWindow负责游戏初始界面,subWindow负责游戏开始后的界面
窗口类可以在ui文件中可视化添加控件,并且可以接收控件点击消息、键盘消息等,可以通过为窗口类添加相应事件处理函数来实现交互。
void keyPressEvent(QKeyEvent *ev);//键盘事件处理函数
void on_pushButton_clicked();//pushbutton被按下处理函数
2.2图片和文字的显示:
主要通过QPainter实现图片和文字的绘制,在以下函数中实现:
void paintEvent(QPaintEvent *event);
关于地图的绘制:这里将界面划分为一个个小格,通过map数组记录每个小格需要显示的图片,所以在函数paintEvent中只需读取map数组中的数据即可知道在相应位置应该绘制哪张图片。坦克,子弹或地形发生改变时,调用函数update()即可实现地图的更新。
2.3界面的切换:
subWindow中会涉及多个界面,如模式选择界面、游戏进行时的界面、游戏结束后的计分板界面。这里通过设置flag标志位让paintEvent函数知道应该读取哪些数据来绘制界面。例如:游戏结束条件触发时设标志位endflag为1,表示游戏结束,此时paintEvent函数读取玩家击败敌方坦克的数量和分数,并在相应位置显示。
3.游戏逻辑的控制
原来的控制台版本通过设计Control类来控制游戏的初始、进行和结束;但在Qt中因为键盘消息、时钟信号都由窗口类捕捉,所以把游戏逻辑控制部分移到了subWindow类中。
3.1地图上的坦克、子弹变量:
在subWindow类的数据成员中存储着地图上现存的坦克指针(包括地方坦克和玩家坦克),而Tank类的数据成员中有其控制的子弹,通过遍历这些坦克及其控制的子弹并调用其move函数实现这些模型的运动。
约定同一时刻存在的敌方坦克数量最多为3,当有敌方坦克被摧毁并且有备用坦克时,刷新新的敌方坦克。玩家被击中时退回其出生地。
3.2坦克、子弹的移动:
通过设置几个时间间隔不同的时钟QTimer,并将时钟信号与槽函数…_move连接,每隔一段时间调用坦克或子弹的move函数,实现坦克和子弹移速的控制。
3.3整体逻辑的控制:
最最主要的游戏逻辑控制在subWindow中的bullet_move函数中,因为坦克的消亡、玩家坦克血量的减少、基地被摧毁等与游戏结束触发条件相关的事件均由子弹引发。
而当基地被摧毁、现存地方坦克数量为0、玩家生命值耗尽时游戏结束,设endflag为1,paintEvent函数会显示胜负情况,计算并显示玩家得分情况。
4.功能介绍
游戏初始界面:

鼠标左键点击"START"键进入模式选择:(或点击“EXIT”键退出程序)

鼠标左键点击"1 PLAYER"键进入单人模式:

点击"2 PLAYER"键进入双人模式:

- 注:点击右下方的“RETURN"键可返回模式选择界面
游戏过程中可掉落游戏道具(以坦克道具为例):

游戏结束后显示胜负和得分,(胜:WIN! 负:GAME OVER),点击“RETURN"键重新开始。

需要源码的友友滴!