#include "playplane.h"
#include<QDebug>
#include "config.h"
#include<QMenuBar>
#include<QPainter>
#include"mypushbutton.h"
#include"ChooseLeveIScene.h"
#include<QDebug>
#include<QPushButton>
#include<QLabel>
#include<QSound>
#include<QMouseEvent>
#include<QMessageBox>
playplane::playplane(int index)
{
//数据库
//shujuku();
this->levelIndex=index;
qDebug()<<"您选择了第"<<this->levelIndex<<"个游戏";
if(levelIndex==1)
{
}
else if(levelIndex==2)
{
//正常模式下初始化子弹发射间隔
m_hero.BULLET_INTERVAL=20;
//调用初始化场景
initscene();
//启动游戏
playGame();
}
else if(levelIndex==3)
{
//开挂模式下初始化子弹发射间隔
m_hero.ft=1;
m_hero.BULLET_INTERVAL=2;
//调用初始化场景
initscene();
//启动游戏
playGame();
}
}
//数据库
void playplane::shujuku()
{
//简历数据库
QSqlDatabase database;
if (QSqlDatabase::contains("qt_sql_default_connection"))
{
database = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
database.setUserName("XingYeZhiXia");
database.setPassword("123456");
}
//打开数据库
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
// do something
}
//创建表
QSqlQuery sql_query;
QString create_sql = "create table student (id int primary key, name varchar(30), score int)";
sql_query.prepare(create_sql);
if(!sql_query.exec())
{
qDebug() << "Error: Fail to create table." << sql_query.lastError();
}
else
{
qDebug() << "Table created!";
}
}
//初始化
void playplane::initscene()
{
//设置尺寸
this->setFixedSize(GAME_WIDTH,GAME_HEIGHT);
//设置标题
this->setWindowTitle("飞机大战V2.0");
//加载图标
this->setWindowIcon(QIcon(GAME_ICON));
//定时器设置
m_Timer.setInterval(GAME_RATE);
//敌机出场时间间隔 初始化
m_recorder=0;
//初始化子弹间隔
mh_recorder=0;
//初始化得分
my_score=0;
//随机数种子
srand((unsigned int)time(NULL));
//计分牌
//设定标签样式
life=new QLabel(this);
score=new QLabel(this);
life->setFont(QFont("Algerian",11));
life->setStyleSheet(
"QLabel{background:transparent;color:red;}");
life->move(0,50);
score->setFont(QFont("Algerian",15));
score->setStyleSheet(
"QLabel{background:transparent;color:orange;}");
score->move(1,1);
//score->adjustSize();
// labeltext= new QLabel(tr("得分"));
// QFont ft;
// ft.setPointSize(20);
// labeltext->setFont(ft);
// QPalette palette;
// palette.setColor(QPalette::WindowText, Qt::blue);
// labeltext->setPalette(palette);
// labeltext->setParent(this);
// labeltext->move(5,-210);
//返回按钮
MyPushButton *backBtn=new MyPushButton(CHOOSE_BK,CHOOSE_BK);
backBtn->setParent(this);
backBtn->move(this->width()-backBtn->width(),backBtn->height()-28);
connect(backBtn,&MyPushButton::clicked,[=](){
dianji3->play();
bgm->stop();
qDebug()<<"发送返回选关信号";
emit this->playplaneback();
});
}
void playplane::playGame()
{
//启动背景音乐
bgm = new QSound(SOUND_BACKROUND);
bomb_1 = new QSound(SOUND_BOMB);
dianji3= new QSound(SOUND_DIANJI);
bgm->play();
bgm->setLoops(-1);
//启动定时器
m_Timer.start();
//监听定时器发送的信号
connect(&m_Timer,&QTimer::timeout,[=](){
if(m_hero.life>0){
//敌机出场
enemToScene();
//更新游戏中元素坐标
updatePosition();
//绘制到屏幕中
update();
//碰撞检测
collisionDetection();
}
else
{
life->setText(QString(LIFE).arg(m_hero.life)); //随时更新相关信息
life->adjustSize();
score->setText(QString(SCORE).arg(my_score));
score->adjustSize();
bgm->stop();
//弹出失败的对话框
QMessageBox MBox;
MBox.setWindowTitle("游戏结束");
//Qstring st;
MBox.setText(QString("本次得分%1\n,请点击“退出”").arg(my_score));
MBox.setIconPixmap(QPixmap(GAME_OVER));
QPushButton *agreeBut = MBox.addButton("退出", QMessageBox::AcceptRole);
MBox.exec();
if (MBox.clickedButton() == (QAbstractButton*)agreeBut) {
//在 Qt Creator 的输出窗口中输出指定字符串
qDebug() << "用户点击了同意按钮";
emit this->playplaneback();
}
}
});
}
void playplane::paintEvent(QPaintEvent *)
{
QPainter painter(this);//当前屏幕中画画
//绘制地图
painter.drawPixmap(0,m_map.m_map1_posY,m_map.m_map1);
painter.drawPixmap(0,m_map.m_map2_posY,m_map.m_map2);
//绘制飞机
painter.drawPixmap(m_hero.m_X,m_hero.m_Y,m_hero.m_plane);
//绘制子弹
for(int i=0;i<BULLET_NUM;i++)
{
//qDebug()<<"开始绘制子弹1";
//非空闲则绘制
if(m_hero.m_bullets[i].m_Free==false){
//qDebug()<<"开始绘制子弹2"<<i;
painter.drawPixmap(m_hero.m_bullets[i].m_X,m_hero.m_bullets[i].m_Y,m_hero.m_bullets[i].m_Bullet);
}
}
//painter.drawPixmap(m_hero.m_bullets[101].m_X,m_hero.m_bullets[101].m_Y,m_hero.m_bullets[101].m_Bullet);
//绘制敌机
for(int i=0;i<ENEMY_NUM;i++)
{
if(m_enemys[i].m_Free==false){
if(m_enemys[i].m_Y>GAME_HEIGHT+m_enemys[i].m_Rect.height()-10)
{
m_hero.life--;
}
painter.drawPixmap(m_enemys[i].m_X,m_enemys[i].m_Y,m_enemys[i].m_enemy);
}
}
//绘制爆炸
for(int i=0;i<BOMB_NUM;i++)
{
if(m_bombs[i].m_Free==false)
{
painter.drawPixmap(m_bombs[i].m_X,m_bombs[i].m_Y,m_bombs[i].m_pixArr[m_bombs[i].m_index]);
}
}
//测试子弹
// painter.drawPixmap(temp_Buller.m_X,temp_Buller.m_Y,temp_Buller.m_Bullet);
}
void playplane::updatePosition()
{
life->setText(QString(LIFE).arg(m_hero.life)); //随时更新相关信息
life->adjustSize();
score->setText(QString(SCORE).arg(my_score));
score->adjustSize();
//更新地图的坐标
m_map.mapPosition();
//发射子弹
//m_hero.shoot();
//计算非空闲子弹的坐标
for(int i=0;i<BULLET_NUM;i++)
{
if(m_hero.m_bullets[i].m_Free==0)
{
m_hero.m_bullets[i].updatePosition();
}
}
//测试子弹
//temp_Buller.m_Free=false;
//temp_Buller.updatePosition();
//敌机出场
for(int i=0;i<ENEMY_NUM;i++)
{
if(m_enemys[i].m_Free==false)
{
m_enemys[i].updateposition();
}
}
//计算爆炸播放的图片
for(int i = 0 ; i < BOMB_NUM;i++)
{
if(m_bombs[i].m_Free == false)
{
m_bombs[i].updateInfo();
}
}
}
void playplane::mouseMoveEvent(QMouseEvent *event)
{
if(m_hero.life>0){
int x=event->x()-m_hero.m_Rect.width()*0.5;
int y=event->y()-m_hero.m_Rect.height()*0.5;
//边界检测
if(x<=0)
{
x=0;
}
if(x>=GAME_WIDTH-m_hero.m_Rect.width())
{
x=GAME_WIDTH-m_hero.m_Rect.width();
}
if(y<=0)
{
y=0;
}
if(y>=GAME_HEIGHT-m_hero.m_Rect.height())
{
没有合适的资源?快使用搜索试试~ 我知道了~
基于Qt开发平台开发的电脑端飞机大战游戏
共69个文件
png:23个
h:13个
cpp:13个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 20 浏览量
2024-03-29
11:36:08
上传
评论
收藏 67.65MB ZIP 举报
温馨提示
该项目是基于Qt开发平台开发的电脑端飞机大战游戏
资源推荐
资源详情
资源评论
收起资源包目录
qt-aircrar.zip (69个子文件)
qt-aircraft
bullet.cpp 727B
playplane.cpp 13KB
bomb.h 486B
lgoin.cpp 4KB
mypushbutton.h 532B
signup.cpp 3KB
mainwindow.h 736B
enemplane.h 394B
signup.ui 4KB
mainwindow.cpp 3KB
lgoin.ui 4KB
gameBOX.pro 1KB
bomb.cpp 771B
res
chose_bk.png 4KB
start2.png 475KB
lgoin_back.png 837KB
diji2.png 22KB
diji3.png 9KB
bomb.wav 117KB
chose2.wav 3.36MB
bomb2-1.png 11KB
chosebgm.wav 24.04MB
zidan.png 4KB
logo.png 28KB
dianji.wav 383KB
bk.tga 13KB
passwd-focus.png 564B
startBtn.png 8KB
map.jpg 388KB
begin.wav 3.36MB
choosebtn.png 29KB
chosebox.jpg 7KB
lgion_back.wav 16.86MB
bomb2-3.png 9KB
applogo.png 26KB
bomb2-2.png 11KB
bomb2-4.png 9KB
zidan3.png 1KB
chosebtn.png 3KB
over2.jpg 5KB
xuanguan1.jpg 7.04MB
bk.png 4KB
bj.wav 9.82MB
chose_he.gif 4.18MB
chooseback.png 41KB
bomb2-5.png 3KB
feiji2.png 13KB
username-focus.png 1019B
csbtn.png 8KB
lgoin.h 882B
main.cpp 162B
map.h 359B
map.cpp 559B
config.h 3KB
mypushbutton.cpp 3KB
mainwindow.ui 4KB
playplane.h 2KB
gameBOX.pro.user 19KB
heroplane.cpp 1KB
about.h 614B
chooseleveiscene.h 681B
res.qrc 1KB
about.ui 7KB
heroplane.h 585B
signup.h 629B
about.cpp 872B
bullet.h 421B
chooseleveiscene.cpp 8KB
enemplane.cpp 663B
共 69 条
- 1
资源评论
薪薪代码
- 粉丝: 2w+
- 资源: 265
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功