Projekt:2021/LightsOut: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) |
||
Zeile 6: | Zeile 6: | ||
== Projektziel == | == Projektziel == | ||
Programmiert das Spiel [http://www.matheundfraktale.de/MathemSpielereien/LightsOut/LightsOut.php LightsOut] mit Python. Nutzt TigerJython als Entwicklungsumgebung und orientiert euch an eurer Implementierung von Tic Tac Toe. | Programmiert das Spiel [http://www.matheundfraktale.de/MathemSpielereien/LightsOut/LightsOut.php LightsOut] mit Python. Nutzt TigerJython als Entwicklungsumgebung und orientiert euch an eurer Implementierung von Tic Tac Toe ([[#Tic-Tac-Toe_Musterl.C3.B6sung|unten findest ihr auch eine Musterlösung]]). | ||
[[Bild:20210526204049 TigerJython.gif|center]] | [[Bild:20210526204049 TigerJython.gif|center]] |
Version vom 6. April 2022, 20:58 Uhr
Seite zum Projekt LightsOut des Informatik 9 Diff im Schuljahr 2021/22.
Projektziel
Programmiert das Spiel LightsOut mit Python. Nutzt TigerJython als Entwicklungsumgebung und orientiert euch an eurer Implementierung von Tic Tac Toe (unten findest ihr auch eine Musterlösung).
GameGrid
TigerJython kommt mit verschiedenen Modulen, zum Beispiel dem bekannten gturtle
Modul, das Du bisher mit from gturtle import *
eingebunden hast. Für die Entwicklung von Spielen gibt es die Bibliothek gamegrid
, die mit from gamegrid import *
importiert wird.
Die folgende Programmvorlage kannst du als Startpunkt für dein Spiel benutzen:
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):
loc = toLocation(e.getX(), e.getY())
# Hier die Aktionen bei Mausklick programmieren
# 3x3 Quadrate mit der Kantenlänge 50.
# Das Gitter wird in grau (gray) gezeichnet und Steuerungselemente werden ausgeblendet (False).
# Bei Mausklicks wird die Funktion "mausklick" aufgerufen.
makeGameGrid(3, 3, 50, Color.gray, False, mousePressed = mausklick)
# Hole den Hintergrund, um damit zu arbeiten
bg = getBg()
# Zeige das Spielfenster
show()
Wichtige 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:
makeGameGrid(Spaltenzahl, Zeilenzahl, Kantenlänge, Color, Steuerung, mousePressed=Funktionsname)
- Erzeugt ein Spielfenster mit
Spaltenzahl
malZeilenzahl
Quadraten der GrößeKantenlänge
. Das Gitternetz wird in der FarbeColor
gezeichnet (um kein Gitter zu zeichnen, kannNone
angegeben werden). Steuerung ist ein Wahrheitswert (True
oderFalse
) der angibt, ob im Spielfenster Stuerungselement angezeigt werden. MitmousePressed
wird eine Funktion angegeben, die aufgerufen wird, wenn mit der Maus in das Fenster geklickt wird. bg = getBg()
- Speichert den Hintergrund in der Variablen
bg
. Der Hintergrund hat verschiedene Funktionen, die mitbg.funktionsname()
aufgerufen werden können:bg.fillCell(Location, Color)
- Färbt das Quadrat an der Position
Location
in der FarbeColor
ein. bg.drawGridLines(Color)
- Zeichnet die Gitternetzlinien in der Farbe
Color
. bg.getColor(Location)
- Ermittelt die Farbe des Quadrats an der Position
Location
.
loc = Location(i, j)
- Speichert eine Position mit der Spaltennummer
i
und der Zeilennummery
in der Variablenloc
. Positionen können für verschiedne andere Funktionen als Parameter benutzt werden.loc.x
- Die x-Koordinate der Position.
loc.y
- Die y-Koordinate der Position.
toLocation(x, y)
- Ermittelt für den Pixel an der Koordinate
x
,y
die Position, in der der Pixel liegt. refresh()
- Aktualisiert den Zeichenbereich und zeichnet alle Elemente neu.
Color.green
- Die Farbe "Grün".
green
kann durch andere (englische) Farbnamen ersetzt werden (red
,blue
, ...). Farben können wie gewohnt mit==
verglichen werden (z.B.Color.green == Color.red
istFalse
). getGridColor()
- Die Farbe der Gitternetzlinien (die zu Beginn an
makeGamegrid
übergeben wurden).
Tic-Tac-Toe Musterlösung
from gamegrid import *
player = 1
def mausklick(e):
global player
loc = toLocation(e.getX(), e.getY())
# Programmiere hier, was passieren soll
# Tipps: https://qr-lernhilfen.de/mobileUrl?url=ef8305935be33077
refresh()
return True
makeGameGrid(3, 3, 100, Color.gray, False,
mousePressed = mausklick)
setTitle("TicTacToe")
bg = getBg()
show()