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

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

示例

可以加個啟動界面;
根據(jù)分類原則,后期可以加一些菜單及快捷工具操作,比如選關(guān)卡,關(guān)卡通關(guān)耗時等操作,因此主窗口選擇QMainWidow,如果想樣式美觀,可自定義重寫QMainWidow;
因為是不同關(guān)卡,所以選擇??丶鳛橹醒氪绑w,可進行界面切換;
也可以只有一個頁面,根據(jù)關(guān)卡,動態(tài)刷新;將關(guān)卡作為一個類;
將關(guān)卡中的各個項作為一個類;
因為得創(chuàng)建,因此后來可以使用工廠模式進行關(guān)卡及項創(chuàng)建;
通過定時器與鼠標事件進行界面卡牌打開及關(guān)閉;通關(guān)后,提示。
由于界面展現(xiàn)效果不好,以下是部分實現(xiàn)代碼,代碼鏈接在下方1,可下載:
item.h
#ifndef ITEM_H
#define ITEM_H
#include <QLabel>
class Step;
namespace Ui {
class Item;
}
// 在關(guān)卡中創(chuà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ā)鼠標事件
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è)置上一個點擊的item
void setPreviousItem(Item* pItem){m_pItemPrevious = pItem;}
Item* item(){return m_pItemPrevious;}
bool check();
private:
// 初始化關(guān)卡
QList<QStringList> initStep(const QString& strStepPath);
// 初始化項
void initItem(const QList<QStringList>& listSL);
// 創(chuàng)建關(guān)卡內(nèi)的項
Item *createItem(const QString& strItem);
private:
Ui::Step *ui;
Item* m_pItemPrevious = nullptr; // 上一個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
代碼鏈接
卡牌對對碰: https://gitcode.net/MrHHHHHH/qt-_card/-/blob/master/FlipTheCardGame.rar
到此這篇關(guān)于Qt實現(xiàn)卡牌對對碰游戲(附demo)的文章就介紹到這了,更多相關(guān)Qt 卡牌對對碰內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中constexpr 與 explicit關(guān)鍵字使用實戰(zhàn)樣例
文章詳細介紹了constexpr和explicit關(guān)鍵字在C++中的用途和用法,constexpr用于聲明實體可以在編譯期求值,而explicit用于阻止不期望的隱式類型轉(zhuǎn)換,本文結(jié)合實例代碼介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2025-12-12

