#include "widget.h"
#include "ui_widget.h"
#include<vector>
#include<QLabel>
std::vector<bullet> Bullet;
player *plane;
std::vector<enemy> Enemy;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
plane=new player;
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(20);
QTimer *timer2 = new QTimer(this);
connect(timer2, SIGNAL(timeout()), this, SLOT(refresh()));
timer2->start(20);
QTimer *timer3 = new QTimer(this);
connect(timer3, SIGNAL(timeout()), this, SLOT(generate_enemy()));
timer3->start(2000);
score=0;
score_label=new QLabel(this);
score_label->setGeometry(0,20,100,100);
score_label->setText(QString::number(score).prepend("score:"));
hp_label=new QLabel(this);
hp_label->setGeometry(0,80,100,100);
hp_label->setText(QString::number(plane->health).prepend("hp:"));
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent*)
{
QPainter painter(this);
plane->drawplayer(painter);
for(int i=0;i<Bullet.size();i++)
{
Bullet.at(i).drawbullet(painter);
}
for(int i=0;i<Enemy.size();i++)
{
Enemy.at(i).drawenemy(painter);
}
}
void Widget::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case 'a':{
}
case 'A':{
keypressed[2]=true;
break;
}
case 'd':{
}
case 'D':{
keypressed[3]=true;
break;
}
case 'w':{
}
case 'W':{
keypressed[0]=true;
break;
}
case 's':{
}
case 'S':{
keypressed[1]=true;
break;
}
case 16777220:
{
keypressed[4]=true;
}
}
}
void Widget::keyReleaseEvent(QKeyEvent *event)
{
switch (event->key()) {
case 'a':{
}
case 'A':{
keypressed[2]=false;
break;
}
case 'd':{
}
case 'D':{
keypressed[3]=false;
break;
}
case 'w':{
}
case 'W':{
keypressed[0]=false;
break;
}
case 's':{
}
case 'S':{
keypressed[1]=false;
break;
}
case 16777220:
{
keypressed[4]=false;
}
}
}
void Widget::refresh()
{
plane->move(keypressed,Bullet);
for(int i=0;i<Bullet.size();i++)
{
Bullet.at(i).refresh();
}
detect_crash();
enemy_AI();
if(plane->health<0)exit(0);
}
void Widget::generate_enemy()
{
if(Enemy.size()<5){
enemy *a=new enemy();
Enemy.push_back(*a);
}
std::vector<bullet>(Bullet).swap(Bullet);//释放rease的内存
}
void Widget::detect_crash()
{
int flag;
for(int i=0;i<Bullet.size();i++)
if(Bullet.at(i).y<0)Bullet.erase(Bullet.begin()+i);
for(int j=0;j<Enemy.size();j++)
{
if(Enemy.at(j).health<0){
Enemy.erase(Enemy.begin()+j);
score++;
score_label->setText(QString::number(score).prepend("score:"));
}
}
for(std::vector<bullet>::iterator i=Bullet.begin();i!=Bullet.end();)
{
flag=0;
if(i->is_my)
{
for(int j=0;j<Enemy.size();j++)
{
if(Enemy.at(j).crash(i))
{
Enemy.at(j).hitted();
i=Bullet.erase(i);
flag=1;
break;
}
}
}
else{
if(plane->crash(i))
{
plane->hitted();
i=Bullet.erase(i);
flag=1;
hp_label->setText(QString::number(plane->health).prepend("hp:"));
}
}
if(flag==0)i++;
}
}
void Widget::enemy_AI()
{
for(int i=0;i<Enemy.size();i++)
{
Enemy.at(i).AI(*plane,Bullet);
}
}
c++游戏编程设计基于qt开发的一个简单雷霆战机小游戏源码.zip
版权申诉
121 浏览量
2023-06-02
14:09:22
上传
评论
收藏 12KB ZIP 举报
Make程序设计
- 粉丝: 5725
- 资源: 3570
最新资源
- 基于matlab实现配电网三相潮流计算方法,对几种常用的配电网潮流计算方法进行了对比分析.rar
- 基于matlab实现配电网潮流 经典33节点 前推回代法潮流计算 回代电流 前推电压 带注释.rar
- 基于matlab实现模拟退火遗传算法的车辆调度问题研究,用MATLAB语言加以实现.rar
- 基于matlab实现蒙特卡洛的的移动传感器节点定位算法仿真代码.rar
- 华中数控系统818用户说明书
- 基于matlab实现卡尔曼滤波器完成多传感器数据融合 对多个机器人的不同传感器数据进行融合估计足球精确位置.rar
- 基于matlab实现进行简单车辆识别-车辆检测.rar
- 基于JSP物流信息网的设计与实现
- 基于matlab实现车牌识别程序,和论文,自己做的,做毕业设计的可以看看 .rar
- Windows系统下安装与配置Neo4j的步骤
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈