Qt實(shí)現(xiàn)卡牌對(duì)對(duì)碰游戲(附demo)
效果
閑來無事,實(shí)現(xiàn)一個(gè)對(duì)對(duì)碰游戲,卡牌樣式是火影動(dòng)漫。
玩法
- 啟動(dòng)游戲,進(jìn)入第一關(guān)卡,所有卡牌都為
未翻開狀態(tài),即背面朝上; - 點(diǎn)擊卡牌,則將卡牌翻開;
- 如果當(dāng)前翻開的卡牌和上一次翻開的卡牌不一致,則1s后,將兩張卡牌再次背面朝上;
- 如果當(dāng)前翻開的卡牌和上一次翻開的卡牌一致,則兩張卡牌都會(huì)正面朝上;
- 全部翻開,本官通關(guān),則進(jìn)去下一關(guān)卡。
UI
上一張初始UI圖:

再上一張通關(guān)圖:

示例

可以加個(gè)啟動(dòng)界面;
根據(jù)分類原則,后期可以加一些菜單及快捷工具操作,比如選關(guān)卡,關(guān)卡通關(guān)耗時(shí)等操作,因此主窗口選擇QMainWidow,如果想樣式美觀,可自定義重寫QMainWidow;
因?yàn)槭遣煌P(guān)卡,所以選擇棧控件作為中央窗體,可進(jìn)行界面切換;
也可以只有一個(gè)頁面,根據(jù)關(guān)卡,動(dòng)態(tài)刷新;將關(guān)卡作為一個(gè)類;
將關(guān)卡中的各個(gè)項(xiàng)作為一個(gè)類;
因?yàn)榈脛?chuàng)建,因此后來可以使用工廠模式進(jìn)行關(guān)卡及項(xiàng)創(chuàng)建;
通過定時(shí)器與鼠標(biāo)事件進(jìn)行界面卡牌打開及關(guān)閉;通關(guān)后,提示。
由于界面展現(xiàn)效果不好,以下是部分實(shí)現(xiàn)代碼,代碼鏈接在下方1,可下載:
item.h
#ifndef ITEM_H
#define ITEM_H
#include <QLabel>
class Step;
namespace Ui {
class Item;
}
// 在關(guān)卡中創(chuàng)建的項(xiàng)
class Item : public QLabel
{
Q_OBJECT
public:
explicit Item(const QString& strItem, Step* pStep, QWidget *parent = nullptr);
~Item();
// 是否翻開
void setOpen(bool b){m_bIsOpen = b;}
bool open(){return m_bIsOpen;}
protected:
// 觸發(fā)鼠標(biāo)事件
virtual void mouseReleaseEvent(QMouseEvent *ev) override;
virtual void mousePressEvent(QMouseEvent *ev) override;
private:
Ui::Item *ui;
Step* m_pStep;
bool m_bIsOpen = false;
};
#endif // ITEM_H
step.h
#ifndef STEP_H
#define STEP_H
#include <QWidget>
// 類前置
QT_FORWARD_DECLARE_CLASS(Item)
namespace Ui {
class Step;
}
class Step : public QWidget
{
Q_OBJECT
public:
explicit Step(const QString& strStepPath, QWidget *parent = nullptr);
~Step();
// 設(shè)置上一個(gè)點(diǎn)擊的item
void setPreviousItem(Item* pItem){m_pItemPrevious = pItem;}
Item* item(){return m_pItemPrevious;}
bool check();
private:
// 初始化關(guān)卡
QList<QStringList> initStep(const QString& strStepPath);
// 初始化項(xiàng)
void initItem(const QList<QStringList>& listSL);
// 創(chuàng)建關(guān)卡內(nèi)的項(xiàng)
Item *createItem(const QString& strItem);
private:
Ui::Step *ui;
Item* m_pItemPrevious = nullptr; // 上一個(gè)Item
};
#endif // STEP_H
mainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QStackedWidget;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
// 初始化關(guān)卡配置文件
void init();
private:
Ui::MainWindow *ui;
QStackedWidget* m_pSW;
};
#endif // MAINWINDOW_H
代碼鏈接
卡牌對(duì)對(duì)碰: https://gitcode.net/MrHHHHHH/qt-_card/-/blob/master/FlipTheCardGame.rar
到此這篇關(guān)于Qt實(shí)現(xiàn)卡牌對(duì)對(duì)碰游戲(附demo)的文章就介紹到這了,更多相關(guān)Qt 卡牌對(duì)對(duì)碰內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式
- Qt項(xiàng)目實(shí)戰(zhàn)之方塊游戲的實(shí)現(xiàn)
- 基于Qt實(shí)現(xiàn)電子木魚小游戲
- 基于PyQt5制作一個(gè)猜數(shù)字小游戲
- Qt實(shí)現(xiàn)棋盤游戲
- QT實(shí)現(xiàn)貪吃蛇游戲代碼詳解
- python編程使用PyQt制作預(yù)覽窗口游戲中的小地圖
- QT實(shí)現(xiàn)簡(jiǎn)單五子棋游戲
- QT實(shí)現(xiàn)貪吃蛇游戲
- QT實(shí)現(xiàn)簡(jiǎn)單打地鼠游戲
- Qt實(shí)現(xiàn)簡(jiǎn)單五子棋小游戲
相關(guān)文章
C++中constexpr 與 explicit關(guān)鍵字使用實(shí)戰(zhàn)樣例
文章詳細(xì)介紹了constexpr和explicit關(guān)鍵字在C++中的用途和用法,constexpr用于聲明實(shí)體可以在編譯期求值,而explicit用于阻止不期望的隱式類型轉(zhuǎn)換,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-12-12
在C語言中調(diào)用C++做的動(dòng)態(tài)鏈接庫
如果你有一個(gè)c++做的動(dòng)態(tài)鏈接庫.so文件,而你只有一些相關(guān)類的聲明,那么你如何用c調(diào)用呢,別著急,本文通過一個(gè)小小的例子,讓你能夠很爽的搞定.2016-05-05
OpenCV實(shí)現(xiàn)簡(jiǎn)單套索工具
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)簡(jiǎn)單套索工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
C++實(shí)現(xiàn)一鍵關(guān)閉桌面的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)一鍵關(guān)閉桌面的功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-07-07

