#include <cstdio>
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int printSticks(int sticks);
int getMove(int sticks);
int computerMove(int sticks);
/*****************************************************************
ANROP: playGame();
VERSION: xxxxx xx
UPPGIFT: Låter användaren spela ett parti pinne mot datorn
******************************************************************/
void playGame()
{
int numSticks = 15 + (rand() % 11); // slump 15..25
while (numSticks > 0)
{
printSticks(numSticks);
cout << "\tHur många vill du plocka? ";
int userMove = getMove(numSticks);
numSticks -= userMove;
if(numSticks <= 0)
{
cout << "Du vann, turgubbe!" << endl;
break;
}
cout << "\nResultat:\t\t";
for (int i = 0; i < numSticks; i++) // skriver ut resultat i pinnar
{
if (i >= 0 && ((i % 5) == 0))
cout << " |";
else
cout << "|";
}
int myMove = computerMove(numSticks);
cout << "\tDatorn tar\t" << myMove << endl;
numSticks -= myMove;
if (numSticks <= 0)
{
cout << "Datorn vann, looooser!!" << endl;
break;
}
}
}// playGame
/*****************************************************************
ANROP: int num = getMove(sticks);
UPPGIFT: Läser in användarens drag (iterativt tills ett giltigt drag anges)
INPAR: sticks = antalet stickor i den aktuella högen
RETUR: num = användares drag, 1 eller, 2 men <= sticks
ANM: vid anrop måste sticks > 0, ty annars finns inget giltigt drag
******************************************************************/
int getMove(int sticks)
{
if (sticks > 0)
{
int plocka = 0;
cin >> plocka;
while (plocka != 1 || plocka != 2)
{
if (plocka == 1 && sticks > 0)
{
return 1;
}
else if (plocka == 2 && sticks > 1)
{
return 2;
}
else
{
cout << "Gick ej att plocka " << plocka << "" << " st stickor, välj igen: ";
cin >> plocka;
}
}
}
else
{
return 0;
}
return 0;
}//getMove
/*****************************************************************
ANROP: int num = computerMove(sticks);
UPPGIFT: Returnerar datorns drag
INPAR: sticks = Antalet stickor i den aktuella högen
RETUR: num = datorns drag, 1 eller 2 men <= sticks
ANM: vid anrop måste sticks > 0, ty annars finns inget giltigt drag
******************************************************************/
int computerMove(int sticks)
{
if (sticks > 0)
{
int plocka = 0;
plocka = rand() % 3;
while (plocka != 1 || plocka != 2)
{
if (plocka == 1 && sticks >= 0)
{
return 1;
}
else if (plocka == 2 && sticks >= 1)
{
return 2;
}
else
{
plocka = rand() % 3;
}
}
}
else
{
return 0;
}
return 0;
}// computerMove()
/*****************************************************************
ANROP: printSticks(sticks);
UPPGIFT: Skriver ut sticks stycken stickor gruperade i
grupper av fem, föjt av ett antal
mellanslag så att total 30 tecken skrivs ut
******************************************************************/
int printSticks(int sticks)
{
cout << "\nAktuell hög:\t ";
for (int i = 0; i < sticks; i++)
{
if ((i % 5) == 4)
cout << "| ";
else
cout << "|";
}
return 0;
}
int main()
{ setlocale( LC_ALL, "swedish");
while (true)
{
playGame();
cout << "Vill du spela mera?";
string answ;
cin >> answ;
if (answ[0]!='j' && answ[0]!='J')
{
cout << "Fegis!!" << endl;
break;
}
}
return 0;
}// main