#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<QDebug>
#include<QString>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setFixedSize(700, 600);//设置画面大小
setWindowTitle(tr("黄金矿工"));//设置程序名
QPixmap pixmap(":/images/iii/ccc.png");//自定义指针
QCursor cursor= QCursor(pixmap,-1,-1);
setCursor(cursor);
interval_angle=15;
interval_miner=200;
miner=new Miner;
map=new Map;
QPalette pal;
pal.setColor(QPalette::WindowText, Qt::yellow);//设置窗口前景色 为yellow
ui->label_final->setPalette(pal);//设置颜色
this->setStyleSheet("#MainWindow{border-image:url(:/images/iii/background.jpg);}");//设置背景图片
pix.load("://images//iii//hook1.png");//设置钩子,60*50
timer_angle.setInterval(interval_angle);//设置触发间隔为15ms
connect(&timer_angle,&QTimer::timeout,this,&MainWindow::rotate);//链接
connect(&timer_angle,&QTimer::timeout,this,&MainWindow::ss);
timer_s.setInterval(interval_miner);//s控制矿工的运动
connect(&timer_s,&QTimer::timeout,this,&MainWindow::mm);
timer_clock.setInterval(1000);
connect(&timer_clock,&QTimer::timeout,this,&MainWindow::timereduce);
rad=180/3.1415926;//弧度
angle_change=1;//角度转变量为1°
lable[0]=ui->label_1;lable[1]=ui->label_2;lable[2]=ui->label_3;
lable[3]=ui->label_4;lable[4]=ui->label_5;lable[5]=ui->label_6;
lable[6]=ui->label_7;lable[7]=ui->label_8;lable[8]=ui->label_9;
lable[9]=ui->label_10;//钻石
lable[10]=ui->label_11;lable[11]=ui->label_12;lable[12]=ui->label_13;//11为加速,12减速,13加时间
lable[13]=ui->label_14;//大钻石
lable[14]=ui->label_15;//随机物品
init();
do_stop();//暂停,跳出帮助菜单
ui->label_pause->setVisible(false);//暂停图案
ui->toolButton_ppause->setVisible(false);
ui->label_begin->setVisible(true);
ui->toolButton_start->setVisible(true);
}
void MainWindow::init()//初始化 加载一些内容
{
//音乐、音效、电影片段 以提前放入resources中。
//导入Resources方法:https://www.cnblogs.com/wangcb/p/6642510.html?utm_source=itdadao&utm_medium=referral
player->setMedia(QUrl("qrc:/musicss/ii/sound.mp3"));
player->setVolume(50);
player->play();
//加载音乐
player1->setMedia(QUrl("qrc:/musicss/ii/ss.mp3"));
player1->setVolume(100);
//加载音效
player2->setMedia(QUrl("qrc:/musicss/ii/get.mp3"));
player2->setVolume(100);
//加载音效
player3->setMedia(QUrl("qrc:/musicss/ii/special.mp3"));
player3->setVolume(100);
//加载音效
player4->setMedia(QUrl("qrc:/musicss/ii/money.mp3"));
player4->setVolume(50);
//加载音效
player5->setMedia(QUrl("qrc:/musicss/ii/endless.mp3"));
player5->setVolume(50);
//加载音效
movie->setVideoOutput(videoWidget);
movie->setMedia(QUrl("qrc:/moviess/i/ReadyPlayerOne.mp4"));
movie->setVolume(100);
//加载影片
videoWidget->setFixedWidth(1920);
videoWidget->setWindowTitle(tr("ReadyPlayerOne"));
//设置影片的分辨率 及影片窗口的名字
ui->label_pause->setVisible(false);//暂停图案
ui->toolButton_ppause->setVisible(false);
ui->label_finish->setVisible(false);//结束图案
ui->toolButton_restart->setVisible(false);//重新开始图案
ui->toolButton_cancel->setVisible(false);//
ui->label_final->setVisible(false);
ui->lcdNumber_speed->setVisible(false);
miner->init();//矿工初始化设置 实体类函数调用
map->init();//地图初始化设置 实体类函数调用
time_left=60;//剩余时间为60s
time=time_up=time_down=0;
k=1;
for(int i=0;i<6;i++)
{
lable[i]->setVisible(true);
lable[i]->move(map->get_point(i));
if(i<2)
lable[i]->resize(140,120);
else
lable[i]->resize(60,50);
}
for(int i=6;i<15;i++)//让随机矿石不可见
lable[i]->setVisible(false);
ui->toolButton->setStyleSheet("#toolButton{border-image:url(:/images/iii/1.png);}");//设置矿工
ui->lcdNumber->display(time_left);//显示剩余时间
ui->lcdNumber_sum->display(miner->get_sum());//显示当前分数
timer_angle.start();//计时器启动
timer_clock.start();
timer_s.start();
}
void MainWindow::paintEvent(QPaintEvent *)//画线操作
{
QPainter painter(this);
painter.translate(350,120-20); //让图片的中心作为旋转的中心
painter.rotate(miner->get_angle()); //顺时针旋转90度
painter.translate(-350,-100); //使原点复原
int length=miner->get_length();
if(miner->isrotating()==false||miner->isstopped())
{
QPen pen;
pen.setWidth(6);
painter.setPen(pen);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.drawLine(350,95,350,95+length);
painter.drawPixmap(320,95+length,pix);//绘图的起点
}
else
painter.drawPixmap(320,95,pix);//绘图的起点
update();//强制程序重新绘制界面
}
void MainWindow::keyPressEvent(QKeyEvent *e)//键盘事件操作
{
int key=e->key();
if (!miner->isstopped()&&key == Qt::Key_Down) // 按向下方向键时
{
if(miner->isrotating())//如果正在旋转
{
//停止旋转,进行下拉操作
miner->set_is_rotating(false);
ss();
player1->play();
}
}
if(key == Qt::Key_Space)//空格键 暂停功能
{
if(miner->isstopped()&&time_left>0)
resume();
else{
do_stop();
}
}
if(key == Qt::Key_Up&&!miner->isgrab()){//方向键↑ 收钩
if(miner->get_length()>0&&miner->get_speed()>0){
miner->set_speed(-1*(miner->get_speed()));
}
}
if(key==Qt::Key_Z){//Z键进入 AmazingCrazy模式
interval_angle=6;
time_left=100;
player->stop();
player1->stop();
player2->stop();
player3->stop();
player5->play();
AmazingCrazy=true;
}
if(key==Qt::Key_Right)//方向键→ 减少时间 方便调试
{
time_left=time_left-1;
}
if(key==Qt::Key_Left)//方向键← 增加时间 方便调试
{
time_left=time_left+1;
}
}
bool MainWindow::detection()//碰撞和越界检测
{
//定义临时变量angle和length
int angle=miner->get_angle();
int length=miner->get_length();
if(fabs(angle)>45){
if(length>(350/(sin(fabs(angle/rad)))))
return true;
}
else if(length>(500/(cos(angle/rad))))
return true;
if(map->detection(350-length*sin(angle/rad),95+length*cos(angle/rad)))//如果map.碰撞检测返回为真
{
miner->set_is_grab(true);
return true;
}
return false;
}
void MainWindow::do_stop()
{
if(AmazingCrazy){
player5->pause();
}
else{
player->pause();
}
if(time_left>0){
ui->label_pause->setVisible(true);//暂停图案
ui->toolButton_ppause->setVisible(true);
}
miner->set_is_rotating(!(miner->isrotating()));
timer_clock.stop();
timer_angle.stop();
timer_s.stop();
miner->set_stopped(true);
}
void MainWindow::resume()
{
if(AmazingCrazy){
player5->play();
}else{
player->play();
}
ui->label_pause->setVisible(false);//暂停图案
ui->toolButton_ppause->setVisible(false);
// ui->toolButton_mpause->setVisible(false);
// ui->toolButton_mplay->setVisible(false);
QT5 黄金矿工 游戏开发
需积分: 50 127 浏览量
2019-07-22
16:26:26
上传
评论 8
收藏 127.69MB ZIP 举报
大茶猪
- 粉丝: 11
- 资源: 1
最新资源
- zephyr sdk package 2
- zephyr sdk package 1
- optimization.ipynb
- 数据库标识码BSM重排序工具、重构标识码工具
- 基于C语言的校园导航系统报告.doc
- __init__.py
- tensorflow-gpu-2.6.5-cp39-cp39-manylinux2010-x86-64.whl
- tensorflow-rocm-2.13.1.600-cp38-cp38-manylinux2014-x86-64.whl
- tensorflow-rocm-2.13.0.570-cp311-cp311-manylinux2014-x86-64.whl
- 3ds_1.0_3.6.ipa
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0