Schülerarbeit: Turtlegame

Turtle Graphics

In diesem Turtlegame von Jana Hess geht es darum, die Turtle geschickt durch ein Feld von Hindernissen zu steuern, ohne in eine der Fallen zu geraten.

Der Programm-Code

# Die Turtle geht bei schwarzen Feldern rechts, bei blauen links 
# oder rechts, bei grünen hat man verloren, ausser man ist vor 
# weniger als sechs Fledern über ein viollettes gefahren, beim 
# roten hat man gewonnen.
#
# (c) 2014, Jana Hess
#
from gturtle import*
from time import sleep
from random import randint

CELLSIZE =40

# Gitter zeichnen für das Spiel
def drawGrid():
    hideTurtle()
    setPenColor("gray")
    x=-400
    repeat (800//CELLSIZE)+1:
        setPos(x,-300)
        moveTo(x,+300)
        x+= CELLSIZE
    y=-300
    repeat (600//CELLSIZE)+1:
        setPos(-400,y)
        moveTo(+400,y)
        y+= CELLSIZE
    setPos (0,0)
    showTurtle()
    
# Wenn man die Maus klickt...
def onClick(x,y):
    turtle_x= getX()
    turtle_y =getY()
    hideTurtle()
    setPos(x,y)
    # Wenn der Pixel schwarz ist...
    if getPixelColorStr() =="white":
        setFillColor("black")
        fill()
    elif getPixelColorStr() == "black":
        setFillColor("white")
        fill()
    # Wieder an die alte Stelle zurück
    setPos(turtle_x, turtle_y)
    showTurtle()
    
# Einen Schritt vorwärts
def doStep(anzahlFelder):
    hideTurtle()
    forward(CELLSIZE)
    x=getX()
    y=getY()
    if x<-400 or x>400 or y< -300 or y> 300:
            msgDlg("Du hast verloren. Spiele noch einmal.")
            return
    elif getPixelColorStr() == "black":
        back(CELLSIZE)
        right(90)
    elif getPixelColorStr() == "red":
        showTurtle()
        msgDlg("Du hast gewonnen!!!")
        return
    elif getPixelColorStr() == "green":
        if anzahlFelder> 6:
            msgDlg("Du hast verloren. Spiele noch einmal.")
            return
        else:
            forward(0)    
    elif getPixelColorStr() == "navyblue":
        back(CELLSIZE)
        j= randint(1,2)
        if j==1:
            left(90)
        if j==2:
            right (90)
    elif anzahlFelder <6:
        setColor(" orange")
    elif anzahlFelder > 6:
        setColor("cyan")
        
def spiel():        
    makeTurtle (mouseHit = onClick)
    drawGrid()
    penUp()
    # Färbt die Felder
    repeat 30:
        s= randint(-10,9)
        t= randint (-7,7)
        setPos(s*CELLSIZE + 10,t*CELLSIZE +10)
        setFillColor("green")
        fill()

    repeat 30:
        q= randint(-10,9)
        w= randint(-7,7)                                     
        setPos(q*CELLSIZE+10,w*CELLSIZE+10)
        setFillColor("navyblue")
        fill()
    repeat 7:
        f= randint(-10,9)
        e= randint (-7,7)
        setPos (f*CELLSIZE +10, e*CELLSIZE +10)
        setFillColor("darkviolet")
        fill()
           
    # ZEICHNET DAS ZIELFELD
   
    d= randint(-9,9)
    e= randint(-7,7)
    setPos(d*CELLSIZE+10, e*CELLSIZE+10)
    setFillColor("red")
    fill()
    setPos(-400+ 5*CELLSIZE// 2, -300+5*CELLSIZE//2)
    repeat 25:
        if getPixelColorStr() == "green":
            forward(CELLSIZE)
        else:
            forward(CELLSIZE)
            if getPixelColorStr() == "green":
                forward(CELLSIZE)
            else:
                back(2*CELLSIZE)
                break
    showTurtle()
    anzahlSchritte=0
    anzahlfelder=6
    anzahlFelder=6
    repeat 1000:
        doStep(anzahlFelder)
        showTurtle()
        sleep(0.5)
        x=getX()
        y=getY()
        if (x<-400) or (x>400)or  y<-300 or (y>300):
                break
        elif getPixelColorStr() == "darkviolet":
            anzahlfelder =0
            anzahlFelder =0
        elif getPixelColorStr() == "red" :
            break
        elif getPixelColorStr()== "green":
            if anzahlfelder < 6:
                forward(0)
            else:
                break
        elif anzahlfelder <6:
            setColor(" orange")
        elif anzahlfelder > 6:
            setColor("cyan")
        anzahlfelder+=1
        anzahlFelder+=1

msgDlg("Klicke mit der Maus um schwarze Felder zu erzeugen.\n"+
       "Bringe die Schildkröte in das rote Feld ohne auf grüne\n"+
       "Felder zu kommen, ausser die Schildkröte ist orange.")
spiel()        
repeat:
    antwort = askYesNo("Willst du noch einmal spielen?")
    if antwort == True:
        spiel()
    else:
        break
dispose()