Ga naar hoofdinhoud

Stap 2: Ogen die meegroeien (rekenen met een variabele)

info

Deze stap rekent met variabelen, uit Rekenmachine.

Het hoofd heeft ogen nodig: stippen, net als op de dobbelsteen. Het nieuwe is dat je de plek niet met vaste getallen opschrijft, maar uitrekent met maat:

import turtle

maat = 150

turtle.penup()
turtle.goto(maat / 4, maat * 3 / 4)
turtle.dot(maat / 5, "black")

Linksonder in het hoofd is (0, 0), net als bij de dobbelsteen. Alle getallen komen uit maat: het oog staat op een kwart van de breedte en op driekwart van de hoogte, en de stip is maat / 5 breed. Maak je het hoofd groter, dan schuift het oog mee en groeit het mee.

Opdracht: een robotkop​

Geef het hoofd uit stap 1 twee ogen en een mond. De mond is een lijn van (maat / 4, maat / 4) naar (maat * 3 / 4, maat / 4). Zet daarna maat eens op 80: het hele gezicht moet meekrimpen.

Een lichtgrijs vierkant hoofd met twee zwarte stippen als ogen en een streep als mond

import turtle

maat = 150
kleur = "lightgray"

turtle.fillcolor(kleur)
turtle.begin_fill()
turtle.forward(maat)
turtle.left(90)
turtle.forward(maat)
turtle.left(90)
turtle.forward(maat)
turtle.left(90)
turtle.forward(maat)
turtle.left(90)
turtle.end_fill()
Klik hier voor een tip.

Het tweede oog staat op (maat * 3 / 4, maat * 3 / 4). Voor de mond loop je met de pen omhoog naar het begin, zet je de pen neer met turtle.pendown(), en loop je met goto naar het eind.

Klik hier voor de oplossing.
import turtle

maat = 150
kleur = "lightgray"

turtle.fillcolor(kleur)
turtle.begin_fill()
turtle.forward(maat)
turtle.left(90)
turtle.forward(maat)
turtle.left(90)
turtle.forward(maat)
turtle.left(90)
turtle.forward(maat)
turtle.left(90)
turtle.end_fill()

turtle.penup()
turtle.goto(maat / 4, maat * 3 / 4)
turtle.dot(maat / 5, "black")
turtle.goto(maat * 3 / 4, maat * 3 / 4)
turtle.dot(maat / 5, "black")

turtle.goto(maat / 4, maat / 4)
turtle.pendown()
turtle.goto(maat * 3 / 4, maat / 4)
turtle.hideturtle()

De laatste regel verbergt de schildpad, anders staat hij als een pijltje aan het eind van de mond.

Er gaat iets mis​

Je vergeet turtle.penup() voor het eerste oog. Dan trekt de schildpad een schuine streep van de hoek van het hoofd naar het oog.

Oorzaak: goto tekent net als forward, zolang de pen omlaag staat.

Oplossing: til de pen op vóór je naar een nieuwe plek loopt, en zet hem pas neer als je weer wilt tekenen.

Maak het je eigen​

Alles wat je nu aan de robot toevoegt, reken je ook uit met maat. Dan groeit het mee als je het hoofd groter maakt.

  • Zet een antenne op het hoofd: een lijn vanaf het midden van de bovenkant, met een rode stip erop.
  • Kies de kleur van de ogen met een variabele oogkleur, en kijk hoe de robot verandert als je de ogen half zo groot maakt.
  • Geef hem oren: twee kleine vierkanten aan de zijkanten van het hoofd.
  • Zet een tweede robot naast de eerste, in een andere kleur en maat. Geef het hoofd een plek x: loop met de pen omhoog naar (x, 0) voordat je het vierkant tekent, en tel x op bij de x van de ogen en de mond. Kopieer daarna het hele programma onder zichzelf, en geef x, maat en kleur nieuwe waarden. Dat wordt een lang programma, met twee keer bijna hetzelfde erin.

Door naar het volgende project: Een verkeerslicht.