#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);
ui->label_final->setPalette(pal);
//ui->lcdNumber->setPalette(pal);
//ui->lcdNumber_sum->setPalette(pal);
// ui->lcdNumber_speed->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;//随机物品
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()
{
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<14;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);
}
}
if(key==Qt::Key_Space)//暂停功能
{
if(miner->isstopped()&&time_left>0)
resume();
else
do_stop();
}
}
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(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()
{
ui->label_pause->setVisible(false);//暂停图案
ui->toolButton_ppause->setVisible(false);
miner->set_is_rotating(!(miner->isrotating()));
timer_clock.start();
timer_angle.start();
timer_s.start();
miner->set_stopped(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timereduce()//计时器
{
if(time_left>=0)
{
time++;
ui->lcdNumber->display(time_left--);
if(time_down==0&&time_up==0)
{
k=1;
timer_s.setInterval(interval_miner);
timer_angle.setInterval(interval_angle);
// ui->lcdNumber_speed->setVisible(false);
}
if(time_down)
{
k=1;
--time_down;
//ui->lcdNumber_speed->setVisible(true);
//ui->lcdNumber_speed->display(time_down);
}
if(time_up)
{
--time_up;
k=3;
//ui->lcdNumber_speed->setVisible(true);
// ui->lcdNumber_speed->display(time_up);
}
if(time%8==0)//每8秒,随机生成矿石一次
{
map->rrand();
for(int i=6;i<14;i++)
if(map->is_visible(i))//如果该物体可见
{
lable[i]->setVisible(true);
lable[i]->move(map->get_point(i));
}
}
}
if(time_left<0)//剩余时间为0,则停止游戏
{
do_stop();
ui->label_finish->setVisible(true);
ui->toolButton_cancel->setVisible(true);
ui->toolButton_restart->setVisible(true);
ui->label_final->setVisible(true);
QString s = QString::number(miner->get_sum(), 10);
ui->label_final->setText(s);
}
}
void MainWindow::rotate()//控制旋转
{
if(miner->isrotating())//旋转时
{
miner->change_angle(angle_change);
int angle=miner->get_angle();
if(angle>=90||angle<=-90)
angle_change*=-1;
}
update();
}
void MainWindow::mm()//矿工动作设置
{
if(!miner->isrotating())
{
if(miner->isfflag())//矿工的动作设置
ui->toolButton->setStyleSheet("#toolButton{border-image:url(:/images/iii/2.png);}");
else
ui->toolButton->setStyleSheet("#toolButton{border-image:url(:/images/iii/3.png);}");
}
}
void MainWindow::ss()//伸展操作
{
if(!miner->isrotating())
{
if(miner->isgrab())//物体的移动
{
没有合适的资源?快使用搜索试试~ 我知道了~
基于QT5的简化版黄金矿工
共45个文件
png:24个
cpp:6个
h:6个
5星 · 超过95%的资源 需积分: 49 154 下载量 52 浏览量
2015-11-21
21:40:59
上传
评论 14
收藏 25.22MB ZIP 举报
温馨提示
初学C++时的课程作业,内附演示视频。游戏包含加速、减速药水等小道具,而且每隔一段时间地图上会随机生成矿石水晶或道具,个人认为还是挺有趣的。内部所有代码均为原创(瞎编),用到的图像也均由组员亲手绘制。但是存在一个严重的缺陷即代码结构混乱,除了几个类,其余的代码统统挤在mainwindow里面。有兴趣的朋友可以下过去看看玩玩。
资源推荐
资源详情
资源评论
收起资源包目录
黄金矿工.zip (45个子文件)
kuanggong_rc
mianer.cpp 1KB
item.h 946B
mainwindow.ui 15KB
myicon.rc 40B
1.ico 422KB
item_big.h 115B
kuanggong_rc.pro 530B
kuanggong_rc.pro.user 18KB
image.qrc 996B
mainwindow.cpp 11KB
Item.cpp 887B
item_small.h 171B
map.cpp 3KB
main.cpp 456B
miner.h 1KB
mainwindow.h 2KB
iii
restart.png 77KB
time.png 26KB
icon.png 56KB
3.png 27KB
reset.png 28KB
hook1.png 7KB
small.png 27KB
ccc.png 6KB
begin.png 977KB
start.png 67KB
-.png 35KB
1.png 27KB
2.png 26KB
background.png 1.78MB
bag.png 34KB
title-time.png 60KB
background.jpg 683KB
title-money.png 59KB
a.png 27KB
finish.jpg 278KB
cancle.png 71KB
big.png 39KB
pause.png 298KB
+.png 36KB
ppause.png 53KB
diamond.png 65KB
map.h 834B
item_small.cpp 208B
实测视频.mp4 20.86MB
共 45 条
- 1
资源评论
- zhilinwang2019-09-04不错 ,不错 ,休闲小游戏 ,初学者可做参考 ,支持一下
- txl198810192019-07-23还不错,支持一下
- 爽弯弯!2019-06-28非常不错,值得下载。没事的时候可以耍耍^_^
- qq_330267812015-11-22效果还可以,代码注释挺多,我来返分:)
MADAO__G
- 粉丝: 66
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功