I have a C++ program that I can not get to run. Can you
please help me find the problem. The code is listed below.
*************************************/
Code:
#include <iostream>
using namespace std;
// Let's define constants to identify the sides
const bool HUMAN_PLAYER = true;
const bool COMPUTER_PLAYER = false;
// Function Prototypes - Messages to the player
void welcomeMessage();
void congratulateWinner( bool theWinner );
void gameStatus( int pileSize );
// Function Prototypes - User Interface
// Decide who gets to play first
bool pickFirstPlayer();
// Function Prototypes - Moves
int getHumanPlayerMove( int pileSize );
int getComputerPlayerMove( int pileSize );
// Function Prototypes - Predicates
bool isGameOver( int pileSize );
// The main NIM Program
int main()
{
// Start by saying hello to the player
welcomeMessage();
// Now, let's ask the human player who goes first
bool currentPlayer = pickFirstPlayer();
// Now that we know who plays first, we can start
// the game by initializing the heap of sticks
int nimSticks = 22;
// CORE GAME LOOP: as long as there are sticks left,
// we'll need to get moves from the opponents
while( !isGameOver( nimSticks) )
{
// Show the status of the game
gameStatus( nimSticks );
// Let's get a move from the current player
int currentPlayerMove;
if( currentPlayer == HUMAN_PLAYER )
currentPlayerMove = getHumanPlayerMove( nimSticks );
else
currentPlayerMove = getComputerPlayerMove( nimSticks );
// Now that we know how many sticks the current
// player wants to take, we remove them from the
// pile
nimSticks -= currentPlayerMove;
// Do we have a winner?
if( isGameOver( nimSticks ) )
congratulateWinner( currentPlayer );
// If there are sticks left in the pile, it is
// now the other player's turn
else
currentPlayer = !currentPlayer;
}
// And we're done!
return 0;
}
// welcomeMessage() - Say Hi to the player
void welcomeMessage()
{
cout << "Welcome to the Game of Single-Pile Nim!" << endl;
cout << "---------------------------------------" << endl << endl;
return;
}
// congratulateWinner() - Tell the player who won
void congratulateWinner( bool theWinner )
{
// If so, who has just taken the last stick?
if( HUMAN_PLAYER == theWinner )
{
cout << "You win. Congratulations!" << endl;
}
else
{
cout << "I win! Better luck next time..." << endl;
}
return;
}
// gameStatus() - Tell the player how many sticks
// are left in the pile before a turn
void gameStatus( int pileSize )
{
int stickStatus = pileSize;
cout << "There are/is " <<stickStatus << " stick(s) left." <<endl<<endl;
return;
}
// pickFirstPlayer() - Ask the user who goes first
bool pickFirstPlayer()
{
int count = 2;
int compTurn;
char start;
cout << "IT'S NIM TIME!!!!!!" <<endl<<endl;
while(count >= 0)
{
cout << "Who starts? [H]uman or [C]omputer?" <<endl;
cin >> start;
switch(start)
{
case 'C':
case 'c':cout << "Computer start." <<endl; count = -1; compTurn = true; break;
case 'H':
case 'h':cout << "Human start." <<endl; count = -1; true;compTurn = true; break;
default:cout << count << " try(s)left" <<endl;
}
if(count == 0)
cout << "NO GO!!!!! Sorry." <<endl<<endl;
--count;
}
//return(compTurn);
return true;
}
// getHumanPlayerMove() - Ask the player for a number
// of sticks to take out of the pile
int getHumanPlayerMove( int pileSize )
{
int pickstick;
int no = 3;
int nimSticks = pileSize;
while(no != 0)
{
cout << "Take how many sticks?: ";
cin >> pickstick;
cout << endl;
if(1 <= pickstick && pickstick <= 4)
{
nimSticks -= pickstick;
cout<< "Number of sticks left: " << nimSticks << endl << endl;
/*if(winner() == 1)
{
cout << "The hu-man wins!" <<endl;
exit(0);
}*/
no = 0;
}
else
{
no--;
cout << "Error. " << no << " trys left. " <<endl;
}
}
return 0;
}
// getComputerPlayerMove() - Let the machine play
int getComputerPlayerMove( int pileSize )
{
int nimSticks = pileSize;
int pick = nimSticks - nimSticks % (1 + 4);
int just = nimSticks - pick;
if (just == 0)
{
just = 1 + rand() % (4 - 1 + 1);
pick -= just;
}
nimSticks -= just;
cout << "Computer takes " << just <<" stick(s)." <<endl;
cout << "Their are " << pick << " left." <<endl;
/*if(winner() == 1)
{
cout << "The COMPUTER wins!" <<endl;
exit(0);
}*/
return 0;
}
// isGameOver() - Have we reached endgame conditions?
// if there are no sticks left, yes
bool isGameOver( int pileSize )
{
if(int nimSticks = true)
cout<< "The game is over." <<endl<<endl;
return true;