Field

Implementierung der Field-Klasse

In der Feldklasse befinden sich die Informationen zu dem aktuellen Stand des Spielfelds. Gleichzeitig muss sie darauf achten, dass das Feld im Hinblick auf das Spiel konsistent bleibt, das bedeutet, dass zum Beispiel keine Steine mitten in der Luft schweben, sondern immer nach unten durchrutschen müssen. Die Methode, die wir hier also brauchen, bekommt eine Spalte, in die der Spieler gerne einwerfen würde und lässt den Stein dann in die erste Zeile von unten rutschen, die frei ist:

vierGewinnt
Quelle: SD BRI


Zunächst müssen wir uns Gedanken darüber machen, wie das Spielfeld intern aussehen muss. Es bietet sich daher an, unser Spielfeld als Verkettete Liste (Spalte und Zeile) zu definieren, dh. wir benötigen eine Liste mit 6 Einträgen (für jede Zeile einen Eintrag) und - da jede Zeile 7 Spalteneinträge hat - muss in jeden Listeneintrag eine weitere Liste mit 7 Einträgen.

Ein leeres Spielfeld:

vierGewinnt
Quelle: SD BRI


Der Python Code dazu sieht wie folgt aus:

self.__fields = [[" ", " ", " "," "," "," ", " "],
		 [" ", " ", " "," "," "," ", " "],
		 [" ", " ", " "," "," "," ", " "],
		 [" ", " ", " "," "," "," ", " "],
		 [" ", " ", " "," "," "," ", " "],
		 [" ", " ", " "," "," "," ", " "]]


Auf ein Feld in unserem Spielfeld können wir jetzt sehr einfach zugreifen (z.B. self.__fields[2][3]).

Hinweis: Python initialisiert Listen mit Null. Dh. um das Element der ersten Zeile, erste Spalte (ganz links unten) zu bekommen, greifen wir mit '[0][0]' auf die Liste zu.

Wir können nun die Methode zum Einfügen eines Steins in das Feld als Pseudocode beschreiben. Uns ist die Spaltenzahl und die Steinfarbe/form bekannt (Übergabe als Parameter):

Beginne in der gewünschten Spalte und in der untersten Zeile
So lange nichts eingeworfen wurde:
    Wenn die Zeile frei ist, füge den Stein ein. 
    Merke die Zeile, in der eingeworfen wurde und setze eingeworfen auf True.
    Wenn nicht, gehe eine Zeile weiter nach oben und suche weiter.


Aufgabe 1

Implementiere die Methode 'setFields(self,col,value)' mittels des oben definierten Pseudocodes.

X

Fehler melden

X

Suche