Code -- Simple POKER Game

a simple POKER game with raylib

為什麼會有這個東東呢? 因為想要知道ai的研究是否好用,順著就寫了一個來測試機率。 o_O

#include "game.h" // 引入 game.h 頭文件,其中定義了 Game 結構體和相關常數
#include "card.h" // 引入 card.h 頭文件,其中定義了卡牌相關的結構體和函式
#include "gameproc.h" // 引入 gameproc.h 頭文件,其中定義了遊戲狀態處理的函式 (例如:DemoProc, BetProc)
#include "gui.h" // 引入 gui.h 頭文件,其中定義了 GUI 相關的函式
#include "player.h" // 引入 player.h 頭文件,其中定義了玩家相關的結構體和函式
#include "raylib.h" // 引入 raylib.h 頭文件,Raylib 繪圖函式庫
#include "timer.h" // 引入 timer.h 頭文件,其中定義了計時器相關的函式

// 初始化遊戲
void GameInit(Game* game)
{
	SetWindowState(FLAG_VSYNC_HINT + FLAG_MSAA_4X_HINT);
    SetTraceLogLevel(LOG_ERROR); // 設定 Raylib 的日誌等級為僅顯示錯誤訊息,以減少不必要的輸出
    InitWindow(SCR_W, SCR_H, "Poker"); // 初始化 Raylib 視窗,設定寬度、高度和標題
//    SetTargetFPS(FPS); // 設定遊戲的目標幀率
    GuiInit(); // 初始化遊戲的 GUI 系統
    CardSetInit(&game->cardSet); // 初始化遊戲的牌組
    CardShuffle(&game->cardSet); // 洗牌
    PlayerInit(&game->player, START_CREDIT); // 初始化玩家,設定初始信用額度
    game->stepCount = 0; // 初始化遊戲步驟計數器為 0
    game->gameMessage = ""; // 初始化遊戲訊息為空字串
    game->messageTime = 0; // 初始化遊戲訊息顯示計時器為 0
    game->winCountTime = 0; // 初始化贏錢動畫計時器為 0
    game->mainStatus = GAME_DEMO; // 初始化遊戲的主要狀態為 DEMO 狀態 (演示狀態)
}

// 結束遊戲時的清理
void GameFini()
{
    GuiFini(); // 清理遊戲的 GUI 系統
    CloseWindow(); // 關閉 Raylib 視窗
}

// 更新遊戲狀態 (每幀調用)
void GameUpdate(Game* game)
{
    UpdateTimer(GetFrameTime()); // 更新遊戲計時器,傳入自上一幀以來經過的時間
    // 根據遊戲的主要狀態執行不同的處理邏輯
    switch (game->mainStatus) {
    case GAME_DEMO: // 遊戲演示狀態
        DemoProc(game); // 調用 DemoProc 函式處理演示狀態的邏輯
        break;
    case GAME_START: // 遊戲開始狀態
        StartProc(game); // 調用 StartProc 函式處理開始狀態的邏輯
        break;
    case GAME_BET: // 遊戲下注狀態
        BetProc(game); // 調用 BetProc 函式處理下注狀態的邏輯
        break;
    case GAME_PLAY: // 遊戲進行狀態
        PlayProc(game); // 調用 PlayProc 函式處理遊戲進行中的邏輯 (例如:發牌、換牌)
        break;
    case GAME_CHECK: // 遊戲檢查輸贏狀態
        CheckProc(game); // 調用 CheckProc 函式處理檢查輸贏的邏輯
        break;
    case GAME_WIN:    // 遊戲勝利狀態
        WinProc(game);   // 調用 WinProc 函式處理勝利狀態的邏輯 (例如:顯示贏錢動畫)
        break;
    case GAME_LOSE:   // 遊戲失敗狀態
        LoseProc(game);  // 調用 LoseProc 函式處理失敗狀態的邏輯 (例如:顯示失敗訊息)
        break;
    case GAME_ACCOUNT: // 遊戲結算狀態
        AccountProc(game); // 調用 AccountProc 函式處理結算狀態的邏輯
        break;
    }
}

// 繪製遊戲畫面 (每幀調用)
void GameDraw(Game* game)
{
    GuiDrawBackground();
    GuiDrawBet(game->player.bet);
    GuiDrawCredit(game->player.credit);
    GuiDrawOdds();
    GUIDrawHeld(game);
    GuiDrawMessage(game->gameMessage);
    GuiDrawPlayerHandCard(game); 
}

// 遊戲主循環
void GameLoop(Game* game)
{
    // 當視窗沒有被要求關閉時持續循環
    while (!WindowShouldClose()) {
        GameUpdate(game); // 更新遊戲狀態
        BeginDrawing();    // 開始繪製當前幀
        ClearBackground(BLACK); // 清除背景為黑色
        GameDraw(game);    // 繪製遊戲畫面
        EndDrawing();      // 結束當前幀的繪製
    }
}

完整的在這裏

c  raylib 

See also