由于第一次写塔防游戏时,我没有相关经验,所以导致最终的代码既不规范,运行效果也不太好。
而这一次,我重新写了一遍塔防程序,弥补了上一个塔防程序大部分的不足。
同时代码中还使用了很多高级(我认为)的用法,其中包括了C++新标准语法、封装、继承、多态等,甚至其中的一个功能,因为我没有办法很好的实现效果,我是特地花钱请了别人帮我写出来的。
虽然我并没有与之相关的作业,但是我还是尽力把它做到了最好。
该程序中不仅包含了塔防游戏的基本功能,还有着丰富的升级功能,
其中包括了:
根据特定的二维数组自动生成地图、
自动确定防御塔位置、自动生成怪物路径、
可购买四种不同的防御塔,每种防御塔都有着其独有的攻击方式、
防御塔自动寻找目标进行攻击、
防御塔升级、防御塔拆除、
四种不同属性的敌人、
游戏难度随游戏进度增加、
命中敌人效果、敌人血条显示、
游戏失败及胜利判定、
多关卡功能,且添加关卡只需要一个13*8的特定格式的二维数组(在选择关卡界面类添加约15行代码)、
背景音乐。
虽然这个小游戏跟用游戏引擎做出来的真正的游戏还差很远,但是我认为它对于新手而言已足够好了。
防御塔升级后,其图片宽高会增大,攻击范围、伤害、速度都会提高
编译环境:
Windows Qt 5.9.0 Qt Creator 4.3.0
思路:
塔防小游戏思路
下面展示游戏开始界面代码,该界面使用了QT的界面设计功能
#include "startwindow.h"
#include "ui_startwindow.h"
#include "gamewindow.h" //游戏界面
StartWindow::StartWindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::StartWindow)
{
ui->setupUi(this);
setWindowTitle("开始界面");
//选择关卡按钮点击
//第一关
connect(ui->pushButton_1, &QPushButton::clicked, []()
{
int mapArr_1[8][13] =
{
0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 3, 0, 0, 3, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0,
0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 1, 0,
4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 0, 0, 3, 0, 0, 3, 1, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
};
GameWindow* gamewindow = new GameWindow(mapArr_1);
gamewindow->show();
});
//第二关
connect(ui->pushButton_2, &QPushButton::clicked, []()
{
int mapArr_1[8][13] =
{
0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0,
0, 0, 0, 1, 3, 0, 0, 0, 3, 1, 0, 0, 0,
0, 0, 3, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0,
0, 1, 1, 1, 0, 3, 1, 0, 0, 3, 0, 0, 0,
0, 1, 3, 1, 1, 1, 1, 0, 0, 1, 1, 1, 4,
0, 1, 0, 0, 3, 0, 0, 3, 0, 1, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
GameWindow* gamewindow = new GameWindow(mapArr_1);
gamewindow->show();
});
//第三关
connect(ui->pushButton_3, &QPushButton::clicked, []()
{
int mapArr_1[8][13] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 4,
0, 1, 0, 0, 1, 3, 3, 1, 0, 3, 1, 0, 0,
0, 1, 3, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,
0, 1, 0, 3, 1, 0, 0, 1, 3, 0, 1, 0, 0,
0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
GameWindow* gamewindow = new GameWindow(mapArr_1);
gamewindow->show();
});
//第四关
connect(ui->pushButton_4, &QPushButton::clicked, []()
{
int mapArr_1[8][13] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 0, 0, 0,
0, 0, 3, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0,
2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4,
0, 0, 3, 0, 0, 0, 1, 3, 0, 3, 0, 0, 0,
2, 1, 1, 1, 0, 3, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
GameWindow* gamewindow = new GameWindow(mapArr_1);
gamewindow->show();
});
}
StartWindow::~StartWindow()
{
delete ui;
}
GitHub下载地址:https://github.com/baijiaming20/baijiaming_Repository
如果您有其他问题,欢迎私信我。
感谢大家的支持。