【问题标题】:I don't know how to add integers and print them in my blackjack game, C [closed]我不知道如何在我的二十一点游戏中添加整数并打印它们,C [关闭]
【发布时间】:2016-04-12 11:54:54
【问题描述】:

我的二十一点游戏差不多完成了,但我在添加卡片整数时遇到了问题。如您所见,我打印了卡片并显示了卡片的价值,第二个价值是两张卡片的总和。我只想打印总和,但由于某种原因,我无法摆脱第一张卡片的价值。庄家没有拿到他的牌,为什么?

我遇到的第二个问题是,当其中一个玩家获得一张新卡时,我希望将新卡的值添加到该玩家的第一个总和中。

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

    int i, j, length;
    char anotherCard[2];
    char name1[30];
    char name2[30];
    int valueName1 = 0, valueName2 = 0, valueDealer = 0;

    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');
        valueName1 += Deck[i].value;
        printf("\nvalue > %d", valueName1);
    }

    //Name2 deleted
    //Dealer deleted

    printf("\nDo %s want another card? Y/N > ", name1);
    fgets(anotherCard, sizeof(anotherCard), stdin);
    fflush(stdin);
    printf("\n");

    length = strlen(anotherCard);
    for (j = 0; j < length; j++){

        if (strcmp(anotherCard, "Y") == 0 || strcmp(anotherCard, "y") == 0){
            for (i = 6; i < 7; i++){
                printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');
                valueName1 = Deck[i].value;
                printf("value > %d", valueName1);
            }
        }
        else
            break;
    }
    return;
}

【问题讨论】:

  • "去掉第一张卡片的价值"。这到底是什么意思,为什么需要这样做?另外,请不要将输出作为图像发布,而是作为问题中的文本发布。如果您准确指出该输出有什么问题(例如预期输出是什么),这将有所帮助。
  • 您应该在\nvalue &gt; %d 之后添加\n,以便下一张卡片单独打印在一行上。
  • 我觉得它现在看起来更好了?如果我们以马库斯的牌为例。六颗心的价值为 6,但我根本不希望它被打印出来。当马库斯得到一张新卡时,只有总和显示为值 > 16,三颗钻石我希望将值 > 3 添加到第一个值,(值 > 16)
  • 我看不到你的函数在哪里打印庄家牌。
  • 对不起,我删除了,所以我没有打印太多代码,我把它写成评论

标签: c integer blackjack


【解决方案1】:

如果您只想打印最终总数,请将 printf 行移到循环之外。您还应该以\n 为每张卡片开始printf,以便卡片将显示在不同的行中。

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

【讨论】:

  • 太棒了!那行得通。但是如何将 Marcus 获得的新卡添加到第一个值?我想将 value > 3 添加到 value > 16
  • 每次你给他另一个 vard 时,你就像在循环中一样valueName1 += Deck[i].value;
  • 我不明白你为什么要像for(i = 6; i &lt; 7; i++) 这样循环。那总是只循环一次,那有什么意义呢?
  • 这个程序有很多问题。现在我有 3 个不同的功能,一个 fillDeck,一个 shuffle 和一个 deal。那个 for 循环只是意味着它开始从数组中给出卡片 6。也许是一种不好的方法,但它确实有效。感谢您的帮助,它解决了问题。
  • 你可以只分配i = 6 而不是使用循环。
猜你喜欢
  • 2021-12-02
  • 2012-10-16
  • 2023-03-21
  • 2016-04-11
  • 2021-10-10
  • 2012-07-13
  • 2016-06-21
  • 2020-12-03
  • 2020-05-18
相关资源
最近更新 更多