消除游戏问题,忽略if语句

时间:2018-10-28 15:27:17

标签: c++

我目前正在上课,希望我做一个掷骰子游戏。

问题出在第二个while语句的int main中,该问题将点与滚动进行了比较。它会忽略if语句并再次执行循环,即使它达到了关键点或7。有时它也会按应有的方式工作,而有时它会重复执行几次。

#include "pch.h"
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int diceRoll() {

    int x = 0, y = 0;

    x = rand() % 6 + 1;
    y = rand() % 6 + 1;

    cout << "You rolled a " << x << " and a " << y << " which comes out to ------> " << x + y << " <-------" << endl;

    return x + y;
}

bool playAgain() {
    char ans;
    cout << "Do you want to play again ?? Y to continue, N to quit." << endl;
    cin >> ans;

    while (ans != 'Y' || ans != 'y' || ans != 'n' || ans != 'N') {
        if (ans == 'Y' || ans == 'y')
        {
            return true;
        }
        if (ans == 'N' || ans == 'n')
        {
            return false;
        }       
        cout << "Do you want to play again ?? Y to continue, N to quit." << endl;
        cin >> ans;
    }
}


int main()
{
    srand(time(NULL));
    int dices, bid, point = 0;
    int money = 50;
    bool gameRunning = true;
    bool didTheyWin;

    while (gameRunning == true) {
        if (money == 0) {
            cout << "You have no money, ending game." << endl;
            break;
        }

        cout << "Please enter a bid. You currently have $" << money << endl;
        cout << "$";
        cin >> bid;

        while (bid > money) {
            cout << "Please bet below your current balance: $" << money << endl;
            cout << "$";
            cin >> bid;
        }

        dices = diceRoll();
        didTheyWin = false;
        if ((dices == 7) || (dices == 11)) {
            cout << "You won $" << bid << " !" << endl;
            money = money + bid;
        }
        else if ((dices == 2) || (dices == 3) || (dices == 12)) {
            cout << "You LOSE! You lost $" << bid << " !" << endl;
            money = money - bid;
        }
        else  {
            point = dices;
            cout << "The target number is > " << point << " <" << endl;
            cout << "If you hit a 7 you lose, if you hit the target you win. \nYou automatically roll until one of these two things happen.\n";
            while (didTheyWin == false) {
                diceRoll();
                dices = diceRoll();
                if (dices == point) {
                    cout << "You won $" << bid << " !" << endl;
                    money = money + bid;
                    cout << "You now have $" << money << endl;
                    didTheyWin = true;
                }
                else if (dices == 7) {
                    cout << "You LOSE! You lost $" << bid << " !" << endl;
                    money = money - bid;
                    cout << "You now have $" << money << endl;
                    didTheyWin = true;
                }
            }
        }
        gameRunning = playAgain();
    }

    cout << "Thanks for playing. _END_" << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

您两次致电diceRoll,而忽略了您从第一次致电中得到的回报。您会看到显示了第一卷的结果,但是它们将被忽略,而您将再次滚动。