// 1. Lastenheft
// 2. Pflichtenheft
//
// Einschraenkungen:
// 0. 3x3 Spielfeld
// 1. Mensch ist weiß und fängt an
//    Computer hat schwarz und ist der zweite Spieler
// 2. Einfaches Kommandozeilen-Interface 
//    _ für frei, O für weiß, X für schwarz
//    Eingabe: 1-9 -> Zellen 
// 3. Computer ist ganz dumm - erste freie Feld

#include <iostream>
#include "board.h"
#include "computer.h"
#include "human.h"
#include "move.h"
using namespace std;

int main()
{
   cout << "Tic-Tac-Toe\n\n";

   // 1. Spielbrett + Ausgabe
   Board board;
   board.print();

   for (;;)
   {
      // 2. Der Mensch wird nach seinem Zug gefragt
      //    Zug ausgibt
      Move move = askHumanForMove(board);
      move.print();

      // 3. Zug gemacht werden
      //    Spielbrett ausgeben
      board.set(move);
      board.print();

      // 4. Hat der Mensch gewonnen?
      //    Ja => Gratulation, Ende des Spiels
      //    Nein => Weiter
      if (board.hasWin(move.getColor()))
      {
         cout << "\nGratulation\nJuhuu, gewonnen\n\n";
         break;
      }

      // 5. Ist remis ausgegangen
      //    Ja => Remis-Ausgabe, Ende des Spiels
      //    Nein => Weiter
      if (board.isRemis())
      {
         cout << "\nGar nicht so schlecht\nRemis geschafft\n\n";
         break;
      }

      // 6. Der Computer wird nach seinem Zug gefragt
      //    Zug ausgibt
      move = askComputerForMove(board);
      move.print();

      // 7. Zug gemacht
      //    Spielbrett ausgeben
      board.set(move);
      board.print();

      // 8. Hat der Computer gewonnen?
      //    Ja => Trauer, Ende des Spiels
      //    Nein => Weiter
      if (board.hasWin(move.getColor()))
      {
         cout << "\nUps, Pech gehabt\nLeider verloren\n\n";
         break;
      }

      // 9. Springe zu 2.
   }
}
