Я пытаюсь смоделировать игру в Крэпс, используя C ++, где выполняется много итераций игры, и записываются каждый выигрыш, проигрыш и количество выпавших бросков для каждой игры.
Правила для каждогоигра:
Бросьте 2 кубика и суммируйте результат. 2, 3 или 12 = проигрыш (1 бросок), 7 или 11 = победа (1 бросок). Если ни один из них, суммированные кубики не бросаются снова, пока игрок не выбрасывает 7 (проигрыш) или снова не бросает свой первоначальный счет (победа).
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<vector> // Allows use of vectors
double random(); // Returns random double between 0 and 1
int dice(double x); // Converts a double between 0 and 1 into an int between 1 and 6
int two_dice(int die_one, int die_two); // Sums 2 ints together, in this case dice rolls
int main()
{
// Sets the seed for rand using the current time, i.e. rand()
// will now always generate from a different starting point
std::srand(std::time(nullptr));
// Vectors to store the results of win/lose
std::vector<int> won;
std::vector<int> lose;
for (int i = 0; i < 10; i++)
{
int num_throws = 1;
// Roll two dice
double x = random(), y = random();
int die_one = dice(x);
int die_two = dice(y);
int roll = two_dice(die_one, die_two);
std::cout << "\nRoll " << i + 1 << " = " << roll << "\n";
if (roll < 4 || roll == 12) // Instant loss
{
lose.push_back(num_throws);
}
else if (roll == 7 || roll == 11) // Instant win
{
won.push_back(num_throws);
}
else // Begin looping rolls until a 7 or original roll is rolled again
{
int point = roll; // First roll
std::cout << "Point is " << point << "\n";
do {
num_throws++;
double x = random(), y = random();
int die_one = dice(x);
int die_two = dice(y);
int roll = two_dice(die_one, die_two); // Roll dice again
std::cout << "Next roll = " << roll << "\n";
std::cout << "Point is " << point << "\n";
} while (roll != 7 || roll != point);
if (roll == 7)
{
lose.push_back(num_throws);
std::cout << "lose\n";
}
else if (roll == point)
{
won.push_back(num_throws);
std::cout << "win\n";
}
else
{
std::cout << "\n\nERROR\n\n";
}
std::cout << "Number of throws was " << num_throws << "\n";
}
}
std::cout << "Number of throws for each win:\n";
for (auto i: won)
std::cout << i << "\n";
std::cout << "\nNumber of throws for each lose:\n";
for (auto i : lose)
std::cout << i << "\n";
return 0;
}
double random() // Returns random double between 0 and 1
{
double rand_num = rand() % 1000 + 1;
return rand_num / 1000;
}
int dice(double x) // Converts a double between 0 and 1 into an int between 1 and 6
{
double dice_roll = (x * 6) + 1;
return dice_roll;
}
int two_dice(int die_one, int die_two) // Sums 2 ints together, in this case dice rolls
{
return die_one + die_two;
}
При выполнении кода условие выхода из цикла do-while никогда не выполняется, даже если при броске фактически = 7 или точка. Это просто петли непрерывно. Я также попытался изменить int point на const int point, но ни одна из них не работает. Кто-нибудь знает, почему это может быть?
Я знаю, что это может быть излишне прокомментировано, но это ради того, чтобы кто-то быстро пытался прочитать код, и я включил много операторов печати, чтобы вы лучше попробовалии выяснить, что не работает.
Редактировать: мой запрос был решен, спасибо за все ответы!