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

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

示例

可以加個啟動界面;
根據(jù)分類原則,后期可以加一些菜單及快捷工具操作,比如選關(guān)卡,關(guān)卡通關(guān)耗時等操作,因此主窗口選擇QMainWidow,如果想樣式美觀,可自定義重寫QMainWidow;
因為是不同關(guān)卡,所以選擇??丶鳛橹醒氪绑w,可進(jìn)行界面切換;
也可以只有一個頁面,根據(jù)關(guān)卡,動態(tài)刷新;將關(guān)卡作為一個類;
將關(guān)卡中的各個項作為一個類;
因為得創(chuàng)建,因此后來可以使用工廠模式進(jìn)行關(guān)卡及項創(chuàng)建;
通過定時器與鼠標(biāo)事件進(jìn)行界面卡牌打開及關(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ā)鼠標(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è)置上一個點(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);
// 初始化項
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++類型轉(zhuǎn)化(運(yùn)算符重載函數(shù))和基本運(yùn)算符重載(自增自減)
下面小編就為大家?guī)硪黄獪\談C++類型轉(zhuǎn)化(運(yùn)算符重載函數(shù))和基本運(yùn)算符重載(自增自減)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
使用C語言實現(xiàn)動態(tài)數(shù)組Vector
這篇文章主要為大家詳細(xì)介紹了使用C語言實現(xiàn)動態(tài)數(shù)組Vector的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01

