【问题标题】:Missing output from C Blackjack game's int arrayC Blackjack 游戏的 int 数组缺少输出
【发布时间】:2013-01-24 08:24:38
【问题描述】:

所以我尝试用 C 语言编写一个 Blackjack 游戏只是为了好玩(这是我以前从未尝试过的)。我已经完成了最初的几个步骤,例如如何设置牌组以及如何将牌交给庄家和玩家。但是,显示的输出也没有显示我想要的(显示庄家只有 1 张牌,而应该显示 2 张牌)。截图如下:

我确实在我的手机上运行了这个(更容易获得屏幕截图),但我在我的计算机上使用 Code::Blocks 得到了相同的结果。无论如何,我有两个函数来处理设置套牌和显示当前卡片。我在 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);
            }
        }
    }
}

【问题讨论】:

  • 对我来说太棒了,您发现在手机上运行 C 代码并获取屏幕截图比在普通台式计算机上更容易。
  • @unwind 简直……哇。
  • 旁注:您的交易是错误的。它应该有玩家,然后是庄家,都在同一个循环中,伪:x=0;x&lt;2;++x { player gets card, dealer gets card } 你让每个玩家(包括庄家)在下一个玩家之前从牌组顶部拿到手。
  • @WhozCraig 我已经考虑过了,但是由于卡片是随机“洗牌”的,因此每次运行程序时都会根据新的种子值“洗牌”,用户将不明智的,我这样做是为了简单。还是我应该像在现实生活中一样成为“纯粹主义者”和“分发”卡片?
  • @Nyxm 老实说,这并不重要。无论哪种方式都足够简单。我只是不确定您是否熟悉规则的特定部分(交易)。不用担心。

标签: c arrays output blackjack


【解决方案1】:

您的 for 循环似乎相互包含。

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

第一个 for 循环从 x = 0 开始,第二个 for 循环上升到 x = 12,然后第一个 for 循环在第二次执行之前停止,因为它达到了终止条件。

【讨论】:

  • 原来是这样。谢谢鹰眼!
猜你喜欢
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2016-12-13
  • 2017-11-12
  • 1970-01-01
相关资源
最近更新 更多