【问题标题】:How to ask each player if they want another card如何询问每位玩家是否想要另一张牌
【发布时间】:2017-08-22 00:30:15
【问题描述】:

进行了一些更改..但仍然无法正常工作。现在发生的情况是,如果我输入“y”,程序什么也没有发生,如果我输入“n”,它会继续 for 循环。

这是我目前所拥有的。玩家由我的阵列线代表,他们的手是 cols。 CardtabCardHandTab 是 wchar 代表他们拥有的卡片 EX: 1♥ 其余的是包含每张卡片值的模拟数组。

实际上刚刚意识到,无论他们的回答如何,他们都会得到一张卡片,因为在执行代码后会检查条件,但这并不能解决我的问题..

void anotherCard(const wchar_t* CardTab[], int ValTab[], const wchar_t* CardHandTab[4][5], int ValHandTab[4][5])
{
    for (int i = 0; i < 4; i++)
    {
        char answer = 0;
        wcout << "Player" << i + 1 << "Would you like another? y/n" << endl;
        cin >> answer;
        while (answer == 'y' || answer == 'Y')
        {
            int x;
            do
            {
                x = rand() % 51 + 0;
            } while (CardTab[x] == NULL);

            CardHandTab[i][3] = CardTab[x];
            ValHandTab[i][3] = ValTab[x];
            CardTab[x] = NULL;
            ValTab[x] = 0;
        }
    }
}

【问题讨论】:

  • 将代码移入while循环。
  • answer 一旦进入外循环就不会改变。所以如果answer == 'y'(应该在循环的顶部而不是底部检查),它当然会永远循环。
  • 不是你问的,我只是觉得我必须指出来。 rand 在分布和质量方面绝对可怕。您应该使用现代 C++ random 设施。
  • 我正在使用 srand(time(NULL));这就是我现在所需要的。

标签: c++ blackjack


【解决方案1】:
 I forgot it needs a way to exit.. adding a break; fixed it 

   void anotherCard(const wchar_t* CardTab[], int ValTab[], const wchar_t* CardHandTab[4][5], int ValHandTab[4][5])
    {
        for (int i = 0; i < 4; i++)
        {
            char answer = 0;
            wcout << "Player" << i + 1 << "Desirez vous une autre carte? y/n" << endl;
            cin >> answer;
            while (answer == 'y' || answer == 'Y')
            {
                int x;
                do
                {
                    x = rand() % 51 + 0;
                } while (CardTab[x] == NULL);

                CardHandTab[i][3] = CardTab[x];
                ValHandTab[i][3] = ValTab[x];
                CardTab[x] = NULL;
                ValTab[x] = 0;
                wcout << CardHandTab[i][3];
                break;
            }
        }
    }

【讨论】:

  • 也许你想使用 if() 而不是 while()。创建循环仅在第一次迭代时强制中断是不寻常/毫无意义的。
  • x = rand() % 51 + 0; 只会给你 51 个可能的值 (0 .. 50)。
猜你喜欢
  • 2023-04-02
  • 2016-06-02
  • 1970-01-01
  • 2020-02-15
  • 2020-02-02
  • 2020-01-31
  • 2013-05-09
  • 1970-01-01
  • 2018-05-18
相关资源
最近更新 更多