Tokens#
Ein Token ist ein Spielstein auf deinem Board.
Alle Objekte auf deinem Board sind Tokens
, die auf dem Board
bewegt
werden können und die miteinander kommunizieren können.
Ein Token erstellen#
Nachdem du das Board
erstellt hast, wird nun ein Token
, (d.h. eine
Spielfigur) auf dem Board platziert. Dies geht so:
import miniworldmaker as mwm
board = mwm.Board(600, 300)
board.add_background("images/grass.png")
token = mwm.Token((0, 0))
token = mwm.Token((100, 200))
board.run()
In der Zeile token = Token((0,0))
wird ein Token an der Position x=0, y=0 erstellt, in der Zeile
token = Token((100, 200))
wird ein Token an der Position x=100, y=200 erstellt.
Die Tokens haben noch kein Kostüm, daher werden sie zunächst als lila Rechtecke dargestellt:
Beachte, dass der Ursprung des Koordinatensystems oben links liegt.
Kostüme#
Jedes Token
hat ein Costume
, welches das Aussehen des Tokens definiert.
Mit add_costume
kannst du deinem Token ein Bild als Kostüm hinzufügen.
Zuerst musst du diese Bilder dazu in den Unterordner images
deines Projekts kopieren, z.B. so:
project
│ my_board.py # file with your python code
└───images
│ │ grass.png
│ │ knight.png
│ │ player.png
Jetzt kannst du sie so als Kostüm hinzufügen:
import miniworldmaker as mwm
board = mwm.Board(600, 300)
board.add_background("images/grass.png")
token = mwm.Token((0, 0))
token.add_costume("images/player.png")
token = mwm.Token((100, 200))
token.add_costume("images/knight.png")
board.run()
Ausgabe:
Beispiel: Mehrere Kostüme#
Hier werden vier Tokens angelegt, die alle unterschiedliche Kostüme haben:
import miniworldmaker as mwm
board = mwm.Board()
board.add_background("images/grass.jpg")
t1 = mwm.Token((0,20))
t1.add_costume("images/cow.png")
t2 = mwm.Token((40,20))
t2.add_costume("images/chicken.png")
t3 = mwm.Token((80,20))
t3.add_costume("images/dog.png")
t4 = mwm.Token((120,20))
t4.add_costume("images/goat.png")
board.run()
Ausgabe:
FAQ
Typische Probleme:
Mein Token ist falsch ausgerichtet, was soll ich tun?
Ein Token ist dann korrekt ausgerichtet, wenn das Bild nach oben guckt. Wenn das Bild per Default in eine andere Richtung ausgerichtet ist, dann hast du zwei Möglichkeiten
Du kannst das Bild mit einem Bildeditor drehen
Du kannst in Miniworldmaker die Orientierung des Kostüms ändern. Dies geht mit
my_token.costume.orientation = 90
Setze für orientation den passenden Wert, damit das Kostüm korrekt ausgerichtet ist.
Manchmal ist es auch nötig, einzustellen, dass sich zwar das Token drehen kann, das Kostüm aber immer gleich ausgerichtet sein soll. Dies geht mit
my_token.costume.is_rotatable = False
.
Die Position#
Das Token wurde in der oberen linken Ecke erstellt. Wenn du das Token an einer beliebigen Stelle erstellen willst, dann musst du beim Aufrufen eine Position übergeben.
Der miniworldmaker verwendet dazu ein Koordinatensystem, die obere Linke Ecke ist die Position (0,0): Als position
eines Tokens wird immer die obere linke Ecke des Tokens bezeichnet.
Auf einem TiledBoard
verhält es sich etwas anderes. Hier ist die Position (0,0) die Kachel oben links in der Ecke; Mit my_token.position
fragst du hier nicht die pixelgenaue Position ab, sondern die Kachel, auf der das Token liegt.
Die Position ändern#
Die Position
eines Tokens kannst du mit Hilfe des Attributs position
ändern.
position = (x, y)
setzt die Position des Tokens an die Koordinaten (x, y)
.
Beispiel:#
Auf einem normalen Board wird die Position so geändert:
import miniworldmaker as mwm
board = mwm.Board()
board.add_background("images/grass.png")
player = mwm.Token()
player.add_costume("images/player.png")
player.position = (100,200)
board.run()
…und so auf einem TiledBoard:
import miniworldmaker as mwm
board = mwm.TiledBoard()
board.columns = 20
board.rows = 8
board.tile_size = 42
board.add_background("images/soccer_green.jpg")
board.speed = 30
player = mwm.Token()
player.add_costume("images/player.png")
player.position = (3,4)
board.run()
Ausgabe:
Arten von Tokens#
Es gibt einige spezielle Tokens, die du verwenden kannst:
Linien#
Die Syntax zum Zeichnen einer Linie sieht folgendermaßen aus:
Line(startpoint, endpoint)
Die Parameter startpoint
und endpoint
sind jeweils Tupel, z.B. (1, 2) für x=1 und y=2.
Wenn du eine Linie von (10,10) zu (100, 200) zeichnen willst so musst du z.B. folgendes schreiben:
import miniworldmaker as mwm
board = mwm.Board()
line = mwm.Line((10,10), (100, 200))
board.run()
Kreise#
Kreise kannst du allgemein folgendermaßen erstellen:
Circle(position, radius)
Note
Die übergebene Position bei Kreisen ist der Mittelpunkt des Kreises
Wenn du einen Kreis an der Stelle (100,200) mit Radius 20 erstellen willst, musst du folgendes schreiben:
import miniworldmaker as mwm
board = Board()
mwm.Circle((100,200), 20)
board.run()
Rechteck#
Ein Rechteck wird beschrieben durch Position, Breite und Höhe:
mwm.Rectangle(position, width, height)
Der Parameter position
beschreibt die obere linke Ecke des Rechtecks.
Willst du ein Rechteck an der Position (100, 100) mit Breite 20 und Höhe 100 zeichnen, so musst du folgendes schreiben:
import miniworldmaker as mwm
board = mwm.Board(800, 600)
mwm.Rectangle((100, 100), 20, 100)
board.run()
Ellipse#
Ellipsen werden im Prinzip wie Rechtecke beschrieben, d.h. die Ellipse wird dann so gezeichnet, dass sie genau in das Rechteck hineinpasst. width
und height
beziehen sich hier jeweils auf den Durchmesser der Ellipse
mwm.Ellipse(position, width, height)
Willst du eine Ellipse an der Position (100, 100) mit Breite 20 und Höhe 100 zeichnen, so musst du folgendes schreiben:
import miniworldmaker as mwm
board = mwm.Board(800, 600)
ellipse = mwm.Ellipse((100, 100), 20, 100)
board.run()
Text#
Text-Tokens kannst du folgendermaßen erstellen:
mwm.Text(position, text)
Anschließend kannst du mit font_size
die Größe des Textes beeinflussen. Mit width
und height
kannst du abfragen wie viel Platz der Text
einnimmt.
Beispiel:
import miniworldmaker as mwm
board = mwm.Board()
t1 = mwm.Text((50,50), "Hallo")
t2 = mwm.Text((100,150), "Welt")
t2.font_size = 80
t2.x = (board.width - t2.width) / 2 # center text
board.run()
Number#
Mit Number-Tokens kannst du z.B. Spielstände zeichnen. Du kannst diese folgendermaßen erstellen:
Number(position, text)
Anschließend kannst du mit set_number()
die Zahl verändern, mit inc()
um eins erhöhen und mit get_number()
abfragen.
Beispiel:
import miniworldmaker as mwm
board = mwm.Board()
t1 = mwm.Number((50,50), 1)
t2 = mwm.Number((100,150), 4)
t3 = mwm.Number((200,150), 0)
t2.font_size = 80
t2.inc()
t3.set_number(1001)
print(t3.get_number()) # 1001
board.run()