Tic Tac Toe

Der zusammengesetzte Datentyp "Feld"

Bei vielen Problemen tauchen häufig gleichartige Datentypen auf. Hier ist es mühsam, jeweils eine eigene Variable anzulegen. Mit Feldern lassen sich Variablen gleicher Datentypen zusammenfassen.

z. B. Lottozahlen: 7 ganze Zahlen

Deklaration in Oberon-2: 
VAR lotto: ARRAY 7 OF INTEGER
Die 7 Elemente des Feldes sind von 0 bis 6 durchnumeriert.

3 22 4 12 34 49 12
lotto [0] lotto [1] ... ... ... ... Lotto [6]


Feld im Spiel Tic Tac Toe

Hier ist das Spielfeld zweidimensional 
In Oberon-2:
VAR spielfeld: ARRAY 3,3 OF INTEGER;

Die Benutzer X und 0 können eingeben in welche Zeile und Spalte sie setzen wollen. Sie ziehen abwechselnd. Nach jedem Zug wird das Spielfeld (zunächst im Modul Display) ausgegeben.





Musterlösung

Verbesserungsmöglichkeiten

1. Die Ausgabe soll in der "ColorPlane" erfolgen

* Die Prozedur Kreis ist bereits vollständig. Sie zeichnet einen Kreis mit Mittelpunkt xm,ym:

PROCEDURE Kreis (xm,ym:INTEGER);
CONST radius = 20;
VAR x,y,winkel : INTEGER;
     xr, yr : REAL;
     ch : CHAR;
BEGIN
     FOR winkel := 0 TO 360 DO
          xr := F.Sin(winkel / 180 * 3.1415)*radius;
          yr := F.Cos(winkel / 180 * 3.1415)*radius;
          x := SHORT(ENTIER(xr));
          y := SHORT(ENTIER(yr));
          ColorPlane .Dot (x+xm,y+ym,1);
END;

END Kreis; 
* Die entsprechende Prozedur Kreuz soll ein Kreuz aus zwei Linien in der Farbe blau zeichnen:
 .
* Die Prozedur Ausgabe soll das Ergebnis in ColorPlane ausgeben. Sie stützt sich auf Kreis und Kreuz. Zunächst wird das Gitternetz in schwarz gezeichnet: 

* Nun erfolgt die Ausgabe der Kreise und Kreuze

2. Eine Prozedur "Test" zur Feststellung eines Sieges

Nach jedem Spielzug werden alle Zeilen und Spalten sowie die Diagonalen des Arrays "Spielfeld" getestet, ob ein Gewinner feststeht. Wird die Variable "entschieden" auf den Wert "TRUE" gesetzt, so wird in der Prozedur ProgMain das Spiel abgebrochen. 
Ein Teil der Prozedur, der die Zeilen testet:

Ebenso geht man für die Spalten vor. 
Für die Diagonalen erübrigt sich die Wiederholung, da jeweils nur eine Diagonale existiert. Du musst hier also nur die Auswahl ausführen, z.B.

Zurück zur Übersicht über weitere Themen