Stap 3: Een tegenstander (turtle.Turtle)
Deze stap gebruikt and uit And, or en elif, left uit Lijnen en hoeken en hideturtle uit Een dobbelsteen. Nieuw is turtle.Turtle(): dat staat hieronder.
Een race in je eentje is niet spannend. Er moet een tegenstander bij.
Met turtle.forward stuurde je steeds dezelfde schildpad. Wil je er meer,
dan maak je ze zelf, met turtle.Turtle(). Elke aanroep geeft een
nieuwe schildpad, die je in een variabele bewaart. Daarna schrijf je die
naam voor het commando, op de plek van turtle:
import turtle
rood = turtle.Turtle()
rood.pencolor("red")
rood.forward(100)
blauw = turtle.Turtle()
blauw.pencolor("blue")
blauw.left(90)
blauw.forward(100)
import turtle
rood = turtle.Turtle()
rood.pencolor("red")
rood.forward(100)
blauw = turtle.Turtle()
blauw.pencolor("blue")
blauw.left(90)
blauw.forward(100)Elke schildpad begint in het midden, kijkt naar rechts en heeft een eigen
pen. blauw.left(90) draait alleen de blauwe: de rode loopt rechtdoor.
Die punt ken je uit String-methoden,
van tekst.upper(). rood.forward(100) is ook een methode: een functie
die bij één waarde hoort, hier bij de rode schildpad.
Opdracht: twee schildpadden
Plak je programma uit stap 2 in het veld. Ben je het kwijt, neem dan de oplossing van stap 2.
Pas je programma zo aan dat:
- de schildpad van
turtlealleen nog de finishlijn tekent, en daarna verdwijnt; - er twee nieuwe schildpadden zijn:
roodmet een rode pen, die begint op(-220, 30), enblauwmet een blauwe pen, die begint op(-220, -30); - ze om de beurt een stap van 1 tot en met 20 zetten, eerst rood en dan blauw;
- de race doorgaat zolang ze allebei nog vóór de streep staan.
Bij jou kan rood ook winnen: elke race loopt anders.
# Plak hier je programma uit stap 2
Klik hier voor een tip.
Verbergen ging met hideturtle. Elke nieuwe schildpad heeft zijn eigen
pen, dus penup en pendown doe je voor elk apart. De vraag van de
while gaat nu over twee schildpadden, en allebei moeten ze nog vóór de
streep staan.
Klik hier voor de oplossing.
import turtle
import random
turtle.penup()
turtle.goto(80, 130)
turtle.pendown()
turtle.goto(80, -130)
turtle.hideturtle()
rood = turtle.Turtle()
rood.pencolor("red")
rood.penup()
rood.goto(-220, 30)
rood.pendown()
blauw = turtle.Turtle()
blauw.pencolor("blue")
blauw.penup()
blauw.goto(-220, -30)
blauw.pendown()
while rood.xcor() < 80 and blauw.xcor() < 80:
rood.forward(random.randint(1, 20))
blauw.forward(random.randint(1, 20))
Is rood over de streep, dan zet blauw in die ronde nog zijn stap. Pas
daarna stelt de while zijn vraag opnieuw, en dan is het antwoord nee.
Er gaat iets mis
AttributeError: 'str' object has no attribute '_penkleur_invoer'
Oorzaak: je schreef rood = turtle.Turtle, zonder haakjes. Dan maak je
geen schildpad, maar geef je turtle.Turtle zelf een tweede naam. Bij
rood.pencolor("red") zoekt Python dan de schildpad op de verkeerde plek:
hij denkt dat "red" de schildpad is, en een tekst heeft geen pen. Vandaar
die vreemde melding.
Oplossing: zet de haakjes erachter, turtle.Turtle(), met een
hoofdletter T. Pas dan komt er een nieuwe schildpad.
Er lopen schuine lijnen vanuit het midden naar het begin van de banen.
Oorzaak: een nieuwe schildpad begint in het midden, met zijn pen
omlaag. turtle.penup() zet alleen de pen van de schildpad van turtle
omhoog, niet die van rood of blauw. Loopt een nieuwe schildpad dan met
goto naar de start, dan tekent hij onderweg.
Oplossing: geef elke nieuwe schildpad zijn eigen penup vóór de
goto, en pendown erna.
Kopieer je programma voordat je verdergaat: de editor bewaart het niet.
Door naar stap 4: vier schildpadden.