#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

