- Grundfunktionen:
- Anzeige eines 3x3-Spielfelds, wobei leere Zellen numerisch (1–9) beschriftet sind.
- Eingabe der Spielzüge über Zahlen (1–9) oder durch Eingabe von
quitzum Beenden. - Automatische Überprüfung der Gewinnbedingungen und Erkennung von Unentschieden.
- Netzwerkfunktionalität:
- Realisierung eines Server-/Client-Modus über TCP/IP-Sockets.
- Echtzeit-Synchronisation der Spielzüge zwischen Host (Server) und Client.
- Bei Fehlern im Netzwerkmodus (beim Senden oder Empfangen) wird das Spiel beendet.
- Zusatzfunktionen:
- Singleplayer-Modus mit einer einfachen, zufälligen KI.
- Anzeige und Aktualisierung von Statistiken (Siege, Niederlagen, Unentschieden) – dabei werden Server und Client jeweils korrekt berücksichtigt.
- Interaktives Hauptmenü zur Auswahl der Modi (Singleplayer, Multiplayer – Server, Multiplayer – Client, Quit).
- Linux:
Installiere build-essential, libncurses5-dev und libncursesw5-dev
- sudo apt update
- sudo apt install build-essential libncurses5-dev libncursesw5-dev
- macOS:
- xcode-select --install
- brew install ncurses
- Windows:
- unter WSL Ubuntu befolge die obige Anleitung für Linux
Linux / macOS / WSL
- Repository klonen: git clone https://github.com/robk42/Gruppe16.git
- Projekt kompilieren: make (unter macOS -ltinfo aus der makefile löschen und kompilieren mit make)
- Start : ./tic_tac_toe (Zum Öffnen des Hauptmenüs)
- Start über Kommandozeilenargumente :
- Singleplayer : ./tic_tac_toe .1
- Netzwerkmodus - Server : ./tic_tac_toe -s 12345
- Netzwerkmodus - Client : ./tic_tac_toe -c <server_ip> [12345]
- Der Host kann seine Ip mittels ifconfig herausfinden und dir schicken! :)
- Oder mittels https://www.whatsmyip.org/
- Spiellogik :
- Das Spielfeld wird als eindimensionales Array (
board[9]) dargestellt. Funktionen wieinitBoard(),checkWin(),checkDraw(),isValidMove(),makeMove()undgetAIMove()steuern die Spiellogik und den KI-Zug.
- Das Spielfeld wird als eindimensionales Array (
- Statistiken :
- Die Spielstatistiken (Siege, Niederlagen, Unentschieden) werden in der Datei
stats.txtgespeichert. Die FunktionenloadStats(),saveStats()undupdateStats()sorgen für das Laden, Speichern und Aktualisieren der Statistiken.
- Die Spielstatistiken (Siege, Niederlagen, Unentschieden) werden in der Datei
- Netzwerk :
- Die Netzwerkmodule (
startServer(),connectToServer(),sendMove(),receiveMove()) ermöglichen den Server-/Client-Modus über TCP/IP-Sockets.
- Die Netzwerkmodule (
- GUI :
- Die Benutzeroberfläche wird über ncurses realisiert. Funktionen wie
initGUI(),printBoardNCurses(),getUserMoveNCurses(),askReplayNCurses(),winAnimation()unddisplayMessage()steuern die Anzeige des Spielfelds, Eingabeaufforderungen und Animationen. Das interaktive Hauptmenü wird inmain.cgenutzt.
- Die Benutzeroberfläche wird über ncurses realisiert. Funktionen wie
- main :
- Die Hauptfunktion entscheidet über Kommandozeilenparameter oder das interaktive Menü, welchen Spielmodus der Benutzer startet, und koordiniert das Laden und Speichern der Statistiken.
- KI-Verbesserung :
- Eine weiterentwickelte KI, beispielsweise durch den Einsatz eines Minimax-Algorithmus, könnte integriert werden.
- Netzwerkfeatures :
- Funktionen wie ein integrierter Chat können zukünftig ergänzt werden.
- UI-Optimierung :
- Das Hauptmenü und andere Teile der Benutzeroberfläche können weiter grafisch verfeinert werden.