Schülerarbeit: Malen nach Zahlen

Turtle Graphics

In Katja Bergers Programm lässt sich das Bild eines kleinen Hasen mit der Maus einfärben.

Der Programm-Code

#
#  Malen nach Zahlen
#
#  (c) 2014, Katja Berger
#
from gturtle import *
from soundsystem import *

#----- Begrüssung und Farbe holen ------#

#Freundliche Begrüssung :D
name = input("Geben Sie hier bitte Ihren Namen ein:")       
msgDlg("Hallo", name, ". Gleich wirst du ein süsses Malen\n" +
       "nach Zahlen Programm öffnen, hoffentlich gefällt es dir! ;)")

# Maus(Mensch) die Position, wo schlussendlich der Pinsel zeichnen soll
def moving(e):                      
    x = toTurtleX(e.getX())
    y = toTurtleY(e.getY())
    setPos(x, y)
    setCursor(Cursor.CROSSHAIR_CURSOR)
    
def onClick(x,y):                   
    setPos(x,y)   
    # Auf Mausklick "Boingen" (sollte einen Farbklecks 
    # darstellen) und Fläche füllen
    if (-250 < x < 250) and (-250 < y < 250):
        openSoundPlayer("wav/boing.wav")
        play() 
        fill(x,y)
    # Auf Mausklick alle Farben löschen
    if (300 < x < 380) and (-245 < y < -195): 
        hideTurtle()
        clear()
        malen_nach_zahlen()
        showTurtle()  
    
#Farben aufnehmen
def farbe_holen(e):                 
    setFillColor(getPixelColor())
        
#----- Bild -----#

def frame():                        
    setPenColor("black")
    setPos(-250, -250)
    repeat 4:
        forward(500)
        right(90)
        
def wiese():                        
    heading(90)
    setPos(-250, -100)
    def zickzack():
        repeat 7:
            left(45)
            forward(17.018)
            left(270)
            forward(17.018)
            heading(90)
    zickzack()
    penUp()
    forward(162)
    penDown()
    zickzack()

def cyrcle(r):                      
    repeat 360:
        forward(r)
        left(1)

def bein():                         
    forward(60)
    repeat 30:
        forward(1)
        right(1)
    repeat 150:
        forward(0.3)
        left(1)
    left(60)
    forward(112)
    repeat 180:
        left(1)
        forward(0.14)
        
# Definitionen für die Ohren
def arc_b():                        
    for i in range(30):             
            forward(3)
            right(3)

def arc_s():
    for i in range(30):
            forward(2)
            right(3)
           
def ohren():
    i = 300
    repeat 2:
        heading(i)
        arc_b()
        right(90)
        arc_b()
        heading(i)
        arc_s()
        right(90)
        arc_s()
        i = 20

def auge():
    setPos(-13, 39)
    cyrcle(0.25)
    setPos(-20,19)
    dot(20)
        
def hase():
    setPos(-82, -100)        # Bauch
    heading(180)
    cyrcle(1.413)
    setPos(77, -124)         # Pommelschwanz
    cyrcle(0.35)
    setPos(-20, -155)        # Kopf
    heading(135)
    cyrcle(0.75)
    setPos(40, -170)         # Bein
    heading (270)
    bein()                          
    setPos(-55,0)            # Nase
    dot(16)
    setPos(24, 57)           # Ohren
    ohren()
    auge()                   # Auge
 
def sonne():                        
    heading (180)
    setPos(140, 180)
    cyrcle(0.7)
    setPos(0, -40)
    heading(90)
    cyrcle(0.9)

# Zwischenlinien zur Unterteilung
def malen_nach_zahlen_linien():      
    setPos(-113, -250)
    moveTo(-250, 131)
    setPos(-206, 10)
    moveTo(-21, 250)
    setPos(250,26)
    moveTo(-44, 219)

#----- Texte und Zahlen -----#

# Farbbeschriftungen rechts                     
def text_rechts():                  
    k = 270
    setPenColor("black")
    setPos(k, 190)
    label ("1    braun")
    setPos(k, 120)
    label("2    blau")
    setPos(k,  50)
    label("3    grün")
    setPos(k, -20)
    label("4    rosa")
    setPos(k, -90)
    label("5    gelb")
    setPos(k, -160)
    label("6    weiss")
    setPos(320, 235)
    label ("Tag")
    
# Zahlen für die Farbverteilung
def zahlen():                       
    setPos(-67,-185)
    label("1")
    setPos(12, -141)
    label("1")
    setPos(-64, -115)
    label("1")
    setPos(14, 4)
    label("1")
    setPos(75, 73)
    label("1")
    setPos(-2, 110)
    label("1")
    setPos(-1, -39)
    label("1")
    setPos(-7, -179)
    label("1")
    setPos(-240, -39)
    label("2")
    setPos(-179, 163)
    label("2")
    setPos(63, 175)
    label("2")
    setPos(120, -11)
    label("2")
    setPos(117, -191)
    label("3")
    setPos(-216, -183)
    label("3")
    setPos(12, 73)
    label("4")
    setPos(45, 62)
    label("4")
    setPos(175, 170)
    label("5")
    setPos(90, -134)
    label("6")
    
# Farbbeschriftungen links         
def text_links():
    k = -370
    l = -280
    setPenColor("white")
    setPos(k, 190)
    label ("braun")
    setPos(k, 120)
    label("blau")
    setPos(k,  50)
    label("grün")
    setPos(k, -20)
    label("lachs")
    setPos(k, -90)
    label("grau")
    setPenColor("black")
    setPos(l, 190)
    label ("1")
    setPos(l, 120)
    label("2")
    setPos(l,  50)
    label("3")
    setPos(l, -20)
    label("4")
    setPos(l, -90)
    label("5")
    setPos(k, 235)
    label ("Nacht")

#----- Farbpaletten -----#

# Definition für den Rahmen der Farbpaletten
def frame_farbpalette(): 
    setPenColor("black")
    heading(90)
    forward(80)
    left(90)
    forward(50)
    left(90)
    forward(80)
    left(90)
    forward(50)
    left(135)
    penUp()
    forward(8)
    penDown()

        
# Farben für den Tag:
def farbpalette_hellbraun():        # hellbraun
    setPos(300, 175)
    frame_farbpalette()
    setFillColor("sandybrown")
    fill()
    

def farbpalette_hellblau():         # hellblau
    setPos(300, 105)
    frame_farbpalette()
    setFillColor("skyblue")
    fill()

def farbpalette_gruen():            # hellgrün
    setPos(300, 35)
    frame_farbpalette()
    setFillColor("green")
    fill()

def farbpalette_rosa():             # rosa
    setPos(300, -35)
    frame_farbpalette()
    setFillColor("pink")
    fill()
    
def farbpalette_gelb():             # gelb
    setPos(300, -105)
    frame_farbpalette()
    setFillColor("yellow")
    fill()

def farbpalette_weiss():            # weiss
    setPos(300, -175)
    frame_farbpalette()

# Farben für die Nacht:
def farbpalette_grau():             # grau
    setPos(-380, -105)
    frame_farbpalette()
    setFillColor("lightgrey")
    fill()

def farbpalette_lachs():            # lachs
    setPos(-380, -35)
    frame_farbpalette()
    setFillColor("salmon")
    fill()

def farbpalette_dunkelgruen():      # dunkelgrün
    setPos(-380, 35)
    frame_farbpalette()
    setFillColor("darkgreen")
    fill()

def farbpalette_dunkelblau():       # dunkelblau
    setPos(-380, 105)
    frame_farbpalette()
    setFillColor("darkblue")
    fill()

def farbpalette_braun():            # schwarz
    setPos(-380, 175)
    frame_farbpalette()
    setFillColor("brown")
    fill()

# Rahmen für den "Pinsel" :D
def frame_brush():                  
    setPos(-375, -160)
    label("Pinsel")
    setPos(-375, -250)
    repeat 4:
        forward(80)
        right(90)
        
def clear_kaestchen():
    setPos(300, -245)
    frame_farbpalette()
    setFillColor("red")
    fill()
    setPenColor("white")
    setPos(315,-232)
    label("clear")
    
# ----- Definition Programm -----#

def malen_nach_zahlen():
    makeTurtle("sprites/match.gif", 
               mouseHit = onClick, 
               mouseReleased = farbe_holen, 
               mouseMoved = moving)
    # Anmerkung: Habe keinen Pinsel gefunden, daher Streichholz ;)
    hideTurtle()
    frame()
    frame_brush()
    wiese()
    hase()
    sonne()
    malen_nach_zahlen_linien()
    farbpalette_hellbraun()
    farbpalette_hellblau()
    farbpalette_gruen()
    farbpalette_rosa()
    farbpalette_gelb()
    farbpalette_weiss()
    farbpalette_grau()
    farbpalette_lachs()
    farbpalette_dunkelgruen()
    farbpalette_dunkelblau()
    farbpalette_braun()
    clear_kaestchen()
    text_rechts()
    text_links()
    zahlen()
    # Tipp um ein schöneres Bild zu erhalten (unter dem Fenster)
    addStatusBar(35)                
    setStatusText("Tipp: Wenn du direkt auf die Zahlen klickst "+
                  "verschwinden diese, und dein Bild wird noch schöner!")
    # kleine Spielereien und "Pinsel" wird an den Platz gesetzt
    setPos(-120, 265)
    label("Viel Spass beim malen!")
    setPos(70, -287)
    label("© by_KatjaBerger")
    setPos(-335, -210)
    setPenColor("white")
    showTurtle()

# ----- los gehts! :) -----#

malen_nach_zahlen()