в то время как цикл действует ... по какой-то причине не делает того, что должен

У меня есть этот код для простой программы броска игральных костей с единицами ставок и всем остальным .. . вы делаете ставку, если у вас все получается правильно, вы получаете сумму ставки u, умноженную на количество выбранных вами кубиков ... если вы ошибаетесь, но немного (в диапазоне выбранного вами числа + - количество кубиков u выбрал) вы ничего не потеряете, и если вы действительно потеряете, вы проиграете ...

У меня есть цикл while, который в основном учитывает две вещи: пока у пользователя либо есть BU, либо если они их не сделали. t введите «нет» или «нет», чтобы повторить попытку ... но по какой-то причине это просто не работает ... лол. какие идеи почему? система ставок работает, она распознает, что betting.currentBU == 0, но цикл while просто не реагирует, lol.

#include <iostream>
#include <string>
#include <cstdlib>
#include <time.h>
#include <limits>

using namespace std;

struct Dices{ // structure containing all the dice related integers
    int dice;
    int total;
    int  choice;
} Dices = {0,0,0};

struct betting{ // structure containing all the betting integers
    int currentBU;
    int bettedBU;
} betting = {100, 0};


int DiceThrow(int dicechoice, int totalnum){ // a method for the dice being rolled
    for(int i=1; i <= dicechoice;i++){
            totalnum = totalnum + (rand() % 6 + 1); //total number, repeated by the loop for every dice
        }
    return totalnum;
}

int winningbet(int dicea, int cBU, int bBU){ // in case the user guesses it right
    std::cout << "Congratulations, you got it right! \n";
    cBU = cBU + (dicea * bBU); // give him money...
    return(cBU);
}
int losingbet(int dicen, int totaln, int choicen, int cBU2, int bBU2){ //in case the user guesses wrong 
    if(choicen > (totaln+dicen) || choicen < (totaln+dicen)) // checks how wrong he is, if he's too off, he loses BUs
        cBU2 = cBU2-bBU2;
    else
        std::cout << "you we're so close, you don't lose any BUs! \n"; //if he was really close, just let him know he was close
    return(cBU2);

}

int main(){
    string decision; // decision if they want to keep playing or not
    srand ( (unsigned int)time(NULL) );
    while(decision != "no" || decision != "No" || betting.currentBU != 0) // makes sure of the decision AND that he still has BUs
    {
        Dices.total = 0;
        std::cout << "how many dice would you like to use? ";
        std::cin >> Dices.dice;
        std::cout << "how many How many BUs are you betting?(" << betting.currentBU << " BUs left) ";
        std::cin >> betting.bettedBU;
        if(betting.bettedBU > betting.currentBU){ // if he doesn't have enough BUs
            std::cout << "Sorry, you don't have that many BUs...";
            std::cout << "Want to try again with a different amount?(Yes/No) ";
            std::cin >> decision;
        }
        else{
            std::cout << "guess what number was thrown: ";
            std::cin >> Dices.choice;
            Dices.total = DiceThrow(Dices.dice, Dices.total);
            if(Dices.choice == Dices.total){
                betting.currentBU = winningbet(Dices.dice, betting.currentBU, betting.bettedBU);
                std::cout << "Want to try again?(Yes/No) ";
                std::cin >> decision;
            } else{
                std::cout << "Sorry, the number was " << Dices.total << "... better luck next time \n" ;
                betting.currentBU = losingbet(Dices.dice, Dices.total, Dices.choice, betting.currentBU, betting.bettedBU);
                if(betting.currentBU > 0){
                    std::cout << "Want to try again?(Yes/No) ";
                    std::cin >> decision;
                }
             }

        }
    }
    if(betting.currentBU == 0){
        std:cout << "sorry, you ran out of BUs...";
        std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    }
    else{
        std::cout << "your final BU count is: " << betting.currentBU << "\n";
        std::cout << "Thanks for playing, see you next time! (Press ENTER to terminate...)";
        std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    }
    return 0;

}
0
задан Gal Appelbaum 15 February 2012 в 03:07
поделиться