![]() |
Open het scenario greeps.
Greeps zijn dieren die verzot zijn op tomaten. Ze kunnen echter niet zwemmen !! We maken nu kennis met deze dieren. |
move
. Zoek uit wat het verschil is.
checkShip()
en pas het gedrag van de greep aan.
initEarth()
die Earth initialiseert:
for(int i=1 ; i<=20 ; i++){ //hier voeg je de juiste code toe om 1 greep toe te voegen. }
Greenfoot
kent de methode ask(...)
die aan de gebruiker een vraag stelt, en het antwoord dan bewaart (om er iets mee te doen, allicht). Raadpleeg de Greenfoot-documentatie. Gebruik deze methode net vóór de for
-loop in de methode initEarth()
. Wat merk je nu bij het opstarten van het spel? Tel je het juiste aantal greeps? Wat gebeurt er als de gebruiker geen getal opgeeft?
ask
vraagt een parameter: de vraag die aan de gebruiker gesteld moet worden. Wat de gebruiker ingeeft, wordt als tekst (String
) teruggegeven. Omdat je hier een getal (int
) nodig hebt om in de for
-lus te gebruiken, moet je doen wat er als tip in de Greenfoot-documentatie staat: you can use methods like Integer.parseInt
to turn the returned String into a number.
Als de gebruiker geen getal intikt, dan crasht het programma. Je krijgt een venster te zien met grijze en rode tekst, dat zijn foutmeldingen. Scroll naar boven, daar zou je NumberFormatException
moeten zien staan. Dat wijst je in de richting van de fout. (Je moet deze `fout' in het programma momenteel niet oplossen, de gebruiker moet maar netjes op de vraag antwoorden!)
rotation = 0
). Pas dit aan zodat elke greeps in een willekeurige richting vertrekt.
initEarth()
aan zodat elke tomatenstapel een willekeurige grootte (minstens 10, maximum 30 tomaten) heeft.
Werk twee mogelijkheden uit:
Werk dit uit in drie stappen:
minEenTomaat()
waarmee "iemand" (een greep dus) zal kunnen 'melden' dat er een tomaat "weg" is (om welke reden ook - bijvoorbeeld afgeladen in het schip). i
zodat elke greep met een andere hoek wordt aangemaakt.
(x,y)
grond of water is. Nu kan je volgende twee stappen uitwerken:
x
.
x
wordt een y
bepaald zodat het punt (x,y)
niet in het water ligt.
y
, dan is de kans groot dat het punt (x,y)
in het water ligt.
zolang het punt (x,y) op water ligt vul y in met een nieuwe willekeurige waardeAls de lus stopt, dan ligt het punt
(x,y)
niet in het water.
y
opnieuw berekend wordt.
aantal
greeps dat wordt toegevoegd in het ruimteschip.
y
-waarde is niet willekeurig, maar zorgt ervoor dat het ruimteschip zo laag mogelijk staat op grond. De x
-waarde wordt wel nog steeds willekeurig bepaald.
y
-waarde zodat het punt (x,y)
NIET in het water ligt.
y
op de grootst mogelijke waarde en verklein telkens met één tot je een positie hebt die niet in het water ligt.
aantal
.
x
-positie, maar waarbij de y
gekozen wordt zodat de tomatenstapel (het middelpunt van de afbeelding) NIET in het water ligt.
for
-lus om 3 tomatenstapels te plaatsen. Daarbij kies je voor elke tomatenstapel een willekeurige waarde voor x
.
x
, wordt de wereld verdeeld in 4 gelijke verticale stroken.
x
-waarde te berekenen voor elke tomatenstapel.
for-lus
aan zodat je op elke verticale lijn een tomatenstapel plaatst.
turnTowards(Actor actor)
, waarbij het type van de parameter een actor is. Deze methode moet de greep in de richting van de opgegeven actor zetten.
turnTowards(int x,int y)
die een groot deel doet van wat je hier nodig hebt. Zoek interactief (=met klikken) de positie van een willekeurige actor en vul die waarden in om een andere greep te draaien naar die actor. De x,y
-waarden voor de parameters moet je dus vragen aan de actor.
turnTowards(int x,int y)
wordt "overladen" door deze methode (andere parameters).
Actor
is, kan je gelijk welke actor (greep, tomatenstapel) als parameter invullen (=aanklikken).
turnToShip()
die een greep "richt" naar het ruimteschip.
turnToTomatoPile()
. In deze methode "zoekt" de greep naar een tomatenstapel in een straal van 40.
getRandomNumber
- hoe bepaal je het aantal elementen in een lijst?
draaiAanWater()
is niet zinvol als de greep een tomaat draagt. Vervang dit en laat de greep 'kiezen' tussen mogelijkheden:
act
.
roepGreeps()
die alle greeps 'roept' in een straal van 80 rondom zich.
Het is de bedoeling dat je alle greeps, die in de buurt zijn en nog geen tomaat hebben, zich "richten" naar de greep die hulp nodig heeft.
(x,y)
van het ruimteschip wordt bepaald, dit behoud je. Maar nu plaats je het ruimteschip (zonder greeps) op positie (x,0)
- bovenaan het scenario. Of beter een beetje lager rekening houdend met de afmeting van het ruimteschip. Pas de methode initEarth aan zodat enkel een ship en tomatenstapels worden toegevoegd.
y
-waarde van de eindpositie (de x
-waarde ligt vast bij het toevoegen in de wereld). Omdat de constructor gewijzigd is, zal je hiervoor ook een aanpassing moeten doen in de methodes die een ruimtetuig aanmaken. In de methode addShip geef je de eindpositie voor het schip mee.