廢話少說先上圖:算法
這個遊戲純屬土鱉思路,沒有用到什麼遊戲引擎。學習
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