#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPainter>
#include<QDebug>
#include<QPushButton>
#include <QSound>
#include<QMenu>
#include<QMenuBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建菜单
QMenuBar *bar=new QMenuBar(this);
setMenuBar(bar);
QMenu *file1=bar->addMenu("游戏");
//菜单中添加下拉选项
QAction *file1_1=file1->addAction("重新开始");
file1->addSeparator();
QAction *file1_2=file1->addAction("退出");
connect(file1_1,&QAction::triggered,this,[=](){
int x =148;
int y = 394;
int case1_X=628;
int case1_Y=454;
m_person.setPostion(x,y);
case1.setPostion(case1_X,case1_Y);
});
connect(file1_2,&QAction::triggered,this,[=](){
MainWindow::close();
});
mainscence();
playGame();
qDebug()<<case1.m_X;
}
//设置主场景
void MainWindow:: mainscence()
{
//设置主场景的宽度和高度
setFixedSize(GAME_WIDTH,GAME_HIGHT);
//设置标题
setWindowTitle(GAME_TITLE);
//设置图标
setWindowIcon(QIcon(GAME_ICON));
//播放音乐
QSound::play(GAME_BACKGROUND);
}
//重写绘图事件
void MainWindow::paintEvent(QPaintEvent *event)
{
//定义画家
QPainter painter(this);
//绘制背景
QPixmap map;
map.load(GAME_UNDER);
painter.drawPixmap(-250,0,map);
//绘制垂直墙
QPixmap wall_1;
QPixmap wall_2;
wall_1.load(GAME_WALL_HEIGHT);
wall_2.load(GAME_WALL_HEIGHT);
painter.drawPixmap(88,94,wall_1);
painter.drawPixmap(1048,94,wall_1);
//绘制横向墙
QPixmap wall_3;
QPixmap wall_4;
wall_3.load(GAME_WALL_WIDTH);
wall_4.load(GAME_WALL_WIDTH);
painter.drawPixmap(88,94,wall_3);
painter.drawPixmap(88,634,wall_3);
//绘制障碍物
QPixmap obstruction;
obstruction.load(GAME_OBSTRUCTION);
//障碍物1
painter.drawPixmap(508,574,obstruction);
//障碍物2
painter.drawPixmap(508,514,obstruction);
//障碍物3
painter.drawPixmap(388,154,obstruction);
//障碍物4
painter.drawPixmap(388,214,obstruction);
//障碍物5
painter.drawPixmap(988,334,obstruction);
//障碍物6
painter.drawPixmap(928,334,obstruction);
//障碍物7
painter.drawPixmap(148,334,obstruction);
//障碍物8
painter.drawPixmap(208,334,obstruction);
//障碍物9
painter.drawPixmap(268,334,obstruction);
//障碍物10
painter.drawPixmap(448,334,obstruction);
//障碍物11
painter.drawPixmap(508,334,obstruction);
//障碍物12
painter.drawPixmap(568,334,obstruction);
//障碍物13
painter.drawPixmap(628,334,obstruction);
//障碍物14
painter.drawPixmap(688,334,obstruction);
//障碍物15
painter.drawPixmap(748,334,obstruction);
//障碍物16
painter.drawPixmap(148,454,obstruction);
//障碍物17
painter.drawPixmap(208,454,obstruction);
//障碍物18
painter.drawPixmap(268,454,obstruction);
//障碍物19
painter.drawPixmap(388,394,obstruction);
//障碍物20
painter.drawPixmap(448,394,obstruction);
//障碍物21
painter.drawPixmap(508,394,obstruction);
//障碍物22
painter.drawPixmap(688,394,obstruction);
//障碍物23
painter.drawPixmap(688,454,obstruction);
//画人物
painter.drawPixmap(m_person.m_X,m_person.m_Y,m_person.person);
//画箱子
painter.drawPixmap(case1.m_X,case1.m_Y,case1.Case);
//绘制目的地
QPixmap victory;
victory.load(GAME_VICTORY);
painter.drawPixmap(328,154,victory);
//绘制重新开始点
QPixmap over;
over.load(GAME_OVER);
painter.drawPixmap(988,574,over);
}
//启动游戏
void MainWindow::playGame()
{
//启动定时器
m_timer.start();
//监控定时器
connect(&m_timer,&QTimer::timeout,[=](){
//更新游戏中的坐标元素
update();//系统自带函数,作用是:更新图片的坐标,其他函数更新了坐标值,但只是改变了数,如果没有这个函数,图片的坐标就不能变成新更新的数值
});
}
//控制人物移动
void MainWindow::keyPressEvent(QKeyEvent *event)
{
int x = m_person.m_X;
int y = m_person.m_Y;
int case1_X=case1.m_X;
int case1_Y=case1.m_Y;
//重新开始游戏
if(event->key()==Qt::Key_R)
{
if(m_person.m_X==988,m_person.m_Y==574)
{
x=148;
y=394;
case1_X=628;
case1_Y=454;
}
else if(case1.m_X==988&&case1.m_Y==574)
{
x=148;
y=394;
case1_X=628;
case1_Y=454;
}
}
//上移
if(event->key()==Qt::Key_Up)
{
//人物推动箱子上移
//箱子一
if(m_person.m_Y-case1.m_Y<=60&&m_person.m_Y-case1.m_Y>=2
&&case1.m_X-m_person.m_X<=3&&0<=case1.m_X-m_person.m_X)
{
y -= GAME_SPEED ;
case1_Y-= GAME_SPEED ;
}
else {
y -= GAME_SPEED ;
}
}
//下移
if(event->key()== Qt::Key_Down)
{
//人物推动箱子下移
//箱子一
if(case1.m_Y-m_person.m_Y<=60&&case1.m_Y-m_person.m_Y>=2&&case1.m_X-m_person.m_X<=3&&0<=case1.m_X-m_person.m_X)
{
y += GAME_SPEED ;
case1_Y+= GAME_SPEED ;
}
else{
y += GAME_SPEED;
}
}
//右移
if(event->key()==Qt::Key_Right)
{
//人物推动箱子右移
//箱子一
if(case1.m_X-m_person.m_X<=60&&case1.m_X-m_person.m_X>=2&&case1.m_Y-m_person.m_Y<=3&&case1.m_Y-m_person.m_Y>=0)
{
x+=GAME_SPEED;
case1_X+=GAME_SPEED;
}
else
{x+=GAME_SPEED;}
}
//左移
if(event->key()==Qt::Key_Left)
{
//人物推动箱子左移
//箱子一
if(m_person.m_X-case1.m_X<=60&&m_person.m_X-case1.m_X>=2&&case1.m_Y-m_person.m_Y<=3&&case1.m_Y-m_person.m_Y>=0)
{
x-=GAME_SPEED;
case1_X-=GAME_SPEED;
}
else {
x-=GAME_SPEED;
}
}
//人物边界
//上界
if( y<= 154 )
{
y =154;
}
//下界
if(y>=574)
{
y = 574;
}
//右界
if(x>=988)
{
x=988;
}
//左界
if(x<=148)
{
x=148;
}
//箱子边界
//箱子一
//上界
if( case1_Y<= 154 )
{
//控制人物不能穿过箱子
if(m_person.m_Y-case1.m_Y==60&&m_person.m_X==case1.m_X)
{
y=214;
if(event->key()== Qt::Key_Down)
{
y += GAME_SPEED ;
}
}
case1_Y =154;
}
//下界
if(case1_Y>=574)
{
//控制人物不能穿过箱子
if(case1.m_Y-m_person.m_Y==60&&m_person.m_X==case1.m_X)
{
y=514;
if(event->key()== Qt::Key_Up)
{
y -= GAME_SPEED ;
}
}
case1_Y = 574;
}
//右界
if(case1_X>=988)
{
//控制人物不能穿过箱子
if(case1.m_X-m_person.m_X==60&&m_person.m_Y==case1.m_Y)
{
x=928;
if(event->key()== Qt::Key_Left)
{
x-= GAME_SPEED ;
}
}
case1_X=988;
}
//左界
if(case1_X<=148)
{
//控制人物不能穿过箱子
if(m_person.m_X-case1.m_X==60&&m_person.m_Y==case1.m_Y)
{
x=208;
评论0