Advertisement
KevinNT03

21 Sticks Game

Mar 11th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <math.h>
  4. #include <cstdlib>
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.     srand(time(NULL));
  11.     int numberPlayers, turns, numberSticks, sticksLeft;
  12.     string player1, player2, firstName, secondName;
  13.    
  14.     sticksLeft = 21;
  15.    
  16.     cout << "Hello! Welcome to 21 Sticks. The game starts with 21 sticks,\n"; // a nice menu
  17.     cout << "and each round, the player can choose to take 1, 2 or 3 sticks.\n";
  18.     cout << "The last player to take a stick loses. You can play with another\n";
  19.     cout << "person or against the computer.\n\n";
  20.    
  21.     cout << "How many people will play? " << endl; //to determine if the game is versus or against the computer
  22.     cin >> numberPlayers;
  23.    
  24.     while (numberPlayers > 2 || numberPlayers < 1){
  25.         cout << "Please enter a valid value (1 or 2)" << endl;
  26.         cin >> numberPlayers;
  27.     } //Error message
  28.    
  29.     turns = rand() % 2; //random start
  30.    
  31.     if (numberPlayers == 2){ //two player game
  32.         cout << "Insert first player's name\n";//to call the players by their names
  33.         cin >> firstName;
  34.         cout << "Insert second player's name\n";
  35.         cin >> secondName;
  36.        
  37.         if (turns == 1){ //to make it easier to alternate between players
  38.             player1 = firstName;
  39.             player2 = secondName;
  40.         }else{
  41.             player1 = secondName;
  42.             player2 = firstName;
  43.         }
  44.        
  45.         cout << "\n" << player2 << " goes first" << endl;
  46.        
  47.         do{
  48.             turns++;  //keeping track of whose turn it is
  49.             turns = turns % 2;
  50.             if (turns == 1){ //to make it easier to alternate between players
  51.                 player1 = firstName;
  52.                 player2 = secondName;
  53.             }else{
  54.                 player1 = secondName;
  55.                 player2 = firstName;
  56.             }
  57.            
  58.             cout << "How many sticks do you take?\n"; //asking the player for a number
  59.             cin >> numberSticks;
  60.            
  61.             while (numberSticks < 1 || numberSticks > 3){
  62.                 cout << "Invalid number. You can only take 1, 2 or 3 sticks.\n";
  63.                 cin >> numberSticks;
  64.             } //Error message
  65.            
  66.             while(sticksLeft - numberSticks < 0){
  67.                 cout << "Invalid number. You can't leave negative sticks." << endl;
  68.                 cin >> numberSticks;
  69.             } //To avoid getting negative sticks
  70.            
  71.             sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
  72.             if(sticksLeft == 0){ //to end the game
  73.                 break;
  74.             }
  75.            
  76.             cout << player1 << " took " << numberSticks << " sticks. There are " << sticksLeft << " left\n\n";
  77.             cout << player2 << " goes next" << endl;
  78.            
  79.         }while (sticksLeft > 0);
  80.        
  81.         cout << "\n" << player2 << " won!" << endl; //the last player to play lost, display who won
  82.        
  83.     }else{ // player against computer
  84.         cout << "Insert your name " << endl;
  85.         cin >> firstName;
  86.        
  87.         if (turns == 1){ //to make it easier to alternate between player and computer
  88.             player1 = firstName;
  89.             player2 = "The computer";
  90.         }else{
  91.             player1 = "The computer";
  92.             player2 = firstName;
  93.         }
  94.        
  95.         cout << "\n" << player2 << " goes first" << endl;
  96.        
  97.         if(player2 == "The computer"){
  98.             do{
  99.                 numberSticks = 1; // if the computer goes first, it takes 1
  100.                
  101.                 sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
  102.                 if(sticksLeft == 0){ //to end the game
  103.                     cout << "You won!";
  104.                     break;
  105.                 }
  106.                
  107.                 cout << player2 << " took " << numberSticks << " stick. There are " << sticksLeft << " left\n\n";
  108.                 cout << "How many sticks do you take?\n"; //asking the player for a number
  109.                 cin >> numberSticks;
  110.                
  111.                 while (numberSticks < 1 || numberSticks > 3){
  112.                     cout << "Invalid number. You can only take 1, 2 or 3 sticks.\n";
  113.                     cin >> numberSticks;
  114.                 } //Error message
  115.                
  116.                 while(sticksLeft - numberSticks < 0){
  117.                     cout << "Invalid number. You can't leave negative sticks." << endl;
  118.                     cin >> numberSticks;
  119.                 } //To avoid getting negative sticks
  120.                
  121.                 sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
  122.                 if(sticksLeft == 0){ //to end the game
  123.                     cout << "You lost!";
  124.                     break;
  125.                 }
  126.                
  127.                 cout << player1 << " took "<< numberSticks << " sticks. There are " << sticksLeft << " left\n\n";
  128.             }while(numberSticks==3);
  129.            
  130.             if(numberSticks==1){ //if the player doesn't take 3, the computer wins
  131.                 numberSticks = 2;
  132.                
  133.                 sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
  134.                 cout << player2 << " took " << numberSticks << " stick. There are " << sticksLeft << " left\n\n";
  135.             }else if(numberSticks==2){
  136.                 numberSticks = 1;
  137.                
  138.                 sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
  139.                 cout << player2 << " took " << numberSticks << " stick. There are " << sticksLeft << " left\n\n";
  140.             }
  141.            
  142.             player2 = firstName;
  143.             player1 = "The computer";
  144.         }
  145.        
  146.         if(player2 == firstName||sticksLeft > 0){
  147.             do{
  148.                 cout << "How many sticks do you take?\n"; //asking the player for a number
  149.                 cin >> numberSticks;
  150.                
  151.                 while (numberSticks < 1 || numberSticks > 3){
  152.                     cout << "Invalid number. You can only take 1, 2 or 3 sticks.\n";
  153.                     cin >> numberSticks;
  154.                 } //Error message
  155.                
  156.                 while(sticksLeft - numberSticks < 0){
  157.                     cout << "Invalid number. You can't leave negative sticks." << endl;
  158.                     cin >> numberSticks;
  159.                 } //To avoid getting negative sticks
  160.                
  161.                 sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
  162.                 if(sticksLeft == 0){ //to end the game
  163.                     cout << "You lost!";
  164.                     break;
  165.                 }
  166.                
  167.                 cout << player2 << " took " << numberSticks << " sticks. There are " << sticksLeft << " left.\n\n";
  168.                 cout << player1 << " goes next" << endl;
  169.                
  170.                 if(numberSticks == 1){ // this is the strategy to win the game
  171.                     numberSticks = 3;
  172.                 }else if(numberSticks == 2){
  173.                     numberSticks = 2;
  174.                 }else if(numberSticks == 3){
  175.                     numberSticks = 1;
  176.                 }
  177.                 sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
  178.                
  179.                 cout << player1 << " took " << numberSticks << " sticks. There are " << sticksLeft << " left.\n\n";
  180.                
  181.             }while(sticksLeft > 0);
  182.         }
  183.     }    
  184.     return 0;
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement