Projekt:2020/LightsOut: Unterschied zwischen den Versionen

2.093 Bytes hinzugefügt ,  14:48, 31. Mai 2021
Keine Bearbeitungszusammenfassung
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
== Projektziel ==
== Projektziel ==
Programmiere das Spiel [http://www.matheundfraktale.de/MathemSpielereien/LightsOut/LightsOut.php LightsOut] mit Python. Nutze das TigerJython als Entwicklungsumgebung.
Programmiere das Spiel [http://www.matheundfraktale.de/MathemSpielereien/LightsOut/LightsOut.php LightsOut] mit Python. Nutze das TigerJython als Entwicklungsumgebung.
[[Bild:20210526204049 TigerJython.gif|center]]


== GameGrid ==
== GameGrid ==
Zeile 13: Zeile 15:
from gamegrid import *
from gamegrid import *


# Wird aufgerufen, wenn die Maus im Fenster geklickt wird.
# e.getX() und e.getY() sind die Koordinaten des Pixels, der angeklickt wurde.
def mausklick(e):
def mausklick(e):
pass # bedeutet: tue nichts; muss durch eigenen Programmcode ersetzt werden
loc = toLocation(e.getX(), e.getY())
# Hier die Aktionen bei Mausklick programmieren


# 3x3 Quadrate mit der Kantenlänge 50.
# 3x3 Quadrate mit der Kantenlänge 50.
# Das Gitter wird in grau (gray) gezeichnet und Steuerungselemente werden ausgeblendet (False).
# Das Gitter wird in grau (gray) gezeichnet und Steuerungselemente werden ausgeblendet (False).
# Bei Mausklicks wird die Funktion "mausklick" aufgerufen.
# Bei Mausklicks wird die Funktion "mausklick" aufgerufen.
makeGameGrid(3, 3, 50, Color.gray, False, mousePressed = pressCallback)
makeGameGrid(3, 3, 50, Color.gray, False, mousePressed = mausklick)


# Hole den Hintergrund, um damit zu arbeiten
# Hole den Hintergrund, um damit zu arbeiten
Zeile 32: Zeile 37:
Du kannst dir die Hilfe zu GameGrid in TigerJython anzeigen lassen (wie die Hilfe zu GTurtle). Um "LightsOut" zu implementieren, reichen aber theoretisch diese Funktionen:
Du kannst dir die Hilfe zu GameGrid in TigerJython anzeigen lassen (wie die Hilfe zu GTurtle). Um "LightsOut" zu implementieren, reichen aber theoretisch diese Funktionen:


; <code>makeGameGrid(Spaltenzahl, Zeilenzahl, Kantenlänge, Color, Steuerung, mousePressed=Funktionsname)</code>
: Erzeugt ein Spielfenster mit <code>Spaltenzahl</code> mal <code>Zeilenzahl</code> Quadraten der Größe <code>Kantenlänge </code>. Das Gitternetz wird in der Farbe <code>Color</code> gezeichnet (um kein Gitter zu zeichnen, kann <code>None</code> angegeben werden). Steuerung ist ein Wahrheitswert (<code>True</code> oder <code>False</code>) der angibt, ob im Spielfenster Stuerungselement angezeigt werden. Mit <code>mousePressed</code> wird eine Funktion angegeben, die aufgerufen wird, wenn mit der Maus in das Fenster geklickt wird.
; <code>bg = getBg()</code>
; <code>bg = getBg()</code>
: Speichert den Hintergrund in der Variablen <code>bg</code>. Der Hintergrund hat verschiedene Funktionen, die mit <code>bg.funktionsname()</code> aufgerufen werden können:
: Speichert den Hintergrund in der Variablen <code>bg</code>. Der Hintergrund hat verschiedene Funktionen, die mit <code>bg.funktionsname()</code> aufgerufen werden können:
:; <code>bg.fillCell(Location, Color)</code>
:; <code>bg.fillCell(Location, Color)</code>
:: Färbt das Quadrat an der Position <code>Location</code> in der Farbe <code>Color</code> ein.
:: Färbt das Quadrat an der Position <code>Location</code> in der Farbe <code>Color</code> ein.
:; <code>bg.drawGridLines(Color)</code>
:: Zeichnet die Gitternetzlinien in der Farbe <code>Color</code>.
:; <code>bg.getColor(Location)</code>
:: Ermittelt die Farbe des Quadrats an der Position <code>Location</code>.
; <code>loc = Location(i, j)</code>
: Speichert eine Position mit der Spaltennummer <code>i</code> und der Zeilennummer <code>y</code> in der Variablen <code>loc</code>. Positionen können für verschiedne andere Funktionen als Parameter benutzt werden.
:; <code>loc.x</code>
:: Die x-Koordinate der Position.
:; <code>loc.y</code>
:: Die y-Koordinate der Position.
; <code>toLocation(x, y)</code>
: Ermittelt für den Pixel an der Koordinate <code>x</code>, <code>y</code> die Position, in der der Pixel liegt.
; <code>refresh()</code>
: Aktualisiert den Zeichenbereich und zeichnet alle Elemente neu.
; <code>Color.green</code>
: Die Farbe "Grün". <code>green</code> kann durch andere (englische) Farbnamen ersetzt werden (<code>red</code>, <code>blue</code>, ...). Farben können wie gewohnt mit <code>==</code> verglichen werden (z.B. <code>Color.green == Color.red</code> ist <code>False</code>).
; <code>getGridColor()</code>
: Die Farbe der Gitternetzlinien (die zu Beginn an <code>makeGamegrid</code> übergeben wurden).
8.581

Bearbeitungen