[英]How to create a Deck of cards with faces and suits with int Arrays?
我正在嘗試用c創建一個簡單的撲克游戲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_str
和faces_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.