我是一个初学者,使用ctime和分配了随机数的变量时,我并没有完全理解我在做什么错。每当我调用newCard变量时,它都会不断返回相同的值。对于任何反馈,我们都表示感谢!
该程序是循环的回顾,不能包含用户定义的函数
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(static_cast<unsigned>(time(0)));
int total = 0;
int card1 = rand() % 10 + 1;
int newCard = rand() % 10 +1;
char deal, replay;
do
{
cout << " First Cards: " << card1 << ", " << newCard;
total = card1 + newCard;
cout << "\n Total: " << total;
cout << "\n Do you want another card? (Y/N) ";
cin >> deal;
while(deal == 'y' || deal == 'Y')
{
cout << "\n New Card = " << newCard;
total += newCard;
cout << "\n Total: " << total;
if(total == 21)
{
cout << "\n Congratulations!! BLACKJACK! ";
cout << "\n Would you like to play again? (Y/N):";
cin >> replay;
break;
}
else if(total > 21)
{
cout << "\n BUST ";
cout << "\n Would you like to play again? (Y/N):";
cin >> replay;
break;
}
cout << "\n Would you like another card? (Y/N): ";
cin >> deal;
}
while (deal == 'n' || deal == 'N')
{
cout << "\n Would you like to play again? (Y/N): ";
cin >> replay;
}
}
while(replay == 'y' || replay == 'Y');
while (replay =='n' || replay == 'N')
{
cout << "\n Exiting BlackJack \n\n";
return 0;
}
}
答案 0 :(得分:1)
如果要生成随机数,则需要致电rand()
。
所以在这里:
int newCard = rand() % 10 +1;
我掷出一个10面的骰子,它朝上5,所以我在标有newCard的纸上写下5。
现在,每当我看我的纸上贴有newCard的纸时,它仍然会说5。每次我看时它都不会改变。
如果要再次滚动,则需要再次滚动并写下新号码,方法是再次运行:
newCard = rand() % 10 +1;
答案 1 :(得分:0)
int card1 = rand() % 10 + 1;
int newCard = rand() % 10 +1;
您正确地发行了前两张牌(a),但是,在此之后的任何时候您实际上都不会发行下一张牌。取而代之的是,您检查的每张据认为是新的卡都只会是第二张发卡的重复。
您需要做的是在玩家击打时实际生成 new 卡。
这就像在循环中插入一行一样简单:
while(deal == 'y' || deal == 'Y')
{
newCard = rand() % 10 +1; // <<<--- this one.
cout << "\n New Card = " << newCard;
:
}
(a)对于大酒杯来说,不是 quitet ,因为十值卡的数量比普通卡多(10 / J / Q / K的值均为十) )。
更好的方法是使用类似以下内容的
newCard = rand() % 13 + 1;
if (newCard > 10) newCard = 10;
答案 2 :(得分:0)
您的问题
像这样,您一开始只打一次rand()
int card1 = rand() % 10 + 1;
int newCard = rand() % 10 +1;
但是,每次您想要一个新值时,都需要像这样重新分配newCard
newCard = rand() % 10 +1;
在再次使用之前。您必须反复调用它以获得新值。
提示
仅因为尚未提及here,所以它很好地说明了为什么您不使用std::rand()
的原因。虽然其他答案也将产生随机数,但它们的分布可能不正确。 C++
提供了一种更好的获取随机数的方法,我建议您尽快习惯随机数。
std::random_device rd; //Will be used to obtain a seed for the random number engine
std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
std::uniform_int_distribution<> dis(1, 10);
int newCard = dis(mt);
您需要以下标头
#include <random>
#include <iostream>
如果您需要更好的随机性,可以使用random_device
而不是mt19937生成器。
因此,我建议一开始就这样做,并从您的代码中删除rand()
。