Spiel mit Streichhölzern
Welche Gewinnstrategie steckt hinter diesem Spiel?[br]Lies zuächst die Spielregeln.
Erläuterungen
Streichholzspiel_03.ggb[br][br]Dieses Beispiel erläutert die Verwendung von skalierten Bildern. Grundlage ist das uralte Nim-Spiel, dessen vielfältige Spielregeln hier zur Vereinfachung stark reduziert wurden:[br]Aus einer bestimmten Menge von Streichhölzern müssen Spieler und Computer abwechselnd 1-3 Hölzer entfernen. Derjenige, der als letzter ziehen muss, hat verloren.[br]Um es für den Spieler interessant zu machen, darf der Computer als zweiter ziehen.[br][br][u]Variablen[/u][br]anz = Anzahl der anfänglichen Streichhölzer, einstellbar: anz = 17 … 45.[br]n = momentane Anzahl der Streichhölzer während des Spiels, d.h. n=(1, … ,anz)[br]t = 0,...,1 animierende Variable mit einmaligem Durchlauf (zunehmend wachsend).[br]weg = Anzahl, die der Spieler wegnimmt[br]wegc = Anzahl, die der Computer wegnimmt[br][br][u]Zur Grafik: Ausgangssituation[/u][br]Das Arbeitsblatt ist so skaliert, dass eine Einheit 50 Pixeln entsprechen. Es wurde lediglich ein einziges Urbild importiert:[br]Bild1 wird aus der Datei Streichholz_01_B.png erzeugt, das eine Größe von 39 x 324 Pixeln hat. Dieses Bild1 wird nur an einen fixen Punkt A angeheftet, der in der linken unteren Bildecke liegt. Damit hat auch Bild1 eine fixierte Lage, wird aber unverzerrt dargestellt in der ursprünglichen Größe. [br][br][u]Animation des Wegnehmens[/u][br]Bild 1 wurde kopiert:[br]Bild 2 = Dieses Streichholz soll eine variable (immer kleiner werdende) Größe erhalten, um das Wegnehmen zu simulieren.[br]linker unterer Punkt: A + (0, 8t3) (t=0,...,1)[br]rechter unterer Punkt: A + ((1 - t) 0.78, 8t3) (t=0,...,1)[br][br]Dabei ist die Zahl 0.78 eine notwendige Konsequenz aus der Breite des verwendeten Urbildes. welches eine Breite von 39 Pixeln hat. Da das Arbeitsblatt so skaliert ist, dass einer Einheit im Koordinatensystem 50 Pixeln entsprechen, hat das Bild2 eine Breite von 0.78 Einheiten.[br]Ist t = 0, so liegt der rechte untere Eckpunkt von Bild2 also genau 39 Pixel vom linken unteren Eckpunkt von Bild2 entfernt. Damit hat Bild 2 exakt die gleiche Größe wie Bild 1, beide Bilder liegen (unsichtbar) exakt übereinander.[br]Wird nun t vergrößert, so verringern sich Breite und Länge von Bild2 bis auf Null, da der rechte Eckpunkt von Bild2 auf den festen, linken zuläuft. Die Größenverringerung erfolgt in Länge und Breite proportional zueinander, d.h. das Streicholz in Bild2 wird kleiner.[br]Gleichzeitig wird es um bis zu 8 Einheiten angehoben, wofür der Term in der y-Koordinate beider Eckpunkte von Bild2 verantwortlich ist1. [br][br][u]Die Bildfolgen[/u][br]Bild1 und Bild2 sind jedoch niemals sichtbar, sondern dienen lediglich als Vorlage für zwei Bildfolgen, die Listen l1 und l2:[br]l1 = Liste der aktuell vorhandenen Streichhölzer[br]Es handelt sich um eine Bildfolge von Kopien von Bild1, dessen Größe unverändert bleibt und das selbst niemals sichtbar ist, ihre Definition ist:[br][br]l1=Folge(Verschiebe(Bild1, Vektor(i v)), i, 1, n)[br][br]Die Streichhölzer werden von rechts nach links dargestellt, sie liegen zwischen den Punkten A (ganz rechts) und Z(ganz links). Das erste Streichholz dieser Liste deckt sich genau mit dem Streichholz Bild1, das links unten am fixierten Punkt A heftet.[br][br]Da die anfängliche Streichholzanzahl anz in einem recht großen Bereich wählbar ist, würden sich bei konstantem Abstand Streichholzreihen mit unterschiedlichen Längen ergeben und somit entstünde bei kleiner Anzahl ein unschöner – da ungenutzter – freier Raum auf der linken Seite. [br]Um dies zu vermeiden, muss auch eine kleinere Streichholzanzahl gleichmäßig auf die verfügbare Breite verteilt werden, der Abstand zwischen zwei benachbarten Streichhölzern muss entsprechend größer werden. Diese Aufgabe hat der Vektor [br]v=1 / anz Vektor(A, Z)[br][br]l2 = Liste der (animierten) Streichhölzer, die gerade weggenommen werden. [br]Diese Liste enthält eine bis drei Kopien des animierten Bild2, je nachdem wieviel Hölzer gerade entfernt werden sollen:[br]l2 = Folge(Verschiebe(Bild2, Vektor((n - i + weg) v)), i, 0, weg - 1)[br][br][u]Spielstrategie[/u][br]Die Computerspielstrategie zielt stets darauf ab, dass die aktuelle Streichholzanzahl, die sich nach dem Computerzug für den Spieler ergibt, genau [math]n\equiv1Mod4[/math] sein muss, damit der Spieler verliert. Dies kann vom Computer in drei der vier Fällen erreicht werden, in einem nicht:[br][br]Sei nun n die aktuelle Anzahl der vorhandenen Streichhölzer, die der Computer vorfindet, [b][i]bevor [/i][/b]dieser zieht:[br][br]Fall 1, [math]n\equiv0mod4[/math][br]Computer nimmt 3 weg, d.h. wegc = 3. Danach gilt [math]n\equiv1mod4[/math] und der Computer gewinnt.[br][br]Fall 2, [math]n\equiv1mod4[/math][br]wegc = Zufallszahl[1,3][br]Egal wieviel der Computer wegnimmt, er verliert, falls der Spieler keinen Fehler macht.[br][br]Fall 3, [math]n\equiv2mod4[/math][br]Computer nimmt 1 weg, d.h. wegc = 1. Danach gilt [math]n\equiv1mod4[/math] und der Computer gewinnt.[br][br]Fall 4, [math]n\equiv3mod4[/math][br]Computer nimmt 1 weg, d.h. wegc = 1. Danach gilt [math]n\equiv1mod4[/math] und der Computer gewinnt.[br] [br][u]Schaltflächen[/u][br]SF0 = Neues Spiel[br]SF1 = Spieler nimmt ein Streichholz weg.[br]SF2 = Spieler nimmt zwei Streichhölzer weg.[br]SF3 = Spieler nimmt drei Streichhölzer weg[br]SF4 = Compter nimmt wegc Streichhölzer weg[br]SF5 = Ein- / Ausblenden der Spielregeln[br]SF6 = Eingangsbutten, nötig um SF0 während des Spiels auszublenden[br][br]Btd = Wird gezeigt, falls spr=0 ist. Nach dem Klick ist spr = 1, alles in englisch.[br]Bte = Wird gezeigt, falls spr=1 ist. Nach dem Klick ist spr = 0, alles in deutsch.[br]Hierbei handelt es sich um die importierten Bilder der Flaggensymbole.[br][br][u]Diverses[/u][br]Hintergrundbild = „Hint“ liegt fixiert in den Eckpunkten B und C.[br]Label = Liste, die die Beschriftungen von Buttons und Texten in zwei Sprachen enthält.