Home » Tutorials » Grafik und Spiele » Vier gewinnt

Vier gewinnt

Das neue Spiel

Im letzten Abschnitt haben wir schon den ersten Teil für das Starten eines neuen Spiels erzeugt.
Im Prinzip würde das schon fast reichen. Allerdings wollen wir ja ein Spiel, welches in der Benutzung angenehm ist. Deshalb sind beim Starten eines Spieles noch einige zusätzliche Anpassungen nötig.

Zunächst wollen wir erreichen, dass der Spieler der beginnt zufällig ausgewählt wird. Dazu benötigen wir eine Zufallszahl.

Um in Delphi eine Zufallszahl zu erhalten, muss man einfach die Funktion „Random“ aufrufen und erhält als Rückgabewert eine Zufallszahl. Übergibt man keinen Parameter liegt diese zwischen 0 und 1. Gibt man als Parameter zum Beispiel 3 (a := Random(3)], erhält man eine ganze Zahl zwischen 0 und 2.

Im Programm kann das dann so aussehen:

//Zufällig festlegen, welcher Spieler startet
if Random(2) = 0 then
  FAktiverSpieler := sSpieler1
else
  FAktiverSpieler := sSpieler2;

Auf ähnliche Weise lässt sich auch jedem Spieler eine Wahrscheinlichkeit zuordnen. Zahlen von 0 bis 6 für Spieler 1 und von 7 bis 9 für Spieler 2 sorgen zum Beispiel dafür, dass Spieler 1 in 70% der Fälle beginnt. Zur Nutzung der Random Funktion muss einmalig vorher, also idealerweise im Form.Create, Randomize aufgerufen werden.

Achtung!

if Random(2) = 0 then
  FAktiverSpieler := sSpieler1;
if Random(2) = 1 then
  FAktiverSpieler := sSpieler2;

Dieser Code funktioniert nicht, oder nur eingeschränkt, aber auf jeden Fall nicht so wie er soll!
In der zweiten Abfrage wird die Funktion erneut aufgerufen und es entsteht eine neue Zufallszahl.

Es kann also zum Beispiel passieren, dass beim ersten mal 0 und beim zweiten mal 1 kommt, wodurch beide Abfragen negativ ausfallen und gar kein Spieler ausgewählt wird. Wenn eine Zufallszahl mehrmals benötigt wird, muss sie in einer Variablen gespeichert werden.

Wer aufgepasst hat, merkt, dass da eine neue Variable dazugekommen ist. Diese muss natürlich noch deklariert werden. Unter Tform1 ? private: FAktiverSpieler: TfeldBesetzung;
Diese Variable wird dazu genutzt, festzustellen welcher Spieler gerade am Zug ist. Nach dem Zug eines Spielers wird die Variable geändert, so dass der andere Spieler „aktiv“ ist.

Zusätzlich deklarieren wir noch eine Variable SpielAktiv vom Typ Boolean. Unter den Tipps und Tricks gibt es einen Abschnitt zu diesen Variablen und den Besonderheiten, die zu beachten sind.
Diese Variable wird beim Starten eines neuen Spiels auf wahr, d.h. true gesetzt:

Spielaktiv := True;

Jetzt haben wir alle nötigen Einstellungen für ein neues Spiel vorgenommen und trotzdem hat die Sache noch einen Haken.
Dem Spieler bringt es natürlich nicht viel, wenn im Speicher ein neues Spiel gestartet wird, er aber nichts davon sieht. Deshalb muss am Ende der Prozedur noch gezeichnet werden. Da wir vorher praktischerweise alle Zeichenbefehle gekapselt haben, brauchen wir jetzt nur noch die Darstellen-Funktion aufzurufen.

Jetzt können wir beliebig oft ein neues Spiel starten, nur leider können wir das gestartete Spiel noch nicht spielen. Um diesen Missstand kümmern wir uns im nächsten Kapitel.