中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用QT怎么編寫一個打地鼠游戲

發布時間:2020-12-24 16:11:08 來源:億速云 閱讀:495 作者:Leah 欄目:開發技術

使用QT怎么編寫一個打地鼠游戲?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

實現功能:

有若干地鼠洞,每次出現一只地鼠,當擊中地鼠后,分數加1,地鼠更換位置。當分數大于20時,游戲結束。

實現思路:

 1.先初始化一個頁面,放一只地鼠和若干個地鼠洞,為地鼠和地鼠洞添加槽函數。
 2.當點擊時就執行相應函數。判斷是否擊中,從而對其進行加分或者減分。
 3.當擊中地鼠后,應該刷新頁面,讓地鼠換個位置出現。
 4.重復2.3,直到分數到達一定值或者其他結束條件后結束游戲。

用到的知識點:

 1.qt按鈕組,以及按鈕組連接信號槽(代碼里地鼠是用按鈕實現的,也可以使用QLabel實現,點擊時,可以用static_cast<QLabel *>(childAt(event->pos()));判斷點中的是不是地鼠)
 2.QLabel設置圖片,字體,顏色,大小
 3.QPushButton 設置圖片
 4.給光標換圖片

下面開始創建項目,代碼在最下面,也可以直接拉到下面看代碼

1.創建qt項目,等待項目創建完成,這里我的項目名是BeatMouse

使用QT怎么編寫一個打地鼠游戲

2.接下來會有這個彈框,點next即可

使用QT怎么編寫一個打地鼠游戲

3.繼續next,release那里勾不勾都可以,不影響

使用QT怎么編寫一個打地鼠游戲

4.選擇QWidget,然后finish

使用QT怎么編寫一個打地鼠游戲

5.靜靜等待項目創建完成就好啦! 然后刪除項目里.cpp,.h文件里用到的ui相關的東西,這里用不到。

6.添加圖片資源文件,在項目解決方案里有個 Resource Files 文件夾,打開里面應該有一個自動創建好的.qrc文件,雙擊打開,點擊Add,選擇Add Files,即可添加資源進來,點擊添加好的某個資源,Resource URL就是資源的路徑,在項目里直接使用這個路徑,就可以用到這個資源。

使用QT怎么編寫一個打地鼠游戲

最后的效果圖

使用QT怎么編寫一個打地鼠游戲

初學代碼寫的有點亂,下面放上代碼

BeatMouse.h

#pragma once
#include <QtWidgets>
#include<QTime>
class BeatMouse : public QMainWindow
{
  Q_OBJECT
signals:
 void quit();
public:
  BeatMouse(QWidget *parent = Q_NULLPTR);
public slots:
 void OnButtonClickMouse(int index); //連接按鈕組,判斷是哪個按鈕被點擊
 void setScore(int score);  //設置分數

private:
 int m_width; //獲取屏幕的寬高 默認尺寸1920*1080
 int m_height;
 int mouseItem; //地鼠序號
 int m_score;
 
 QTime t;
 QRect  m_screenGeometry; //屏幕尺寸
 QLabel*   m_background;   //背景圖
 QLabel*  m_gameOver; //游戲結束后的遮罩
 QLabel*  m_gameOverText; //游戲結束后的提示文字

 QPushButton* m_btnQuit;  //右上角關閉按鈕
 QButtonGroup*  m_groupBtn;   // 按鈕組 
 QVector<QPushButton*> m_Mouse; // 地鼠按鈕
 QLCDNumber* m_lcdScore;  //分數
 
 void setBackground();  //設置背景
 void setGameQuit();  //設置關閉按鈕
 void initMouse();  //初始化地鼠洞
 void beginGame();  //隨機選擇一個地鼠洞變成地鼠
 void loadScore();  //初始化分數
 void gameOver();  //游戲結束 出現遮罩和提示文字
};

BeatMouse.cpp

#include "BeatMouse.h"

BeatMouse::BeatMouse(QWidget *parent)
  : QMainWindow(parent)
{
 QDesktopWidget* pDesktop = QApplication::desktop(); //獲取桌面大小
 m_screenGeometry = pDesktop->screenGeometry();
 m_width = m_screenGeometry.width();
 m_height = m_screenGeometry.height();
 m_rateHeight = m_height / 1080.0;
 m_rateWidth = m_height / 1920.0;
 this->setGeometry(m_screenGeometry);
 
 setBackground();
 setGameQuit();
 initMouse();
 loadScore();
 beginGame();
}

void BeatMouse::setBackground() {
 QPixmap image(":/BeatMouse/qrc/bg.jpg");
 QPixmap img = image.scaled(m_screenGeometry.size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

 m_background = new QLabel(this);
 m_background->setPixmap(img);
 m_background->setFixedSize(img.size());
 m_background->lower();

 QPixmap imgCursor(":/BeatMouse/qrc/chuizi.png");
 QCursor cursor(imgCursor);
 setCursor(cursor);
}
void BeatMouse::setGameQuit() {
 QPixmap image(":/BeatMouse/qrc/close.png");
 QPixmap img = image.scaled(80,80, Qt::KeepAspectRatio, Qt::SmoothTransformation);

 m_btnQuit = new QPushButton(this);
 m_btnQuit->setIcon(img);
 m_btnQuit->setIconSize(img.size());
 m_btnQuit->setFixedSize(img.size());
 m_btnQuit->setStyleSheet("QPushButton{border:0px;background-color:rgba(0,0,0,0);outline:none;}");
 m_btnQuit->move(m_width - 140, 50 );
 QObject::connect(m_btnQuit, SIGNAL(clicked()), this, SIGNAL(quit()));
}
void BeatMouse::initMouse() {
 m_score = 0;
 m_Mouse.clear();
 m_groupBtn = new QButtonGroup(this);
 QPushButton* m_pbtn;

 for (int i = 0; i < 10; i++) { //2*5
 m_pbtn = new QPushButton(this);
 QPixmap image(":/BeatMouse/qrc/dishu2.png");
 QPixmap img = image.scaled(200, 200, Qt::KeepAspectRatio, Qt::SmoothTransformation);
 m_pbtn->setStyleSheet("QPushButton{border:0px;background-color:rgba(0,0,0,0);outline:none;}");
 
 if (i > 4) { // 后4個放一起
  //QPixmap img = image.scaled(160, 160, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  m_pbtn->move(300+270*(i-5), 500);
 }
 else {
  m_pbtn->move(300+270*i, 700);
 }
 m_pbtn->setIcon(img);
 m_pbtn->setIconSize(img.size());
 m_pbtn->setFixedSize(img.size());
 m_Mouse.push_back(m_pbtn);
 m_groupBtn->addButton(m_Mouse[i], i);
 }
 QObject::connect(m_groupBtn, SIGNAL(buttonClicked(int)), this, SLOT(OnButtonClickMouse(int)));

}

void BeatMouse::OnButtonClickMouse(int index) {
 if (index == mouseItem) { //如果被打中的是地鼠
 m_score++;
 setScore(m_score);
 QPixmap image(":/BeatMouse/qrc/dishu2.png");
 QPixmap img = image.scaled(200, 200, Qt::KeepAspectRatio, Qt::SmoothTransformation);
 m_Mouse[mouseItem]->setIcon(img);
 beginGame();
 }
}
void BeatMouse::beginGame() {
 QPixmap image(":/BeatMouse/qrc/dishu1.png");
 QPixmap img = image.scaled(200, 200, Qt::KeepAspectRatio, Qt::SmoothTransformation);
 
 t = QTime::currentTime();
 qsrand(t.msec()*100 + t.second() * 1000);
 mouseItem = qrand() % 10;
 m_Mouse[mouseItem]->setIcon(img);
}

void BeatMouse::loadScore() {
 m_lcdScore = new QLCDNumber(this);
 m_lcdScore->setDigitCount(1);
 m_lcdScore->setSegmentStyle(QLCDNumber::Flat);
 m_lcdScore->setStyleSheet("QLCDNumber{color:rgb(146,64,146);border:none;}");
 m_lcdScore->display(0);
 //
 m_lcdScore->setGeometry(m_width/2-80, 20,150, 150);
}
void BeatMouse::setScore(int score) {
 if (score >= 100)
 {
 m_lcdScore->setDigitCount(3);
 }
 else if (score >= 10 && score < 100)
 {
 m_lcdScore->setDigitCount(2);
 }
 else
 {
 m_lcdScore->setDigitCount(1);
 }
 if (score > 20) {
 score = 20;
 gameOver();
 }
 m_lcdScore->display(score);
}
void BeatMouse::gameOver() {
 m_gameOver = new QLabel(this);
 m_gameOver->setGeometry(0, 200, m_width, m_height-200);
 m_gameOver->setStyleSheet("QLabel{background-color:rgba(0,0,0,20);}");
 //m_gameOver->raise();
 m_gameOver->show();   //顯示

 m_gameOverText=new QLabel(this);
 m_gameOverText->setText(QString::fromLocal8Bit("恭喜過關!"));
 m_gameOverText->show();   //顯示

 //顏色
 QPalette pal;
 pal.setColor(QPalette::WindowText, Qt::red);
 m_gameOverText->setPalette(pal);
 //字號
 QFont ft;
 ft.setPointSize(40);
 m_gameOverText->setFont(ft);
 m_gameOverText->setGeometry(m_width/2-100, m_height/2-100,400,200);
 m_gameOverText->raise();
}

簡易版打地鼠,所以沒有加計時功能,也沒有加音樂,也沒有加重玩游戲的功能,下面說一下實現這些功能的簡單思路。

 //1.添加音樂
 qt5里添加音樂需要增加MultiMedia模塊,在項目屬性里添加即可,并加上這個頭文件
 #include <QMediaPlayer>
 使用:
 QMediaPlayer m_MediaObject;
 m_MediaObject.setMedia(QUrl("qrc:qrc/sound/enterSound.mp3"));
 m_MediaObject.play();
 注: enterSound.mp3在qrc里的路徑是:/qrc/sound/enterSound.mp3,但是直接使用這個路徑播放不出來聲音,經過查尋,把路徑換成這種qrc:qrc/sound/enterSound.mp3就可以使用,可以兩種都試試。
 qt5可以獲取音樂播放的狀態,在OnState槽函數中,可以判斷音樂的狀態,進而進行你想要的操作。
 QObject::connect(&m_MediaObject, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(OnState(QMediaPlayer::State)));
  
  void BeatMouse::OnState(QMediaPlayer::State state) {
 switch (state) { //判斷音樂的狀態
 case QMediaPlayer::StoppedState: //停止
 
 case QMediaPlayer::PlayingState: //播放
 break;
 case QMediaPlayer::PausedState: //暫停
 break;
 default: break;
 }
}

//2.添加計時
使用QTimer 設置一個計時器,每間隔1s就刷新一下時間的顯示。就能達到計時顯示的效果。定義一個QTime 記錄時長。
QTimer* m_timeUpdate;
QTime m_tTotalTime; //總時長

//3.重玩游戲
重玩游戲就是一個把地鼠歸位,時間,分數清零的動作。

關于使用QT怎么編寫一個打地鼠游戲問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

峨眉山市| 中方县| 峨边| 玛曲县| 景宁| 全南县| 财经| 西峡县| 隆尧县| 平果县| 民勤县| 阿拉善左旗| 垫江县| 盖州市| 清新县| 陕西省| 台湾省| 静海县| 都兰县| 资讯| 林芝县| 阿克陶县| 夹江县| 遂平县| 肇东市| 海兴县| 武定县| 湘乡市| 合川市| 宝兴县| 壤塘县| 都昌县| 康乐县| 广元市| 凌海市| 驻马店市| 子洲县| 柳河县| 西昌市| 朔州市| 永修县|