[C++] Tic Tac Toe mit GUI (Borland C++-Builder 5 VCL) [Teil 1 von 4]
Für ein Schulprojekt sollte ich ein Computerspiel entwerfen und dabei objektorientiert programmieren. Da ich OOP bereits von meinen Projekten mit PHP kenne, fiel mir das nicht so schwer. Einige Unterschiede gibt es jedoch zwischen OOP in PHP und OOP in C++. Beispielsweise kennt C++ keine Interfaces in dem Sinne wie sie PHP kennt. In C++ sind Interfaces auch nur abstrakte Klassen. Andererseits kann man nicht problemlos Objekte beliebigen Typs in eine Variable packen. Aber darum soll es in diesem Artikel gar nicht gehen.
Vielmehr geht es um das Programm an sich, den Code und was man hätte besser machen können.
Da mir beim Schreiben des Artikels auffiel, dass er viel zu lang für einen einzigen Post wäre, habe ich mich dazu entschlossen, eine Artikelreihe dazu zu schreiben. Ich schreibe jeden Tag einen Beitrag dazu, bis ich alles ausführlich dokumentiert habe.
Teile der Artikelreihe
- Einführung, Idee, Screenshots und Download des Projekts
- Erklärung des Spielcontrollers und der GUI des Spielfelds (Hauptfenster)
- Erklärung des Optionsmenüs
- Erklärung der Anleitung und sonstige Informationen zum Spiel / Fazit
Beginnen wir also mit dem ersten Teil der Artikelserie. Dieser Teil soll euch einen Einblick in meine Idee verschaffen und euch die Möglichkeit geben, das Projekt herunterzuladen.
Möglichkeiten des Spiels
Das Spiel „Tic Tac Toe“ bietet folgende Möglichkeiten
- Spielen gegen den PC
- Spielen gegen einen anderen Spieler
- 2 PCs gegeneinander spielen lassen
- PC-Spieler hat 2 Schwierigkeitsstufen
- einfach (Zufall)
- schwierig (Pseudo-KI)
- Ausführliches Optionsmenü
- Farben aller Elemente können angepasst werden
- Spielernamen können verändert werden
- Spielertyp (PC/Mensch) einstellbar
- Schwierigkeit des PCs (einfach/schwierig) einstellbar
- Exportieren aller Einstellungen in INI-Datei
- Importieren aller Einstellungen aus INI-Datei
- Zurücksetzen aller Einstellungen auf Anfwangswert
- Anzeigen einer Anleitung
- Diese Anleitung wird aus einer Richtext-Datei eingelesen und angezeigt
- Dadurch kann die Anleitung geändert werden, ohne den Quelltext ändern zu müssen
- Anzahl der Spielzüge wird angezeigt
- Dauer des Spiels wird angezeigt
- Spiel kann per Klick neugestartet werden
Besonderer Wert wurde auf Wiederverwendbarkeit gelegt
Während der Implementierung des Spiels war mir eine Sache besonders wichtig: Dass ich den Code so dynamisch und erweiterbar wie möglich halte. Eines der Grundprinzipien der objektorientierten Programmierung.
Das ist mir auch ziemlich gut gelungen, finde ich.
Ich muss demnächst für die Schule 4 Gewinnt programmieren. Da TTT (Tic Tac Toe) aber ähnlich wie 4 Gewinnt funktioniert, muss ich im Code nur ein paar Konstanten anpassen und das Spiel läuft. Ok, nicht ganz: Der Algorithmus zum Setzen eines Steins muss auch angepasst werden, da die Steine bei 4 Gewinnt ja immer nach unten rutschen, was bei TTT nicht so ist.
Klassendiagramm
Ich habe mir die Mühe gemacht und ein Klassendiagramm des kompletten Projekts erstellt, um euch erstmal einen Überblick zu verschaffen. (Mit einem Klick auf das Diagramm seht ihr es in groß)
Man sieht schon, dass es für so ein kleines Projekt doch relativ viele Klassen gibt:
- TForm1
- TForm2
- TForm3
- Controller
- ControllerOptions
- ModelOptions
- SpielfeldModel
- Feld
- Spieler
- ->Mensch
- ->Computer
Die Klassen TForm1, TForm2 und TForm3 sind jeweils die Views. Controller und ControllerOptions sind die Steuerungen, also die Controller. Dann gibt es noch die Models ModelOptions, SpielfeldModel und Feld. Zuguterletzt gibt es noch die Klassen Mensch und Computer, die alle von Spieler erben. Was fällt auf? Jaa, das MVC-Prinzip oder wie es meine Lehrer nennen, das Dreischichtenmodell, wurde eingehalten.
Bei der Namensgebung sollte ich mir nächstes Mal einen Standart einfallen lassen…
Screenshots des Spiels
Links seht ihr das fertige Spiel in der finalen Version. Oben wird angezeigt, wer gerade dran ist bzw. wer gewonnen hat. Darunter kommt das Spielfeld, in dem man die Steine setzen muss.
Unterm Spielfeld werden dann noch die Anzahl der Spielzüge und die Spieldauer angezeigt.
Insgesamt finde ich das Spiel ziemlich übersichtlich. Auch mein Lehrer hat sich schnell darin zurechtgefunden.
Die Farben der Spieler, die Hintergrundfarbe des Spielfelds und die Farbe eines leeren Felds können im Optionsmenü verändert werden.
Außerdem kann man im Optionsmenü die Spielernamen, die Spielertypen und die Schwierigkeit des PC-Gegners einstellen.
Da man die Einstellungen nicht jedes Mal von neuem setzen möchte, kann man sie exportieren und auch wieder importieren. Das Spiel merkt sich aber, wenn Einstellungen exportiert wurden und importiert sie beim Start automatisch, falls die Optionsdatei nicht gelöscht wurde.
Die letzten 2 Bilder zeigen das Optionsmenü und die Spielanleitung aus dem Spiel.
Jetzt wisst ihr also, wie das Programm bzw. Spiel aussieht. Im nächsten Teil der Artikelreihe gehe ich dann auf den Programmcode ein. Doch wie versprochen gibt es hier noch eine Möglichkeit, das Ganze herunterzuladen.
Download
- Das lauffähige Spiel (als .exe kompiliert, inkl. „anleitung.ttt“-Datei) in einem zip-Archiv: tic_tac_toe_exe
- Das lauffähige Spiel (kompiliert) und alle Projektdateien: tic_tac_toe_all
- Die Projektdateien ohne kompilierte .exe: tic_tac_toe_projekt
Ich übernehme keine Haftung für Schäden, die durch Benutzung dieser Dateien evtl. entstehen könnten.
Weiter zu Teil 2
Mit einem Klick kommt ihr zum zweiten Teil dieser Artikelreihe.
[…] Tipps und Tricks für Webmaster PHP (OOP, MVC), HTML, MySQL, Javascript, AJAX und vieles mehr! « [C++] Tic Tac Toe mit GUI (Borland C++-Builder 5 VCL) [Teil 1 von 4] […]
Toller, detailierter Artikel!
Gut geschrieben. Ja fürs coden muss man shon nen händchen haben…
viel geduld… leider 🙂 deshalb gibts auch so wenige programmierer, es ist nen trockener job.
umso besser sind die arbeitsstellen… glaub ich mal 🙂
.-= FF14´s last blog ..Release Ende September und PS3-Version verschoben =-.
danke!
Hallo
Gutes Programm !!!
könntest du mir vill den Quellcode noch einmal schicken, jedoch in einer datei statt in 5 oder 6 verschieden???
MfG Chiller
Leider kann ich das nicht tun, da ich das Projekt selber nicht mehr auf dem Rechner habe und es schon einen Sinn hat, dass das mehrere Dateien sind. Sorry!