QT实现简单打地鼠
作者:互联网
#编写一简单的打地鼠游戏
设计了一个简单的打地鼠,有分数显示和难度设置
简单点说,原理就是在ui界面上将按钮当作地鼠,当点击到按钮后,按钮隐藏。将老鼠的照片作为按钮背景。
右击添加新文件,选择Qt,Qt Resource File
在资源里添加背景:
先添加前缀,再添加文件
里面的图片待会会用到
代码如下:
直接粘代码:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
#include <QSpinBox>
#include <QWidget>
#include <QMessageBox>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QTimer *timer1;//定时器
int score,game_flag,value;//socre为得分,game_flag为1时游戏开始,为0时游戏关闭,value为难度
private slots:
void SetTimer();
void on_gameStart_clicked();//开始按钮槽函数
void on_gamePause_clicked();//暂停按钮槽函数
void on_gameStop_clicked();//结束按钮槽函数
void on_mouse_1_clicked();
void on_mouse_2_clicked();
void on_mouse_3_clicked();
void on_mouse_4_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
.cpp文件:
ui->setupUi(this);
//定时器初始化
QTimer *timer1=new QTimer(this);
connect(timer1,SIGNAL(timeout()),this,SLOT(SetTimer()));
timer1->start(1000);
score=0;
game_flag=0;//等于0时表示游戏未开始,等于1时表示游戏开始
//将图片放入到按钮中,并且图片随按钮大小变化相适应
ui->mouse_1->setStyleSheet("QPushButton{border-image:url(:/mouse/laoshu.jpeg)5 5 5 5}");
ui->mouse_2->setStyleSheet("QPushButton{border-image:url(:/mouse/laoshu.jpeg)5 5 5 5}");
ui->mouse_3->setStyleSheet("QPushButton{border-image:url(:/mouse/laoshu.jpeg)5 5 5 5}");
ui->mouse_4->setStyleSheet("QPushButton{border-image:url(:/mouse/laoshu.jpeg)5 5 5 5}");
ui->mouse_1->hide();
ui->mouse_2->hide();
ui->mouse_3->hide();
ui->mouse_4->hide();
ui->gamePause->setEnabled(false);//游戏未开始时暂停功能不可以
int nMin = 1;
int nMax = 4;
int nSingleStep = 1;
ui->pSpinBox->setPrefix("level");
ui->pSpinBox->setMinimum(nMin); // 最小值
ui->pSpinBox->setMaximum(nMax); // 最大值
ui->pSpinBox->setSingleStep(nSingleStep);//
定时器槽函数:
void MainWindow::SetTimer()
{
value=ui->pSpinBox->value();
if(game_flag==1){
int xx=qrand()%200;
int yy=qrand()%200;
ui->mouse_1->setGeometry(30+xx,30+yy,80,80);
int aa=qrand()%200;
int bb=qrand()%200;
ui->mouse_2->setGeometry(30+aa,30+bb,80,80);
int cc=qrand()%200;
int dd=qrand()%200;
ui->mouse_3->setGeometry(30+cc,30+dd,80,80);
int ee=qrand()%200;
int ff=qrand()%200;
ui->mouse_4->setGeometry(30+ee,30+ff,80,80);
//不同的难度等级有不同数量的地鼠出现
if(value==1){
ui->label_showhard->setText("easy");
ui->mouse_1->show();
ui->mouse_2->hide();
ui->mouse_3->hide();
ui->mouse_4->hide();
}else if(value==2){
ui->label_showhard->setText("normal");
ui->mouse_1->show();
ui->mouse_2->show();
ui->mouse_3->hide();
ui->mouse_4->hide();
}else if(value==3){
ui->label_showhard->setText("hard");
ui->mouse_1->show();
ui->mouse_2->show();
ui->mouse_3->show();
ui->mouse_4->hide();
}else if(value==4){
ui->label_showhard->setText("very hard");
ui->mouse_1->show();
ui->mouse_2->show();
ui->mouse_3->show();
ui->mouse_4->show();
}
}
}
开始按钮槽函数:
void MainWindow::on_gameStart_clicked()
{
game_flag=1;
score=0;
ui->lcdNumber->display(score);
ui->gamePause->setEnabled(true);
}
暂停按钮:
void MainWindow::on_gamePause_clicked()
{
if(game_flag)
{
game_flag=0;
}
else
{
game_flag=1;
}
}
停止按钮
void MainWindow::on_gameStop_clicked()
{
game_flag=0;//游戏停止
if(score>50){//分数大于50时,弹窗good
QMessageBox::about(this," ","good!");
}else if(score>100){//分数大于100时,弹窗perfect
QMessageBox::about(this," ","perfect!");
}
this->score=0;//分数置零
ui->lcdNumber->display(this->score);
//地鼠隐藏
ui->mouse_1->hide();
ui->mouse_2->hide();
ui->mouse_3->hide();
ui->mouse_4->hide();
ui->gamePause->setEnabled(false);
}
每打击到一个地鼠时,分数加10,只有游戏开始时才有效
地鼠按钮槽函数:
void MainWindow::on_mouse_1_clicked()
{
if(game_flag==1){
this->score+=10;
ui->lcdNumber->display(this->score);
ui->mouse_1->hide();
}
}
剩余地鼠槽函数同理
效果如图:
标签:hide,QT,int,void,地鼠,ui,简单,clicked,mouse 来源: https://blog.csdn.net/qq_45468597/article/details/112062329