0

だから私はそれを楽しむためだけにCでブラックジャックゲームを書こうとしています(これまで試したことのないものです)。デッキのセットアップ方法や、ディーラーやプレーヤーにカードを渡す方法など、最初のいくつかのステップを通過しました。ただし、表示された出力には、私が望むものも表示されていません(ディーラーに表示する場合、2枚表示する必要があるのに1枚のカードしかありません)。これがスクリーンショットです:

はい、これは私の電話で実行されましたが、私のコンピューターでも同じ結果が得られます。

私はこれを自分の電話で実行しましたが(スクリーンショットを取得するのが簡単です)、Code::Blocksを使用してコンピューターで同じ結果が得られています。とにかく、デッキのセットアップを処理する機能と、現在のカードを表示する機能の2つがあります。ループを使用してmain()関数で処理しているカードの処理。makeDeck()関数が正しく機能していることを知っているので、エラーは別の場所にあると想定しています。私のコードを見て、何が起こっているのか教えてください(また、改善のための提案をいただければ幸いです):

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

/*Function Prototypes*/
int* makeDeck();
    /*Usage - returns an int* to be used for the deck */

void showHands(int[], int[]);
    /*Usage - pass dealerHand[], then playerHand[] */

int main() {
        srand(time(0));     //Make a new rand() seed value
    int  x, count = 0, choice = 1;
    int* cards        = makeDeck();
    int  dealerCards[12];       //cards in hand will never exceed 11
    int  playerCards[12];       //4 A's, 4 2's, 3 3's

    /*Loop to run the game. One iteration per hand */
    while(choice != 0) {
        for(x = 0; x < 12; x++) {
            dealerCards[x] = 0;
            playerCards[x] = 0;
        }

        //Deal 2 cards to dealer and player
        for(x = 0; x < 2; x++) {
            dealerCards[x] = cards[count];
            count++;
        }
        for(x = 0; x < 2; x++) {
            playerCards[x] = cards[count];
            count++;
        }

        showHands(dealerCards, playerCards);

                /*DEBUGGING */
        printf("\nEnter 0 to exit loop: ");
        scanf("%i", &choice);
    }
    return 0;
}

//Declare placeholder variable "bunchOfCards" globally
int bunchOfCards[52];

int* makeDeck(){
    int* deck = bunchOfCards;
    int  x    = 0,
         y    = 0,
         card = 0;
    for(x = 0; x < 52; x++) {           //set all cards to 0
        deck[x] = 0;
    }
    for(x = 0; x < 4; x++) {                //set up deck
        for(y = 1; y < 14; y++) {
             card = (rand() % 52);

             //check if deck position is already used
             while(deck[card] != 0) {
                    card = (rand() % 52);
             }
             deck[card] = y;
        }
    }
    /* DEBUGGING
    for(x = 0; x < 52; x++) {
        printf("%i\t", deck[x]);
    } */
    return deck;
}

void showHands(int* dealer, int* player) {
    int x; char card[3] = { '\0', '\0', '\0' };
    puts("The hands are: \n\nDealer:");

    //Display dealer cards
    for(x = 0; x < 12; x++) {
        if(dealer[x] != 0) {
            if((dealer[x] < 10) && (dealer[x] != 1)) {
                card[0] = (char)(((int)'0') + dealer[x]);
                card[1] = '\0';
            } else if(dealer[x] == 1) {
                card[0] = 'A';
                card[1] = '\0';
            } else if(dealer[x] == 10) {
                card[0] = '1';
                card[1] = '0';
            } else if(dealer[x] == 11) {
                card[0] = 'J';
                card[1] = '\0';
            } else if(dealer[x] == 12) {
                card[0] = 'Q';
                card[1] = '\0';
            } else if(dealer[x] == 13) {
                card[0] = 'K';
                card[1] = '\0';
            }
            printf("\t%s", card);
        }

        //Display player cards
        puts("\nPlayer: ");
        for(x = 0; x < 12; x++) {
            if(player[x] != 0) {
                if((player[x] < 10) && (player[x] != 1)) {
                    card[0] = (char)(((int)'0') + player[x]);
                    card[1] = '\0';
                } else if(player[x] == 1) {
                    card[0] = 'A';
                    card[1] = '\0';
                } else if(player[x] == 10) {
                    card[0] = '1';
                    card[1] = '0';
                } else if(player[x] == 11) {
                    card[0] = 'J';
                    card[1] = '\0';
                } else if(player[x] == 12) {
                    card[0] = 'Q';
                    card[1] = '\0';
                } else if(player[x] == 13) {
                    card[0] = 'K';
                    card[1] = '\0';
                }
                printf("\t%s", card);
            }
        }
    }
}
4

1 に答える 1

2

forループは互いに含まれているように見えます。

for(x = 0; x < 12; x++) {
  if(dealer[x] != 0) {
    ...
  }
  puts("\nPlayer: ");
  for(x = 0; x < 12; x++) {
    ...
  }
}

最初のforループはx=0で始まり、2番目のforループはx = 12まで上がり、最初のforループは終了条件に達したため、2回目の実行の前に停止します。

于 2013-02-08T15:04:46.540 に答える