Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <math.h>
- #include <cstdlib>
- #include <bits/stdc++.h>
- using namespace std;
- int main()
- {
- srand(time(NULL));
- int numberPlayers, turns, numberSticks, sticksLeft;
- string player1, player2, firstName, secondName;
- sticksLeft = 21;
- cout << "Hello! Welcome to 21 Sticks. The game starts with 21 sticks,\n"; // a nice menu
- cout << "and each round, the player can choose to take 1, 2 or 3 sticks.\n";
- cout << "The last player to take a stick loses. You can play with another\n";
- cout << "person or against the computer.\n\n";
- cout << "How many people will play? " << endl; //to determine if the game is versus or against the computer
- cin >> numberPlayers;
- while (numberPlayers > 2 || numberPlayers < 1){
- cout << "Please enter a valid value (1 or 2)" << endl;
- cin >> numberPlayers;
- } //Error message
- turns = rand() % 2; //random start
- if (numberPlayers == 2){ //two player game
- cout << "Insert first player's name\n";//to call the players by their names
- cin >> firstName;
- cout << "Insert second player's name\n";
- cin >> secondName;
- if (turns == 1){ //to make it easier to alternate between players
- player1 = firstName;
- player2 = secondName;
- }else{
- player1 = secondName;
- player2 = firstName;
- }
- cout << "\n" << player2 << " goes first" << endl;
- do{
- turns++; //keeping track of whose turn it is
- turns = turns % 2;
- if (turns == 1){ //to make it easier to alternate between players
- player1 = firstName;
- player2 = secondName;
- }else{
- player1 = secondName;
- player2 = firstName;
- }
- cout << "How many sticks do you take?\n"; //asking the player for a number
- cin >> numberSticks;
- while (numberSticks < 1 || numberSticks > 3){
- cout << "Invalid number. You can only take 1, 2 or 3 sticks.\n";
- cin >> numberSticks;
- } //Error message
- while(sticksLeft - numberSticks < 0){
- cout << "Invalid number. You can't leave negative sticks." << endl;
- cin >> numberSticks;
- } //To avoid getting negative sticks
- sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
- if(sticksLeft == 0){ //to end the game
- break;
- }
- cout << player1 << " took " << numberSticks << " sticks. There are " << sticksLeft << " left\n\n";
- cout << player2 << " goes next" << endl;
- }while (sticksLeft > 0);
- cout << "\n" << player2 << " won!" << endl; //the last player to play lost, display who won
- }else{ // player against computer
- cout << "Insert your name " << endl;
- cin >> firstName;
- if (turns == 1){ //to make it easier to alternate between player and computer
- player1 = firstName;
- player2 = "The computer";
- }else{
- player1 = "The computer";
- player2 = firstName;
- }
- cout << "\n" << player2 << " goes first" << endl;
- if(player2 == "The computer"){
- do{
- numberSticks = 1; // if the computer goes first, it takes 1
- sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
- if(sticksLeft == 0){ //to end the game
- cout << "You won!";
- break;
- }
- cout << player2 << " took " << numberSticks << " stick. There are " << sticksLeft << " left\n\n";
- cout << "How many sticks do you take?\n"; //asking the player for a number
- cin >> numberSticks;
- while (numberSticks < 1 || numberSticks > 3){
- cout << "Invalid number. You can only take 1, 2 or 3 sticks.\n";
- cin >> numberSticks;
- } //Error message
- while(sticksLeft - numberSticks < 0){
- cout << "Invalid number. You can't leave negative sticks." << endl;
- cin >> numberSticks;
- } //To avoid getting negative sticks
- sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
- if(sticksLeft == 0){ //to end the game
- cout << "You lost!";
- break;
- }
- cout << player1 << " took "<< numberSticks << " sticks. There are " << sticksLeft << " left\n\n";
- }while(numberSticks==3);
- if(numberSticks==1){ //if the player doesn't take 3, the computer wins
- numberSticks = 2;
- sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
- cout << player2 << " took " << numberSticks << " stick. There are " << sticksLeft << " left\n\n";
- }else if(numberSticks==2){
- numberSticks = 1;
- sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
- cout << player2 << " took " << numberSticks << " stick. There are " << sticksLeft << " left\n\n";
- }
- player2 = firstName;
- player1 = "The computer";
- }
- if(player2 == firstName||sticksLeft > 0){
- do{
- cout << "How many sticks do you take?\n"; //asking the player for a number
- cin >> numberSticks;
- while (numberSticks < 1 || numberSticks > 3){
- cout << "Invalid number. You can only take 1, 2 or 3 sticks.\n";
- cin >> numberSticks;
- } //Error message
- while(sticksLeft - numberSticks < 0){
- cout << "Invalid number. You can't leave negative sticks." << endl;
- cin >> numberSticks;
- } //To avoid getting negative sticks
- sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
- if(sticksLeft == 0){ //to end the game
- cout << "You lost!";
- break;
- }
- cout << player2 << " took " << numberSticks << " sticks. There are " << sticksLeft << " left.\n\n";
- cout << player1 << " goes next" << endl;
- if(numberSticks == 1){ // this is the strategy to win the game
- numberSticks = 3;
- }else if(numberSticks == 2){
- numberSticks = 2;
- }else if(numberSticks == 3){
- numberSticks = 1;
- }
- sticksLeft = sticksLeft - numberSticks; // keeping track of the sticks left
- cout << player1 << " took " << numberSticks << " sticks. There are " << sticksLeft << " left.\n\n";
- }while(sticksLeft > 0);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement