首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言實作 21 點撲克計牌器:從入門到計牌策略

     編輯:關於C語言

C 語言實作 21 點撲克計牌器

這是一個經典的 C 語言練習專案:實作一個簡單的 21 點(Blackjack)計牌程式。透過鍵盤輸入牌名,程式自動計算當前計數,幫助玩家掌握牌局優勢。程式展示了基本的輸入處理、switch-case 邏輯、陣列操作與迴圈控制。

核心邏輯說明

  • 輸入格式:支援 'A'(11點)、'K'/'Q'/'J'(10點)、'2'-'10'(對應點數)、'X' 或 'x' 結束
  • 計牌策略(Hi-Lo 簡化版):
    • 2-6 點:計數 +1(小牌利於莊家,剩餘大牌機率增)
    • 7-9 點:計數不變(中性牌)
    • 10, J, Q, K, A:計數 -1(大牌利於玩家,剩餘大牌減少)
  • 錯誤處理:輸入非法數值(<1 或 >10)提示錯誤並繼續

完整程式碼

#include <stdio.h>
#include <stdlib.h>

int main() {
    char card_name[3];
    int count = 0;

    do {
        puts("請輸入牌名(A, 2-10, J, Q, K,輸入 X 結束):");
        scanf("%2s", card_name);

        int val = 0;
        switch (card_name[0]) {
            case 'K':
            case 'Q':
            case 'J':
                val = 10;
                break;
            case 'A':
                val = 11;
                break;
            case 'X':
            case 'x':
                continue;  // 直接進入下一輪迴圈,不更新計數
            default:
                val = atoi(card_name);
                if ((val < 1) || (val > 10)) {
                    puts("無法識別的數值,請重新輸入!");
                    continue;
                }
        }

        // Hi-Lo 計牌邏輯
        if ((val > 2) && (val < 7)) {
            count++;       // 2-6: +1
        } else if (val == 10) {
            count--;       // 10, J, Q, K: -1
        }
        // A(11) 和 7,8,9 不計分

        printf("當前計數:%d\n", count);
    } while (card_name[0] != 'x' && card_name[0] != 'X');

    return 0;
}

程式執行範例

請輸入牌名:
5
當前計數:1
請輸入牌名:
K
當前計數:0
請輸入牌名:
3
當前計數:1
請輸入牌名:
A
當前計數:1
請輸入牌名:
x

延伸學習方向

  1. 真實計牌系統:引入真實計數 = 運行計數 / 剩餘副數,決策下注大小
  2. 基本策略表:結合莊家明牌與玩家點數,自動建議 Hit/Stand/Double/Split
  3. 多副牌模擬:模擬 6-8 副牌靴,驗證計牌勝率
  4. 圖形介面:使用 SDL 或 ncurses 製作終端機版 21 點遊戲

這個小專案雖然簡單,但涵蓋了 C 語言核心語法,是進階學習演算法與遊戲邏輯的絕佳起點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved