Computer Science Canada Programming C, C++, Java, PHP, Ruby, Turing, VB   Username:   Password: Wiki   Blog   Search   Turing   Chat Room  Members
Author Message
a22asin

Posted: Mon Sep 15, 2014 6:54 pm   Post subject: Dice Game Help Please!

Hi, so i finally started learning c++ in my 2nd year uni. I got my first assigment where i have to create a dice game for 2 players or a player and a bot where each player takes turn rolling the dice. The game continues till one user reaches a score of 100 or more. If the player roles a 1, the player doesnt get any points. Furthermore, when one player finally reaches 100 or more, the other player gets one last time to role and try to catch up.

My program works for the most part, but my problem is that when the player chooses to play against a bot, the program seems to skip the ask user to continue and just keeps playing the game till a winner occurs. The part the program seems to skip is separated

 code: /* Press Your Luck is a dice game where the players take turn rolling the die till one of the player reaches 100 points.  */ #include #include #include using namespace std; int main() {                 int score1=0;         int score2=0;         int tempscore=0;         int dice=0;         int whoTurn =1;         char cont = 'y';         char player;         bool lastTry = false;         bool lastGame = false;         srand(time(NULL));                 cout << "Do you want to play against a player (p) or a bot (b): ";         cin >> player;                 do {                 //Runs through the current player's turn                 while (cont == 'y'){                         cout << "Player " << whoTurn << ": Your Turn" << endl;                         dice = rand()%6 + 1;                         cout << "Dice :" <<  dice << endl;                                                 //checks the results from the die and does the according actions                         if (dice != 1 ){                                 tempscore = tempscore + dice;                                 if (player == 'p'){                                          cout << "Your score is currently: " << tempscore << endl << "Would you like to continue (y/n)?: "<< endl;                                         cin >> cont;                                 }else if (player == 'b' && whoTurn == 2){                                         if((rand()%2 + 1) == 1){                                                 cout << "Bot is continuing..." << endl;                                                 cont = 'y';                                         }else if ((rand()%2 + 1) == 2){                                                 cout << "Bot is ending turn..." << endl;                                                 cont = 'n';                                         }                                 }                         }else if (dice == 1){                                 tempscore = 0;                                 cout << "Sorry, your score is 0 and you must end your turn." << endl;                                 cont = 'n';                         }                 }                        //checks whose turn it is and applies the score to the correct player                       if (whoTurn == 1){                         score1 = score1 +  tempscore;                         tempscore = 0;                         whoTurn = 2;         }else if (whoTurn == 2){                         score2 = score2 + tempscore;                         tempscore = 0;             whoTurn = 1;                 }                                 //outputs the current score                           cout <= 100 || score2 >= 100){                         if (lastTry == true){                                 lastGame = true;                         }                         if (lastTry == false){                                 lastTry = true;                                 if (score1 >= 100){                                         cout << "Player1 is winning! Player2, you have one last try to catch up!" << endl;                                 }else if (score2 >= 100){                                         cout << "Player2 is winning! Player1, you have one last try to catch up!" << endl;                                 }                         }                 }         }while (lastGame == false);                 //Outputs the winner of the game         if (score1 > score2){                 cout << endl << "Congrats Player1, you won the game!" << endl << endl;         }else if (score1 < score2){                 cout << endl << "Congrats Player2, you won the game!" << endl << endl;         }else if (score1 == score2){                 cout << endl << "Tie, Congrats Player1 and Player2, you have tied the game!" << endl << endl;         }        }

Zren

Posted: Mon Sep 15, 2014 8:07 pm   Post subject: RE:Dice Game Help

The exit condition is still checked when you use continue.

http://msdn.microsoft.com/en-us/library/6e3dc2z3.aspx

Quote:

In a do or while loop, the next iteration starts by reevaluating the controlling expression of the do or while statement.

Continue is designed to just skip the rest of the code in the current iteration.

If you are only checking the exit conditions after player 2 rolls, then only ____ the ____ _____ after player _ rolls.
a22asin

Posted: Mon Sep 15, 2014 8:24 pm   Post subject: Re: RE:Dice Game Help

Zren @ Mon Sep 15, 2014 8:07 pm wrote:
The exit condition is still checked when you use continue.

http://msdn.microsoft.com/en-us/library/6e3dc2z3.aspx

Quote:

In a do or while loop, the next iteration starts by reevaluating the controlling expression of the do or while statement.

Continue is designed to just skip the rest of the code in the current iteration.

If you are only checking the exit conditions after player 2 rolls, then only ____ the ____ _____ after player _ rolls.

Ok, but thats not my problem now, thanks though. i edited my post with the new problem im encountering instead of making a new one.
Zren

Posted: Tue Sep 16, 2014 12:38 am   Post subject: RE:Dice Game Help Please!

 c++: bool lastGame = false; cout << "Do you want to play against a player (p) or a bot (b): "; cin >> player; do {     while (cont == 'y') {         } } while (lastGame == false);

Do you see the bug now? At what point will you enter in inner loop? What is the value of cont after first entering the outer loop?
a22asin

Posted: Tue Sep 16, 2014 7:57 am   Post subject: Re: RE:Dice Game Help Please!

Zren @ Tue Sep 16, 2014 12:38 am wrote:
 c++: bool lastGame = false; cout << "Do you want to play against a player (p) or a bot (b): "; cin >> player; do {     while (cont == 'y') {         } } while (lastGame == false);

Do you see the bug now? At what point will you enter in inner loop? What is the value of cont after first entering the outer loop?

To be honest, i dont see the bug. cont is intilized with 'y', since the outer loop is a do while, the program will run atleast once before checking conditions. The value of cont after the while loop is the problem. It seems that the program always finds the "else if (player == 'b' && whoTurn == 2){" to be true even when it shouldnt be. It doesnt make sense to me.

Also, the problem seems to only occur when the player selects to play against a bot (b).
DemonWasp

Posted: Tue Sep 16, 2014 9:33 am   Post subject: RE:Dice Game Help Please!

 code: if((rand()%2 + 1) == 1){     cout << "Bot is continuing..." << endl;     cont = 'y'; }else if ((rand()%2 + 1) == 2){     cout << "Bot is ending turn..." << endl;     cont = 'n'; }

If the first expression is false, then the second expression will be evaluated, which will call rand() again. That's probably not what you meant to do.

But that's not the real bug. Look at this;

 code: if (player == 'p'){      // ...snip... }else if (player == 'b' && whoTurn == 2){     // ...snip... }

Your program initializes whoTurn = 1. If player == 'b', then what happens?
a22asin

Posted: Tue Sep 16, 2014 11:04 am   Post subject: Re: RE:Dice Game Help Please!

DemonWasp @ Tue Sep 16, 2014 9:33 am wrote:
 code: if((rand()%2 + 1) == 1){     cout << "Bot is continuing..." << endl;     cont = 'y'; }else if ((rand()%2 + 1) == 2){     cout << "Bot is ending turn..." << endl;     cont = 'n'; }

If the first expression is false, then the second expression will be evaluated, which will call rand() again. That's probably not what you meant to do.

But that's not the real bug. Look at this;

 code: if (player == 'p'){      // ...snip... }else if (player == 'b' && whoTurn == 2){     // ...snip... }

Your program initializes whoTurn = 1. If player == 'b', then what happens?

the rand() in the if statment is a way to make the AI choose yes or no. Uhm, i kinda see whats the problem; my 1st if only considers if 'player == p' and the else if only considers if player == b AND whoTurn == 2. So technically my if statment doesnt consider player1's. Damn this is confusing lol. Thanks as i got it to work.
benjemin23

Posted: Fri Jan 03, 2020 2:14 am   Post subject: Re: Dice Game Help Please!

Hello there,

a22asin wrote:

DemonWasp @ Tue Sep 16, 2014 9:33 am wrote:
 code: if((rand()%2 + 1) == 1){     cout << "Bot is continuing..." << endl;     cont = 'y'; }else if ((rand()%2 + 1) == 2){     cout << "Bot is ending turn..." << endl;     cont = 'n'; }

If the first expression is false, then the second expression will be evaluated, which will call rand() again. That's probably not what you meant to do.

But that's not the real bug. Look at this;

 code: if (player == 'p'){      // ...snip... }else if (player == 'b' && whoTurn == 2){     // ...snip... }

Your program initializes whoTurn = 1. If player == 'b', then what happens?

the rand() in the if statment is a way to make the AI choose yes or no. Uhm, i kinda see whats the problem; my 1st if only considers if 'player == p' and the else if only considers if player == b AND whoTurn == 2. So technically my if statment doesnt consider player1's. Damn this is confusing lol. Thanks as i got it to work.

Well done and i try to use this code but code running problem so what can i do?

 Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First

Page 1 of 1  [ 8 Posts ]
 Jump to:  Select a forum  CompSci.ca ------------ - Network News - General Discussion     General Forums   -----------------   - Hello World   - Featured Poll   - Contests     Contest Forums   -----------------   - DWITE   - [FP] Contest 2006/2008   - [FP] 2005/2006 Archive   - [FP] 2004/2005 Archive   - Off Topic     Lounges   ---------   - User Lounge   - VIP Lounge     Programming -------------- - General Programming     General Programming Forums   --------------------------------   - Functional Programming   - Logical Programming   - C     C   --   - C Help   - C Tutorials   - C Submissions   - C++     C++   ----   - C++ Help   - C++ Tutorials   - C++ Submissions   - Java     Java   -----   - Java Help   - Java Tutorials   - Java Submissions   - Ruby     Ruby   -----   - Ruby Help   - Ruby Tutorials   - Ruby Submissions   - Turing     Turing   --------   - Turing Help   - Turing Tutorials   - Turing Submissions   - PHP     PHP   ----   - PHP Help   - PHP Tutorials   - PHP Submissions   - Python     Python   --------   - Python Help   - Python Tutorials   - Python Submissions   - Visual Basic and Other Basics     VB   ---   - Visual Basic Help   - Visual Basic Tutorials   - Visual Basic Submissions     Education ----------- - Student Life   Graphics and Design ----------------------- - Web Design     Web Design Forums   ---------------------   - (X)HTML Help   - (X)HTML Tutorials   - Flash MX Help   - Flash MX Tutorials   - Graphics     Graphics Forums   ------------------   - Photoshop Tutorials   - The Showroom   - 2D Graphics   - 3D Graphics     Teams ------ - dTeam Public

 Style: Appalachia blueSilver eMJay subAppalachia subBlue subCanvas subEmjay subGrey subSilver subVereor Search: