von BCGSR » Di 7. Okt 2003, 20:34
Ich musste es zwar 3 mal lesen und ich weiss immer noch nicht, ob ich kapiert habe, aber ich versuchts auch mal ;)
Auf jeden falls bin ich auch dafür EINE Matrix zu verwenden, weil man da viel leichter Sachen mathematisch lösen kann. Und zwar nimmst du die Matrix so:
0 X 0 X 0 X 0 X 0 ...
X 0 X 0 X 0 X 0 X
0 X 0 X 0 X 0 X 0
X 0 X 0 X 0 X 0 X
0 X 0 X 0 X 0 X 0
X 0 X 0 X 0 X 0 X
0 X 0 X 0 X 0 X 0
...
Wobei die Nullen die Ecken von den Quadraten sind und die X die Linien. Am Anfang sind die X natürlich 0, später dann 1 oder -1, je nachdem welcher Spieler die Linie gesetzt hat.
Die Gewinnabfrage ist jetzt kein Ding mehr. Detail zum Erläutern:
0 1 0 1 0
0 0 o 0-1
0 1 0-1 0
Folgendes ist vorgegeben und der Spieler setzt in die Mitte (das o-Feld).
Mit jedem Strich kann man maximal zwei Boxen schliessen (oder hab ich was falsch verstanden?)
Setzt man den Stein in eine gerade Zeile, kann man nur die beiden Boxen links und rechts schliessen. Setzt man in eine ungerade Zeile, kann man nur die Boxen oben und unten schliessen.
Wenn du überprüft hast, ob links/rechts oder oben/unten kannst du geziehlt die jeweiligen dazugehörigen 3 Linien abfragen. Ergibt die Summe der Beträge aller vier Linien =4 dann ist die Box voll.
Am Beispiel: Feld "o" ist [A,B]
- A ist gerade -> Box links/rechts
- Box links besteht aus [A,B] [A+1,B-1], [A, B-2], [A-1,B-1]. Summe der Beträge =3 => Box offen
- Box rechts analog. Summe der Beträge=4 => Box geschlossen.
Die Mitte der Box kann man dann noch mit einer 1 oder -1 markieren für den Gewinner und dann zum Schluss so schnell zählen, oder du nimmst eine reservierte Variable und zählst die hoch. Das ist dann Wurst.
Mit der Abfrageroutine kann Mist werden, wenn du ein Randfeld abfragst.
Entweder du prüfst jedesmal, dass du die Matrix nicht "verlässt" und einen DIM ERROR kriegst oder du erweiterst die Matrix um jeweils 2 Felder in jede Richtung und sorgst dafür, dass dieser "Rand" nicht angezeigt bzw. bespielbar ist, so hast du keinen Ärger mit abfragen. Kann aber ganz schön Speicherintensiv werden, weiss ja nicht wie gross du das Spielfeld machen willst.
Übrigens so hab ich vor vielen Jahren auch mal eine Gewinnabfrage bei 4Gewinnt gemacht. Dort wird nach jedem Spielzug jede mögliche Senkrechte, Waagerechte und Diagonale geprüft, die von diesem Stein ausging, und damit das schnell geht und ich keine Randstein-Abfragen machen musste, hab ich einfach die Matrix oben und unten erweitert.