Ineinander geschachtelte for-Schlaufen:
. Achtung: Es stosst jeder mit jedem, das heisst Ernst mit Silvia und Silvia mit Ernst.line und move in der Dokumentation ansetColor(makeColor(255, 0, 0, 100)) wird zum Beispiel ein transparentes Rot dargestellt.pushState() und popState() (siehe Beispiel Kapitel 2.11) anzuschauen. for c in 'abcd': print c
Neber der Möglichkeit, Farben als Strings anzugeben, besteht immer auch die Möglichkeit, Farben als RGB-Werte mit setColor(makeColor(r,g,b)) zu definieren. $r$, $g$, $b$ sind dabei die Rot-, Grün- und Blau-Anteile zwischen $0$ und $255$. Farben auswählen kann man mit einem ColorPicker
setColor() werden. Verwende dabei mindestens drei Farben.definiereFarbe zu schreiben.from gpanel import * # Globale Variablen zur Steurung kachelsize = 4 kachelno = 4 makeGPanel(0, kachelno*kachelsize, 0, kachelno*kachelsize) #Spielbrett tiles = [[-1, 2 ,4, 8], [16, 32 , 64, 128 ], [256, 512, 1024, 2048], [ -1 , -1, -1 , -1 ]] # Funktion zeichnet Kachel. # Argumente: olx, oly x und y Koordinate oben links # shownumber: Zahl die angezeigt werden soll # size: Grösse der Kachel def zeichneKachel(olx, oly, color, shownumber="", size=kachelsize): setColor(color) fillRectangle(olx,oly,olx+size,oly-size) if shownumber <> "": text(olx+size/2,oly-size/2,str(tiles[i][j]), Font("Courier", Font.PLAIN, 24),"black","white") # Funktion gibt Farbe auf Grund von Kachelwert zurück # Argumente: Kachelwert -1,2,4,...,2049 def definiereFarbe(kachelwert): # hier die Funktion definieren return("green") #loop durch zeilen for i in range(0, kachelno): #loop durch spalten for j in range(0, kachelno): #zeichne die Kachel i,j mit definierter Farbe zeichneKachel(0+j*kachelsize, kachelno*kachelsize-i*kachelsize, definiereFarbe(tiles[i][j]), str(tiles[i][j])) getKeyCodeWait() dispose()
Für 2048 müssen wir Elemente in Listen verschieben und ändern. Löse dazu folgende Aufgaben:
[3,8,-1,3] nach rechts schiebt. Achtung: '-1' steht dabei für «leer» %aus [[-1, 2, 4, 8], [16, 32, 64, 128], [256, 512, 1024, 2048], [-1, -1, -1, -1]] % wird [[-1, 256, 16, -1], [-1, 512, 32, 2], [-1, 1024, 64, 4], [-1, 2048, 128, 8]]
Listen sind zwar iterierbare Objekte, manchmal ist es aber hilfreich die Indices zu verwenden: Zwei von der Ausgabe her äquivalente Lösungen zur Ausgabe jedes Elements sind unten.
items = [2,-1,8,4] for i in range(len(items)): print(items[i]) for el in items: print(el)
Als kleine Hilfestellung noch die untenstehende Funktion printDoubleLists(lists). Diese gibt eine geschachtelte Liste wie sie z.B. in 2048 vorkommen, auf der Konsole aus.
import sys tiles = [[-1, 2 ,4, 8], [16, 32 , 64, 128 ], [256, 512, 1024, 2048], [ -1 , -1, -1 , -1 ]] def printDoubleLists(lists): for i in range(len(lists)): for j in range(len(lists[i])): sys.stdout.write(str(lists[i][j])) sys.stdout.write("\t") sys.stdout.write("\n") printDoubleLists(tiles)