QT实现简单打地鼠

#编写一简单的打地鼠游戏
设计了一个简单的打地鼠,有分数显示和难度设置

简单点说,原理就是在ui界面上将按钮当作地鼠,当点击到按钮后,按钮隐藏。将老鼠的照片作为按钮背景。
右击添加新文件,选择Qt,Qt Resource File
QT实现简单打地鼠_第1张图片在资源里添加背景:
QT实现简单打地鼠_第2张图片先添加前缀,再添加文件
里面的图片待会会用到
QT实现简单打地鼠_第3张图片代码如下:
直接粘代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
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();
        }
}

剩余地鼠槽函数同理

效果如图:
QT实现简单打地鼠_第4张图片QT实现简单打地鼠_第5张图片

你可能感兴趣的:(QT实验,qt,c++)