目录
一、设计内容:坦克大战GUI版本 1
- 设计目标 1
2)实现基本游戏逻辑: 2
3)实现当前局的状态栏 2
4)支持双人模式 3 - 基本实现效果 3
二、设计思路 4 - 窗口交互和图形界面的实现 4
1)窗口的实现: 4
2)图片和文字的显示: 4
3)界面的切换: 4 - 游戏逻辑的控制 5
1)地图上的坦克、子弹变量: 5
2)坦克、子弹的移动: 5
3)整体逻辑的控制: 5
复用课程设计二的部分: 5 - 地图的设计 5
- 坦克的设计 5
- 子弹的设计 6
三、实现细节 6 - 类的设计 6
类的声明: 6 - OOP设计思想 11
四、功能介绍 11
五、遇到的问题和解决方案 14 - Qt中库函数的使用 14
- 代码复用问题 14
原来的实现方法: 14 - 图片素材 15
一、设计内容:坦克大战GUI版本
1.设计目标
保留课程设计二完成的坦克大战控制台版本的所有功能,用Qt实现图形界面以下为课程设计二中实现的功能(略长,可跳过): 1)模仿设计四类游戏模型/属性:
游戏地形
游戏道具
砖墙:除四周围墙外均可被一级子弹打穿海水:坦克和子弹均不可穿越
铁墙:可被二级子弹打穿
森林:坦克和子弹均可穿越,但显示上会被森林覆盖基地:“★”表示基地中心,被打中则游戏结束
坦克:玩家可以增加一条命。
炸弹:全屏敌人遭到爆炸攻击,全数毁灭。
三种坦克属性:
生命值:即HP,表示坦克可以被子弹命中多少次
攻击力:一方面表现为子弹种类,一级子弹只能打穿砖墙,二级子弹可打穿铁墙; 另一方面表现为子弹射速,即子弹的移动速度
移动速度:坦克的移动速度五种类型的坦克:
轻型坦克:移动速度普通,一级子弹,子弹射速普通,生命值为1 装甲车:移动速度快,一级子弹,子弹射速普通,生命值为2
反坦克炮:移动速度普通,二级子弹,子弹射速快,生命值为2 重型坦克:移动速度普通,一级子弹,本文转载自http://www.biyezuopin.vip/onews.asp?id=16780子弹射速普通,生命值为3
玩家坦克:移动速度普通,一级子弹,子弹射速普通,生命值为10
2)实现基本游戏逻辑:
按照一定的策略刷出敌军坦克,敌军坦克随机移动并攻击。玩家控制的坦克在基地旁边刷出 玩家控制的坦克通过灵活移动保卫基地不被摧毁并消灭敌军坦克
游戏过程中在地图上会随机刷出道具,玩家可通过道具强化自己
失败条件:基地被摧毁或者玩家生命耗尽胜利条件:消灭所有敌军坦克
3)实现当前局的状态栏
显示玩家生命值、敌军剩余坦克数量游戏结束时显示:
胜负:赢了显示“Win!“,输了显示”Game Over”;
得分:根据玩家消灭的敌方坦克的种类和数量计算得分
4)支持双人模式
游戏开始时选择模式,游戏结束时显示计分板
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "subwindow.h"
#include "subwindow2.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
/*set size*/
setMinimumSize(1500, 900); setMaximumSize(1500, 900);
/*set background*/
QPixmap pixmap = QPixmap(":/pic/cover.png").scaled(this->size());
QPalette palette (this->palette());
palette .setBrush(QPalette::Background, QBrush(pixmap));
this-> setPalette( palette );
/*set title*/
this->setWindowTitle("Tank Battle");
this->setWindowIcon(QIcon(":/pic/cover.png"));
//this->setWindowIcon(QIcon(":/pic/icon.jpg"));
/*set icon*/
ui->pushButton->setStyleSheet("QPushButton{border-image:url(:/pic/start5.png);}" //正常
"QPushButton:hover{border-image:url(:/pic/start6.png);}" //鼠标悬浮
);
ui->pushButton->setFixedSize(QSize(200,100));//icon size
ui->pushButton_2->setFixedSize(QSize(200,100));//icon size
ui->pushButton_2->setStyleSheet("QPushButton{border-image:url(:/pic/EXIT.png);}" //正常
"QPushButton:hover{border-image:url(:/pic/exit2.png);}" //鼠标悬浮
);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
ui->pushButton->setText("hello");
this->close();
subWindow *s=new subWindow(this);
s->show();
}
void MainWindow::on_pushButton_2_clicked()
{
exit(0);
}