我正在尝试编写 21 点代码,我已经完成了,但是我遇到了这个问题。对于拿更多牌的庄家,它应该继续拿更多牌,直到“dealerTotal”为 17 或更高。但是,我有一个问题,庄家总是只拿一张牌然后站着。这段代码以前有效,并且会继续使用另一张卡,直到超过 16。但是,现在它不起作用了,我使用了一些版本差异检查,没有什么不同。
if (playerTotal <= 21)
{
cout << endl;
cout << "The dealer's two cards are: " << dealercard1 << " & " << dealercard2 << endl;
cout << "The dealer's total is: " << dealerTotal << endl;
while (loop == 1) // will keep looping until it breaks (over 17)
{
if (dealerTotal < 17)
{
dealercardNew = rand() % 13 + 1;
cout << endl;
cout << "The dealer's new card is: " << dealercardNew << endl;
if (dealercardNew > 10) // sets jack, queen and king to 10
{
dealercardNew = 10;
}
dealerTotal = dealerTotal + dealercardNew; // adding new card to total
cout << "The dealer's new total is: " << dealerTotal << endl;
if (dealerTotal > 21) // dealer loss
{
cout << "The dealer's deck went Bust!" << endl;
break;
}
if (dealerTotal > 17 || dealerTotal == 17)
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
}
}
else (dealerTotal > 17 || dealerTotal == 17)
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
}
}
我已经尝试删除最后一个 else 并将其转换为 else if 但两者都不起作用。
将 else 完全删除后,它不会做任何事情
如果没有做任何我能注意到的事情,则添加其他内容。
如果有帮助,将使用此代码创建两张初始卡片:
srand(time(NULL));
Pcard1 = rand() % 13 + 1;
Pcard2 = rand() % 13 + 1;
dealercard1 = rand() % 13 + 1;
dealercard2 = rand() % 13 + 1;
答案 0 :(得分:1)
当 17 <= dealerTotal < 21
:
else (dealerTotal > 17 || dealerTotal == 17)
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
首先,else
格式不正确,需要改为 else if (...)
。但即便如此,break
并未附加到 else
,因此它将在第一次循环迭代结束时无条件执行。这就是庄家只拿一张牌的原因。它需要看起来像这样:
else // dealerTotal >= 17
{ // <-- add this...
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
} // <-- add this...
试试这个:
if (playerTotal <= 21)
{
cout << endl;
cout << "The dealer's two cards are: " << dealercard1 << " & " << dealercard2 << endl;
cout << "The dealer's total is: " << dealerTotal << endl;
while (loop == 1) // will keep looping until it breaks (over 17)
{
if (dealerTotal < 17)
{
dealercardNew = rand() % 13 + 1;
cout << endl;
cout << "The dealer's new card is: " << dealercardNew << endl;
if (dealercardNew > 10) // sets jack, queen and king to 10
{
dealercardNew = 10;
}
dealerTotal += dealercardNew; // adding new card to total
cout << "The dealer's new total is: " << dealerTotal << endl;
if (dealerTotal > 21) // dealer loss
{
cout << "The dealer's deck went Bust!" << endl;
break;
}
if (dealerTotal >= 17)
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
}
}
else
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
}
}
}
然后可以稍微简化一下以删除 dealerTotal >= 17
的冗余检查:
if (playerTotal <= 21)
{
cout << endl;
cout << "The dealer's two cards are: " << dealercard1 << " & " << dealercard2 << endl;
cout << "The dealer's total is: " << dealerTotal << endl;
while (loop == 1) // will keep looping until it breaks (over 17)
{
if (dealerTotal < 17)
{
dealercardNew = rand() % 13 + 1;
cout << endl;
cout << "The dealer's new card is: " << dealercardNew << endl;
if (dealercardNew > 10) // sets jack, queen and king to 10
{
dealercardNew = 10;
}
dealerTotal += dealercardNew; // adding new card to total
cout << "The dealer's new total is: " << dealerTotal << endl;
if (dealerTotal > 21) // dealer loss
{
cout << "The dealer's deck went Bust!" << endl;
break;
}
}
else
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
}
}
}
然后,我建议通过忽略 loop
变量来进一步简化逻辑,这在此代码中没有任何用处:
if (playerTotal <= 21)
{
cout << endl;
cout << "The dealer's two cards are: " << dealercard1 << " & " << dealercard2 << endl;
cout << "The dealer's total is: " << dealerTotal << endl;
while (dealerTotal < 17)
{
dealercardNew = rand() % 13 + 1;
cout << endl;
cout << "The dealer's new card is: " << dealercardNew << endl;
if (dealercardNew > 10) // sets jack, queen and king to 10
{
dealercardNew = 10;
}
dealerTotal += dealercardNew; // adding new card to total
cout << "The dealer's new total is: " << dealerTotal << endl;
}
if (dealerTotal > 21) // dealer loss
{
cout << "The dealer's deck went Bust!" << endl;
}
else
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
}
}