0

私は C でブラックジャック ゲームに取り組んでいます。3 つの関数があります。1 つはデッキを埋めるため、もう 1 つはカードをシャッフルするため、もう 1 つはカードを配るためです。私の問題は、カードに整数値を与える方法がわからないことです。誰が勝つかを確認するために必要です。これを解決する方法についてのいくつかの意見をいただければ幸いです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "func.h"

/*fill deck with 52 cards*/
void fillDeck(Card * const Deck, const char *suit[], const char *deck[]){

int s;
for (s = 0; s < 52; s++){
    Deck[s].suits = deck[s % 13];
    Deck[s].decks = suit[s / 13];
}
return;
}



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "func.h"

/*shuffle cards*/
void shuffle(Card * const Deck){
int i, j;
Card temp;

for (i = 0; i < 52; i++){
    j = rand() % 52;
    temp = Deck[i];
    Deck[i] = Deck[j];
    Deck[j] = temp;
}
return;
}



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "func.h"

/*deal cards*/
void deal(const Card * const Deck, int size, int size_1, int size_2){

int i, j, length;
char anotherCard[2];
char name1[30];
char name2[30];

printf("Name player one > ");
scanf("%s", name1);
printf("Name player two > ");
scanf("%s", name2);

printf("\nWelcome %s and %s, lets begin!\n\n", name1, name2);
getchar();

    printf("%s's card:\n", name1);
    for (i = 0; i < size; i++){
        printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');
    }

    printf("\n%s's card:\n", name2);
    for (i = 2; i < size_1; i++){
        printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');
    }

    printf("\nDealer card:\n");
    for (i = 4; i < size_2; i++){
        printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');
    }
return;
}



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "func.h"

int main(void){

Card allCards[52];
const char *suits[] = { "spades", "hearts", "diamonds", "clubs" };
char *decks[] = { "ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king" };
int *values[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };

srand(time(NULL));

fillDeck(allCards, suits, decks, values);
shuffle(allCards);
deal(allCards, 2, 4, 6);

getchar();
return 0;
}



/*func.h*/
struct card{
    const char *suits;
    const char *decks;
};

typedef struct card Card;

void fillDeck(Card * const Deck, char *suit[], char *deck[]);

void shuffle(Card * const Deck);

void deal(const Card * const Deck, int size, int size_1, int size_2);

#endif
4

2 に答える 2

0

0..12プログラムのカードの値とランクを混同しないでください。プログラムで使用されるランクとカードの説明的な値を明確に区別してください。

//char *suitname[] = { "Hearts", "Clubs", "Diamonds", "Spades" };
//char *rankname[] = { "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", 
                          "Ten", "Jack", "Queen", "King", "Ace" };

char *suitname[] = { "Hearts", "Diamonds", "Spades", "Clubs" };
char *rankname[] = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", 
                          "Ten", "Jack", "Queen", "King" };

「エース」が高くても低くても、ランク「スリー」の値は ではありません3。カードの値を処理 (しゃれ!) し0..51、スーツとランクをオンデマンドで取得することをお勧めします。

int suit = card / 13;       // range 0..3
int rank = card % 13;       // range 0..12

どちらの場合も、スーツまたはランクは0、 からスーツ (ダジャレ!) 配列のインデックス付けまでの範囲の値です。

ランクのスコア値については、次のような別の配列を定義できます

int cardvalue[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };

したがって、カードの値を取得できます

int value = cardvalue[card % 13];

そしてその説明を

printf("%s of %s", rankname[card % 13], suitname[card / 13]);

また、先ほど示したように、定義した順序でスーツの階層 (一部のカード ゲームでは重要) を取得することもできます。

于 2016-01-06T20:36:01.417 に答える