#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
/*背景音乐*/
player = new QMediaPlayer;//设置背景音乐
player->setMedia(QUrl("qrc:/tu/bgm2.mp3"));
player->setVolume(30);//音量
player->play();
/*界面设计*/
setFixedSize(900,900);
QPixmap pix = QPixmap(MYbg).scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pix));
this-> setPalette(palette);
setMouseTracking(true);
setWindowIcon(QIcon(MYpl));
setWindowTitle("雷霆战机 无尽模式,移动鼠标消灭它们,按Q退出游戏");// 需要设计的功能 按下空格暂停,移动鼠标躲避敌机和子弹,消灭它们!
setCursor(Qt::BlankCursor); //敌机子弹移动,难度选择,难度即飞机飞行速度,子弹速度,子弹数量的改变
timer1 = new QTimer;//发射自己的子弹
connect(timer1,&QTimer::timeout,this,&Widget::update_boom);
timer1->start(50);
timer2 = new QTimer;//移动自己的子弹
connect(timer2,&QTimer::timeout,this,&Widget::move_boom);
timer2->start(10);
timer4 = new QTimer;//发射敌机
connect(timer4,SIGNAL(timeout()),this,SLOT(update_dipl()));
timer4->start(300);
timer5 = new QTimer;//移动敌机
connect(timer5,SIGNAL(timeout()),this,SLOT(move_dipl()));
timer5->start(20);
timer6 = new QTimer;//敌机发射子弹
connect(timer6,SIGNAL(timeout()),this,SLOT(update_dizd()));
timer6->start(1000);
timer7 =new QTimer;//移动敌机子弹
connect(timer7,SIGNAL(timeout()),this,SLOT(move_dizd()));
timer7->start(30);
upboss = new QTimer;
connect(upboss,SIGNAL(timeout()),this,SLOT(update_boss()));
upboss->start(5000);
moveboss = new QTimer;
connect(moveboss,SIGNAL(timeout()),this,SLOT(move_boss()));
moveboss->start(20);
upboss2 = new QTimer;
connect(upboss2,SIGNAL(timeout()),this,SLOT(update_boss()));
upboss2->start(5500);
moveboss2 = new QTimer;
connect(moveboss2,SIGNAL(timeout()),this,SLOT(move_boss()));
moveboss2->start(20);
upboss3 = new QTimer;
connect(upboss3,SIGNAL(timeout()),this,SLOT(update_boss()));
upboss3->start(6000);
moveboss3 = new QTimer;
connect(moveboss3,SIGNAL(timeout()),this,SLOT(move_boss()));
moveboss3->start(20);
/*全图刷新*/
timer3 = new QTimer;
connect(timer3,SIGNAL(timeout()),this,SLOT(update()));
timer3->start(0);
}
void Widget::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Q:
exit(0);
break;
default:
break;
}
}
void Widget::keyReleaseEvent(QKeyEvent *event)
{
if(event->isAutoRepeat()){
return ; //检测是否自动重复按下
}
}
/*************绘制事件**************/
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
/******我的飞机设定******/
/*我的飞机边界*/
painter.drawPixmap(x_mypl,y_mypl,50,50,QPixmap(MYpl));
//painter.drawPixmap();
/*******我的子弹设定*************/
int i;
for(i=0;i<point.size();i++){
painter.drawPixmap(point.at(i).x(),point.at(i).y(),10,10,QPixmap(MYzd));
}
/*敌人飞机*/
int j;
for(j=0;j<point2.size();j++){
painter.drawPixmap(point2.at(j).x(),point2.at(j).y(),50,50,QPixmap(DIpl));//敌机
}
/*敌人子弹*/
int b;
for(b=0;b<point3.size();b++){
painter.drawPixmap(point3.at(b).x(),point3.at(b).y(),10,10,QPixmap(DIzd));
}
int k;
for(k=0;k<boss.size();k++){
painter.drawPixmap(boss.at(k).x(),boss.at(k).y(),80,40,QPixmap(":/tu/boosdaodan.png"));
}
}
void Widget::resume()
{
timer1->stop();
timer2->stop();
timer3->stop();
timer4->stop();
timer5->stop();
timer6->stop();
timer7->stop();
upboss->stop();
moveboss->stop();
upboss2->stop();
moveboss2->stop();
upboss3->stop();
moveboss3->stop();
player->pause();
replay = new QMessageBox;
replay->setWindowTitle("你被击落了!");
mark = "是否继续?您的得分为:" + QString::number(count);
replay->setText(mark);
replay->setStandardButtons(QMessageBox::Yes|QMessageBox::Close);
replay->setButtonText(QMessageBox::Yes,"是");
replay->setButtonText(QMessageBox::Close,"否");
int ret = replay->exec();
if(ret==QMessageBox::Close)
{
exit(0);
}
else
{
for(int i=0;i<point.size();i++){
point[i].setX(0);
point[i].setY(0);
}
for(int i=0;i<point2.size();i++){
point2[i].setX(900);
point2[i].setY(900);
}
for(int i =0;i<point3.size();i++){
point3[i].setX(900);
point3[i].setY(900);
}
for(int i=0;i<boss.size();i++){
boss[i].setX(-80);
boss[i].setY(940);
}
player->play();
timer1->start(50);//生产自己子弹
timer2->start(10);//移动自己子弹
timer4->start(300);//发射敌机
timer5->start(20);//移动敌机
timer6->start(1000);//发射敌机子弹
timer7->start(30);//移动敌机子弹
upboss->start(5000);
moveboss->start(30);
upboss2->start(5500);
moveboss2->start(30);
upboss3->start(6000);
moveboss3->start(30);
timer3->start(0);
count=0;
}
}
void Widget::update_boss()
{
x_boss = 900;
y_boss = rand()%height();
QPoint d(x_boss,y_boss);
boss.append(d);
}
void Widget::move_boss()
{
int j;
for(j=0;j<boss.size();j++)
{
QPoint d(25,0);
boss[j].operator -=(d);
if(boss.at(j).x()>0)
if(x_mypl+50>boss.at(j).x()&&x_mypl<boss.at(j).x()+80&&y_mypl+50>boss.at(j).y()&&y_mypl<boss.at(j).y()+40)
{
resume();//弹出消息框,选择是否继续游戏
}
if(boss.at(j).x()<=0)
{
boss.remove(j);
}
}
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
x_mypl = event->pos().x();
y_mypl = event->pos().y();
// pl.setX(x_mypl);
// pl.setY(y_mypl);
//边界判断
if(x_mypl+50 > width())
{
x_mypl = width()-50;
}
if(y_mypl+50 > height())
{
y_mypl = height()-50;
}
}
void Widget::update_dipl()
{
x_dipl = rand()%width();
y_dipl = 0;
if(x_dipl+50 > width())//出生点判断不超过右边边界
{
x_dipl = width()-50;
}
QPoint d(x_dipl,y_dipl);
point2.append(d);
}
void Widget::move_dipl()
{
int j;
for(j=0;j<point2.size();j++)
{
QPoint d(0,di_speed);
point2[j].operator +=(d);
if(point2.at(j).x()>=0&&point2.at(j).x()<=900&&point2.at(j).y()>=0)
if(abs(point2.at(j).x()-x_mypl)<50&&abs(point2.at(j).y()-y_mypl)<50)
{
resume();//弹出消息框,选择是否继续游戏
}
if(point2.at(j).y()>=900)
{
point2.remove(j);
// qDebug() << "清除:" << j;
// qDebug() << "szie" << point2.size();
}
}
}
void Widget::update_dizd()
{
/* //飞机出现即发射
x_dizd = x_dipl +20;
y_dizd = y_dipl +10;
QPoint p(x_dizd,y_dizd);
point3.append(p);
*/
//下面敌机会一直发射
//敌机子弹初始坐标
int i;
for(i=0;i<point2.size();i++){
if(point2.at(i).y()>=0&&point2.at(i).y()<900){
x_dizd = point2.at(i).x()+20;
y_dizd = point2.at(i).y()+10;
评论0