簡體   English   中英

如何使用int Arrays創建帶面和套裝的卡片組?

[英]How to create a Deck of cards with faces and suits with int Arrays?

我正在嘗試用創建一個簡單的撲克游戲Texas Hold'em風格。

起初,我試圖用2個char數組創建一副牌。

char *suits_str[4] = {"Spades", "Hearts", "Diamonds", "Clubs"};
char *faces_str[13] = {"2", "3", "4", "5", "6", "7", "8", "9",
            "10", "J", "Q", "K", "A"};

一切順利,代表卡片非常簡單。 但是當分析手來確定勝利者時,似乎使用char類型值是一個非常糟糕的主意。 所以我想將套裝改為int值,其中0 = Clubs,1 =鑽石,2 = Hearts,3 =黑桃, 面部 0 = 2(deuce),1 = 3,11 = King,12 = Ace。 (這是我的想法,但我不知道如何將這些字符串值分配給他們)

所以這里有我的陣列,

int suits[4] = {0, 1, 2, 3};
int faces[13] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

但我不知道如何將這些int值轉換為匹配的字符串值。 我應該使用什么方法

從初始化程序中可以看出,您不需要數組來表示卡值和面,而是表示resp之間的簡單數值。 可以使用0和12表示值,0和3表示面。 要轉換為字符串,請使用卡值和面作為數組suits_strfaces_str的索引:

int suit = 0;   /* spades */
int face = 12;  /* ace */

printf("I am the %s of %s\n", suits_str[suit], faces_str[face]);

您可以使用枚舉讓您更具可讀性:

enum suits { SPADES, HEARTS, DIAMONDS, CLUBS };
enum faces { DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN,
             JACK, QUEEN, KING, ACE };
int suit = SPADES;
int face = ACE;

printf("I am the %s of %s\n", suits_str[suit], faces_str[face]);

另一個想法是從0到51編號卡並使用公式來提取面部和套裝:

int card = rand() % 52;
int suit = card / 13;
int face = card % 13;

printf("I am the %s of %s\n", suits_str[suit], faces_str[face]);

您可以通過初始化52個int的數組並使用一種簡單的方法對其進行洗牌來創建一副牌:

int deck[52];
for (int i = 0; i < 52; i++) {
     /* start with a sorted deck */
     deck[i] = i;
}

for (int i = 0; i < 1000; i++) {
    /* shuffle by swapping cards pseudo-randomly a 1000 times */
    int from = rand() % 52;
    int to = rand() % 52;
    int card = deck[from];
    deck[from] = deck[to];
    deck[to] = card;
}

printf("Here is a shuffled deck:\n"
for (int i = 0; i < 52; i++) {
     int card = deck[i];
     int suit = card / 13;
     int face = card % 13;
     printf("%s of %s\n", suits_str[suit], faces_str[face]);
}

最簡單的方法是將每張卡表示為單個整數:

int getFace(int card) {
    return card/4;
}

int getSuit(int card) {
    return card%4;
}

int createCard(int face, int suit) {
    return face*4+suit;
}

僅在向用戶顯示時將它們轉換為字符串:

void printCard(int card) {
    static char *suits_str[4] = {"Spades", "Hearts", "Diamonds", "Clubs"};
    static char *faces_str[13] = {"2", "3", "4", "5", "6", "7", "8", "9",
              "10", "J", "Q", "K", "A"};
    printf("%s %s\n", faces_str[getFace(card)], suits_str[getSuit(card)]);
}

並使用整數執行所有計算:

bool isOnePair(int* hand) {
    return getFace(hand[0]) == getFace(hand[1]);
}

bool isFlush(int* hand) {
    return getSuit(hand[0]) == getSuit(hand[1]);
}

保留兩個創建的數組,並使用int數組值作為指向char的指針數組的索引。

例:

 int diamonds_index = suits[1];
 char *diamonds_str = suits_str[diamonds_index];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM