QT-Creator C/C++ 打地鼠小遊戲

廢話少說先上圖:算法

這個遊戲純屬土鱉思路,沒有用到什麼遊戲引擎。學習

1.使用按鈕或QLabel鋪滿窗口。this

2.經過簡單算法隨機動態的設置按鈕矩陣中某個按鈕的背景圖像。spa

3.同步2過程反覆設置多個按鈕背景實現圖像動起來,注意調節刷新時間。指針

4.重寫按鈕組鼠標事件,設置鼠標移入時光標的圖案,能夠是個小錘子。blog

5.單擊事件後鼠標同理切換鼠標圖案打下和擡起。遊戲

6.加入一點聲音。進程

7.沒有了。事件

相關代碼:圖片

main.cpp

#include "widget.h"
#include <QApplication>
int Widget::score;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w ,*pW;
    pW = &w;
    w.setWindowTitle("打地鼠   難度:★   成績:5只 ");
    w.setFixedSize(400,350);
    w.show();
    ////保持窗口指針
    return a.exec();
}

  

mybutton.cpp

#include "mybutton.h"
#include <QWidget>
#include <QMouseEvent>
#include <QIcon>
#include <QSize>
#include <QString>
#include<QPixmap>
#include<Qtimer>
#include<QSound>
#include "widget.h"
MyButton::MyButton(QWidget *parent):QPushButton(parent)
{
    upTime = new QTimer(this);//恢復錘子狀態
    upTime->connect(upTime,SIGNAL(timeout()),this,SLOT(upCZ()));
   // btnGroup = Widget();
      this->image = 0;
}
void MyButton::mousePressEvent(QMouseEvent *e){
     this->setCursor(QCursor(QPixmap("C:/src/c1.png")));
     upTime->start(100);
     this->hit();
     //處理
}
void MyButton::hit(){
    QSound::play("hit.wav");
        if(this->image != 0){
                 this->setIcon(QIcon("C:/src/hit.jpg"));
                 QSound::play("dead.wav");//相對路徑
                 Widget::score++;
        }
}
void MyButton::upCZ(){
    this->setCursor(QCursor(QPixmap("C:/src/c0.png")));
}

  

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H
#include<QTimer>
#include <QPushButton>
#include <QWidget>
#include <QMouseEvent>
class MyButton : public QPushButton
{
    Q_OBJECT
public:

    int image;//圖片張數
    MyButton(QWidget *parent);
    void hit();
    void mousePressEvent(QMouseEvent *e);

private:
    QTimer *upTime;
    MyButton *btnGroup;
public slots:
    void upCZ();//擡起錘子
};

#endif // MYBUTTON_H

  

widget.cpp

#include "widget.h"
#include "mybutton.h"
#include <QIcon>
#include <QSize>
#include <QTimer>
#include<QDebug>
#include<QCursor>
#include<QPixmap>
Widget::Widget(QWidget *parent):QWidget(parent)
{

   initBtn(5);
   time= QTime::currentTime();
   qsrand(time.msec()+time.second()*1000);
   //隨機數進程
   srand[0] = 0;//地鼠具體位置
   srand[1] = 0;//地鼠具體位置
   srand[2] = 0;//地鼠具體位置
   srand[3] = 0;//地鼠具體位置
   srand[4] = 0;//地鼠具體位置
   timer = new QTimer(this);
   timer->connect(timer,SIGNAL(timeout()),this,SLOT(startRun()));
   timer->start(200);
   QPixmap qp(40,40);
   qp.load("C:/src/c0.png");
   qp.scaled(60,60);
   this->setCursor(QCursor(qp));
}
void Widget::initBtn(int num){
    int counter = 0;
    for(int i= 0;i < num;i++){
        for(int j = 0; j < 5;j++){
            buttonGroup[counter] = new MyButton(this);
            buttonGroup[counter]->resize(80,70);//400/5=80一行5個
            buttonGroup[counter]->move(80*j,70*i);
          //  buttonGroup[counter]->setText(QString::number(counter));
          //  buttonGroup[counter]->setStyleSheet("border:0px;");
            buttonGroup[counter]->setIcon(QIcon("C:/src/emptyhole.jpg"));
            buttonGroup[counter]->setIconSize(QSize(85,87));
            counter++;
        }
    }

    //載入圖像資源
    for(int i = 0; i < 6 ;i++){
    icoGroup[i] = new QIcon("C:/src/"+QString::number(i)+".jpg");
    }
}
void Widget::startRun(){
    this->setCursor(QCursor(QPixmap("C:/src/c0.png")));//鼠標擡起
    for(int i = 0;i< 5;i++){//一次性更新5個位置
        if(buttonGroup[srand[i]]->image < 6){
            buttonGroup[srand[i]]->setIcon(*icoGroup[buttonGroup[srand[i]]->image++]);
            buttonGroup[srand[i]]->setIconSize(QSize(85,87));
        }else{
            buttonGroup[srand[i]]->setIcon(QIcon("C:/src/emptyhole.jpg"));
            buttonGroup[srand[i]]->setIconSize(QSize(85,87));
            buttonGroup[srand[i]]->image = 0;
            srand[i] = qrand()%25;
            qDebug("地鼠位置:%d",srand[i]);
            //分數
            setWindowTitle("打地鼠   難度:★   成績:"+QString::number(score)+"只 ");
        }
    }


}

MyButton **Widget::getBtnGroup(){
    return buttonGroup;
}

Widget::~Widget()
{

}

  

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "mybutton.h"
#include <QIcon>
#include <QTimer>
#include<QTime>
class Widget : public QWidget
{
    Q_OBJECT

public:
    static int score;//分數統計
    Widget(QWidget *parent = 0);
    void initBtn(int num);
    MyButton **getBtnGroup();
    ~Widget();

private:
    MyButton *buttonGroup[25];
    QTimer *timer;//刷新界面事務
    QIcon *icoGroup[6];
    QTime time;
    int srand[5];//具體位置
public slots:
   void startRun();//開始遊戲
};

#endif // WIDGET_H

思路原始,寫法醜陋,大神請無視,初學者能夠學習下。

FROM CTGU HOMEWORK

相關文章
相關標籤/搜索