Praktijk

!Let op: Als je het document dezelfde naam geeft als een van je libraries, leest je prorgamma de library niet in.

Turtle race

We gaan verder werken met turtle. We gaan een turtle race maken. In de race gaan de 4 racers per stap willekeurig tussen 1 en 6 stappen naar voren. Wie het eerst over de finishlijn is wint.

We beginnen met het aanroepen van de libraries. Je kunt een hele library aanroepen, maar je kunt ook delen van de library aanroepen. We roepen twee libraries aan Turtle en random:

 # roep de library aan en importeer daar delen van 
 from turtle import Screen, Turtle 
 from random import randint

Note: Nu is duidelijk aangekondigd waar random vandaan komt. Er hoeft nu niet nog randint.random gebruikt te worden.

 

De volgende stap is om een venster te maken.

 # venster instellingen 
 screen = Screen()      # er wordt een variabele screen gemaakt.
 screen.setup(1000, 600) # de maten van het venster worden bepaald.

Standaard wordt turtle.turtle weergegeven, het pijltje, maar voor deze race willen we die niet zien dus zetten we deze uit.

 # Pijlicoon en snelheid
 t = Turtle(visible=False) # maakt een variabele met turtle en maakt het pijlicoontje onzichtbaar
 t.speed('fastest')        # zorgt dat er zo snel mogenlijk bewogen kan worden 

We maken ook alvast een variabele die aangeeft wat de locatie is waar de start begint en waar het einde eindigt.

 # maak een startline en een finishlijn variabele. 
 START_LINE = -300 
 FINISH_LINE = 300

Deze lijn is niet zichtbaar, maar kondigt wel aan waar de turtles beginnen en eindigen, zoals je kunt zien in de afbeelding hieronder:

 

Nu het venster getekend is en de pijl verborgen, is het tijd om de race lijnen te tekenen.

Hiervoor gebruiken we een for loop.

# teken de horizontale lijnen 
for y in range(-200, 300, 100):  # vanaf -200 op de lijn y
   t.up() 
   t.goto(START_LINE - 100, y) 
   t.down() 
   t.forward((FINISH_LINE + 90) - (START_LINE - 100))

Deze code schrijft de horizontale lijnen:

 

We gaan nu de Startlijn en de Finishlijn tekenen.

Dit doen we met een for-loop, voor alle variabelen x die tussen -100 en -10 vallen

# Starting and Finishing Gates
for x in [START_LINE - 100, FINISH_LINE - 10]:
   t.up() 
   t.goto(x,200) 
   t.right(90)
   t.down() 
   t.forward(400)
   t.left(90)
   t.forward(100)
   t.left(90)
   t.forward(400)
   t.right(90)

 

Opdracht: Teken de eerste race kandidaat.

De eerste kandidaat noemen we "d" deze moet de volgende waardes hebben;

  • het moet een rode pijl
  • de begint coordinaten zijn x -50(breed), y150(hoog) zodat hij mooi binnen de lijntjes van het start blok getekend worden.
  • het moet een snelheid hebben.
  • het blok heeft als waardes; breedte op -400 tot -300 en hoogte op -200 en -100.

 

 

De volgende kandidaten kunnen worden toegevoegd.

 # de tweede race kandidaat 
 c = Turtle('turtle')
 c.color('blue')
 c.speed(5)
 c.up()
 c.goto(START_LINE -50, 50)
 c.right(360)

 

Opdracht: Teken de 3e en 4e kandidaat

Teken de 3e kandidaat heet b en is een pijl in het geel, gebruik hier voor arrow.

Zet hem op de lijn op -50 -50

 

De 4e kandidaat heet a en wordt een groene turtle.

Deze komt op de lijn op -50 -150.

 

 

Nu gaan we werken met een While statement.

De while staat voor zolang. Dus zolang de waardes van deze acties waar zijn worden ze uitgevoerd.

De a, b, c en d komen van de kandidaten waarna we een variabele xcor gebruiken dit doen we door de a en xcor() te koppelen met een punt dus a.xcor().

 while a.xcor() < FINISH_LINE

Dit zelfde gaan we doen voor b en c.

 and b.xcor() < FINISH_LINE and c.xcor() < FINISH_LINE:

 

Opdracht: Zorg dat d er ook tussen komt te staan.

d moet ook kleiner zijn dan finisch_line

 

 

Nu willen we dat a vooruit gaat met een willekeurige hoeveelheid stappen wisselend tussen 1 stap en 6 stappen.

weer gebruiken we a om de kandidaat aan te roepen en nu gebruiken we de variabele forward om a vooruit te laten gaan.

variabele forward() krijgt een willekeurige waarde tussen 1 en 6 dus we roepen randint() aan uit de library en geven daarin aan tussen welke waarden er random gekozen mag worden.

 

a.forward(randint(1, 6))

We hebben nu de variabele randint() in de variabele forward() gestopt:

forward(randint(1,6))

 

Dit gaan we nu ook doen voor b, c en d (let op! deze moeten allemaal op hun eigen regel staan!)

We eindigen met de volgende regel:

 screen.mainloop()

 

Opdracht: Maak de race af.

zorg dat alle kandidaten een random warde hebben die ze vooruit gaan en zorg dat er nette aantekeningen staan bij je code.