Da gibt´s jede Menge zu verbessern, aber man kann natürlich nicht erwarten, dass ein Neuling guten Code schreibt. Was mir beim Überfliegen so aufgefallen ist:
- globale Variablen sollten soweit wie möglich vermieden werden
- schlechte bis garkeine logische Gliederung in Funktionen. Es gibt bei dir eine Godfunktion, die das komplette Spiel abwickelt. Du solltest eigene Funktionen für die Eingabe von Spielzügen oder die Ausgabe des Spielfelds benutzen. Es gibt eine Regel, die besagt: one function, one purpose, also eine Funktion sollte genau eine Aufgabe erfüllen. Ob das immer umsetzbar ist sei mal dahingestellt, aber wenn eine Funktion über 200 Zeilen lang ist dann kann man sie mit Sicherheit in Teilfunktionen unterteilen.
- Funktionen können Werte zurückgeben. Statt globale Variablen zu verwenden und dort Eingaben zu speichern kannst du Rückgabewerte von Funktionen benutzen, deren Ergebnis nur lokal relevant ist. Ein heißer Kandidat dafür ist die Funktion menue(), es gibt keinen Grund die Auswahl des Spielers global zu speichern, wo sie ja doch nur lokal gebraucht wird.
- C++ besitzt Schleifen. Statt statisch jedes Spielfeldelement zu prüfen kannst du mit einer Schleife über alle Elemente laufen und dann das jeweilige Element ausgeben. Mittels / und % Operator kannst du den linearen Index in einen Pseudo 2D Index für die Zeile und Spalte umrechnen.
- die STL erfordert zwar einiges an Einarbeitungszeit, aber bietet für alltägliche Problem fast immer ein kurze Lösung. Z.B. lässt sich das Array mit einem Einzeiler füllen:
#include <algorithm>
int arr[9];
int main()
{
std::fill( arr, arr +9, 0 );
}
Karotte schrieb:
Wir haben uns mit der Objektorientierung und Vererbung noch nicht wirklich beschäftigt, von daher habe ich einfach alles in eine Klasse geklatscht.
Ich sehe keine Klasse nirgendwo nicht. Eine Quelltextdatei, aber keine Klasse.
Ansonsten hat SeppJ ja schon gesagt, was du mit deinem Buch und Compiler anstellen solltest. Es gibt von Microsoft das Visual Studio in der freien Express Variante, damit hast du einen modernen und vor allem standardkonformen Compiler.