代码拉取完成,页面将自动刷新
#include "widget.h"
#include "ui_widget.h"
#include"QFileDialog"
#include<QPainter>//画家的头文件
#include"QRect"
#include<QKeyEvent>
#include"qtimer.h"
#include"qpushbutton.h"
#include"gamemap.h"
#include"QMessageBox"
#include"QMouseEvent"
#include"qaudiooutput.h"
#include"qslider.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowIcon(QIcon(":/image/Man.png"));
//音频相关
mmedia=new QMediaPlayer(this);
audiooutput=new QAudioOutput(this);
mmedia->setAudioOutput(audiooutput);
s=new QSlider(this);
s->setMaximum(100);
s->setMinimum(0);
s->setValue(50);
s->move(740,390);
mmedia->setAudioOutput(audiooutput);
mmedia ->setLoops(-1);
audiooutput->setVolume(0.5);
connect(s,&QSlider::valueChanged,audiooutput,[this](){audiooutput->setVolume(s->value()/100.0);});
QFont f1("宋体",13);
but7=new QPushButton(this);
but7->setText("播放音乐");
but7->move(800,350);
but7->resize(100,50);
but7->setFont(f1);
connect(but7,&QPushButton::clicked,mmedia,&QMediaPlayer::play);
but6=new QPushButton(this);
but6->setText("关闭音乐");
but6->move(800,430);
but6->resize(100,50);
but6->setFont(f1);
connect(but6,&QPushButton::clicked,mmedia,&QMediaPlayer::stop);
this->setFocusPolicy(Qt::StrongFocus);
//初始化地图元素
mPMap=new gamemap(this);
mMapPainter=new QPainter(this);//创建画家
mRole=new Role(this);
mTimer=new QTimer(this);
mTimer->start(100);
startgame(0);
but=new QPushButton(this);
but->setText("第一关");
but->move(100,0);;
connect(but,&QPushButton::clicked,this,[this](){this->startgame(1);
mRole->resetPos();
});
but1=new QPushButton(this);
but1->setText("第二关");
but1->move(200,0);
connect(but1,&QPushButton::clicked,this,[this](){this->startgame(2);
mRole->resetPos();});
but3=new QPushButton(this);
but3->setText("第三关");
but3->move(300,0);
connect(but3,&QPushButton::clicked,this,[this](){this->startgame(3);
mRole->resetPos();});
but4=new QPushButton(this);
but4->setText("自选关卡");
but4->move(400,0);
connect(but4,&QPushButton::clicked,this,[this](){this->startgame(4);
mRole->resetPos();});
but2=new QPushButton(this);
//QIcon icon(":/Icon/eggshell.png");
//but2->setIcon(icon);
but2->setStyleSheet("background-image:url(:/Icon/eggshell.png);border:0px");
but2->move(600,540);
connect(but2,&QPushButton::clicked,this,[this](){this->startgame(5);
mRole->resetPos();});
but5=new QPushButton(this);
but5->setText("退出游戏");
but5->resize(100,50);
but5->move(800,510);
but5->setFont(f1);
connect(but5,&QPushButton::clicked,this,[this](){this->close();});
but8=new QPushButton(this);
but8->move(800,270);
but8->resize(100,50);
but8->setText("自制地图");
but8->setFont(f1);
connect(but8,&QPushButton::clicked,this,[this](){this->w->show();});
//定时调用更新函数
connect(mTimer,&QTimer::timeout,[this](){this->update();});//计时器每完成一次,就update一下
setFixedSize(1140,720);
this->update();
}
Widget::~Widget()
{
delete audiooutput;
delete mRole;
delete mTimer;
delete mmedia;
delete s;
delete ui;
delete w;
delete but;
delete but1;
delete but2;
delete but3;
delete but4;
delete but5;
delete but6;
delete but7;
delete but8;
}
void Widget::paintEvent(QPaintEvent *event)
{
mMapPainter->begin(this);//设置画布
//绘制背景
QPainter BackgroundPainter(this);
BackgroundPainter.drawImage(QRect(0,0,1140,720),QImage("://image/background.jpg"));
//画地图
mPMap->Paint(mMapPainter,QPoint(160,160));
//画人物
mRole->Paint(mMapPainter,QPoint(160,160));
QPainter painter(this);
painter.setPen(Qt::black);
painter.setFont(QFont("华文行楷",12));
painter.drawText(715,380,"音量调节");
mMapPainter->end();//结束
}
void Widget::Collision(int dRow,int dCol)
{
//判断位置
int newRow=mRole->mRow+dRow;
int newCol=mRole->mCol+dCol;
//前方是障碍物
if(mPMap->mparr[newRow][newCol]!=Road&&mPMap->mparr[newRow][newCol]!=target&&mPMap->mparr[newRow][newCol]!=correct&&mPMap->mparr[newRow][newCol]!=Box)
{
return;
}
else if(mPMap->mparr[newRow][newCol]==Box)//如果角色的前方是箱子或是放在正确位置的箱子
{
if(mPMap->mparr[newRow+dRow][newCol+dCol]==Road)
{
//移动箱子,改变地图
mPMap->mparr[newRow+dRow][newCol+dCol]=Box;
mPMap->mparr[newRow][newCol]=Road;
}
else if(mPMap->mparr[newRow+dRow][newCol+dCol]==target)
{
//移动箱子,改变地图
mPMap->mparr[newRow+dRow][newCol+dCol]=correct;
mPMap->mparr[newRow][newCol]=Road;
}
else
{
return;
}
}
else if(mPMap->mparr[newRow][newCol]==correct)
{
if(mPMap->mparr[newRow+dRow][newCol+dCol]==Road)//箱子的前方是路
{
//移动箱子,改变地图
mPMap->mparr[newRow+dRow][newCol+dCol]=Box;
mPMap->mparr[newRow][newCol]=target;
}
else if(mPMap->mparr[newRow+dRow][newCol+dCol]==target)//箱子的前方是目标点
{
//移动箱子,改变地图
mPMap->mparr[newRow+dRow][newCol+dCol]=correct;
mPMap->mparr[newRow][newCol]=target;
}
else
{
return;
}
}
//否则移动
mRole->Move(dRow,dCol);
}
void Widget::keyPressEvent(QKeyEvent* event)
{
switch(event->key())
{
case Qt::Key_W:
case Qt::Key_Up:
{
//逻辑碰撞检测函数
Collision(-1,0);
break;
}
case Qt::Key_S:
case Qt::Key_Down:
{
//逻辑碰撞检测函数
Collision(1,0);
break;
}
case Qt::Key_A:
case Qt::Key_Left:
{
//逻辑碰撞检测函数
Collision(0,-1);
break;
}
case Qt::Key_D:
case Qt::Key_Right:
{
//逻辑碰撞检测函数
Collision(0,1);
break;
}
}
mPMap->win();
}
//鼠标事件函数
void Widget::mouseDoubleClickEvent(QMouseEvent*event)
{
if(event->button()==Qt::LeftButton)
Collision(0,-1);
else if(event->button()==Qt::RightButton)
Collision(0,1);
mPMap->win();
}
void Widget::wheelEvent(QWheelEvent *event)
{
if(event->angleDelta().y()>0)
Collision(-1,0);
else if(event->angleDelta().y()<0)
Collision(1,0);
mPMap->win();
}
//关卡选择函数
void Widget::startgame(int x)
{
QFile f0("./Map/lv0.txt");
QFile f1("./Map/lv1.txt");
QFile f2("./Map/lv2.txt");
QFile f3("./Map/lv3.txt");
QFile f4("./Map/shell.txt");
if(x==1)
{
mPMap->Inital(f1.fileName());
mmedia->setSource(QUrl("qrc:/media/m1.mp3"));
}
else if(x==2)
{
mPMap->Inital(f2.fileName());
mmedia->setSource(QUrl("qrc:/media/m2.mp3"));
}
else if(x==0)
{
mPMap->Inital(f0.fileName());
mmedia->setSource(QUrl("qrc:/media/m0.mp3"));
}
else if(x==5)
{
QMessageBox::information(nullptr,"彩蛋","你太仔细了!这是隐藏地图,可千万不要告诉别人!");
mmedia->setSource(QUrl("qrc:/media/m5.mp3"));
mPMap->Inital(f4.fileName());
//待定的彩蛋
}else if(x==3)
{
mPMap->Inital(f3.fileName());
mmedia->setSource(QUrl("qrc:/media/m3.mp3"));
}
else if(x==4)
{
QString fileName=QFileDialog::getOpenFileName(this,"打开地图","./","*.txt");
mmedia->setSource(QUrl("qrc:/media/m4.mp3"));
mPMap->Inital(fileName);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。