03. Hoofdstuk3

Concepten

Opdrachten

  1. TrafficSimulator (BASIS OEFENING)

    In de oplossing van hoofdstuk2 staat (bijna) alle code voor het gedrag van de auto in de methode act(). Een betere aanpak hiervoor voegt nieuwe methodes toe voor elke deelfunctionaliteit. Voeg de methodes naarRechts() en inhalen() toe. Gebruik de nieuwe methodes om hetzelfde gedrag te beschrijven.
    • In de methode naarRechts() gaat de auto één vak naar rechts indien dit mogelijk is zonder botsen. Bovendien vertraagt de auto als hij naar rechts gaat. Kopieer dus het eerste if-blok uit act() naar de nieuwe methode.
    • In de methode inhalen() probeert de auto een voorligger in te halen. Kopieer dus het tweede vernestelde if-blok uit act() naar de nieuwe methode.
    • In de methode act() volstaat het om beide methodes 'aan te roepen' om hetzelfde gedrag te beschrijven.

    Oplossing

  2. FatCat (BASIS OEFENING)

    We gaan nu verder met het scenario Fatcat. Werk alles uit in de klasse MyCat.
    1. Herschrijf de oplossingen uit vorig labo (gebruik knippen/plakken) met drie nieuwe methodes:
      • De methode eatSleepWalk() bevat het gedrag uit oefening 4.
      • De methode sleepDance() bevat het gedrag uit oefening 5.
      • De methode sleepHourray() bevat het gedrag uit oefening 6.

      De methode act() is nu helemaal leeg, want alle code is in de juiste methode gezet. De kat doet dus niets meer als je de knoppen act of run aanklikt.
      Om nu het "gedrag" van de kat in te stellen volstaat het de gewenste methode(s) 'aan te roepen' - gebruik Ctrl-spatie. Stel zelf een gedrag in naar keuze.

      Oplossing

    2. In de methode sleepDance() is het aantal tellen dat de kat slaapt ingesteld op 2. Wijzig dit zodat het aantal tellen dat de kat slaapt willekeurig wordt gekozen door het programma. Kies tussen 1, 2, 3, 4 of 5.
      Het gedrag van de kat moet je niet aanpassen. Test de methode enkel 'interactief' uit.
      Zoek in de Greenfoot Class Documentation de statische methode van de klasse Greenfoot waarmee je een willekeurig getal kan vragen.
      De parameter wordt ingevuld met het aantal mogelijke waarden waaruit gekozen wordt.
      Zoek de bewerkingen zodat je 0,1,2,3,4 wijzigt naar 1,2,3,4,5

      Oplossing

    3. Schrijf de methode chooseActivity() die één activiteit kiest uit twee mogelijkheden:
      • de kat eet een pizza;
      • de kat gaat slapen of dansen - gebruik de methode sleepDance.
      Elke activiteit heeft evenveel kans (50%).

      Pas het gedrag van de kat aan en controleer met "run" dat beide activiteiten willekeurig worden afgewisseld.
      Voeg ook een tweede kat toe. Wat is het verschil ?

      Oplossing

  3. Wombats (BASIS OEFENING)

    Vertrek van het scenario leaves-and-wombats (dit is een kopie van het boek-scenario uit hoofdstuk 1)
    Zoek een methode van WombatWorld waarmee je eenvoudig de wereld kan initialiseren met wombats en bladeren. Bewaar deze wereld.
    In deze wereld met lage resolutie kan de wombat enkel verticaal en horizontaal naar een aanliggende cel bewegen.

    1. Schrijf de nieuwe methode checkKeys() die de wombat kan "besturen" met de pijltjestoetsen. De wombat wijzigt zijn looprichting (zie tip) naar:
      1. boven als je op de pijltoets ↑ drukt
      2. rechts als je op de pijltoets → drukt
      3. beneden als je op de pijltoets ↓ drukt
      4. links als je op de pijltoets ← drukt
      Je kan deze methode niet interactief uittesten want de methode Greenfoot.isKeyDown(..) werkt enkel in "Run"-mode. Pas dus het 'gedrag' van de wombat aan en test de methode in "Run"-mode. Merk op dat alle wombats reageren op elke pijltjestoets.
      • Om te achterhalen welke toets werd ingedrukt, gebruik je een statische methode van de klasse Greenfoot. Zoek in de Greenfoot Class Documentation hoe de vier pijltoetsen beschreven worden.
      • Gebruik vier if-statements of een vernestelde if-else.
      • De methodes setRotation(int rotation) en turn(int), die de wombat erft van Actor, aanvaarden elk geheel getal voor de parameter. Enkel indien je een veelvoud van 90 ingeeft, zal de beweging van de wombat behouden blijven.
        De wombat heeft een eigen methode om zijn looprichting te wijzigen. Zoek die methode en test 'interactief' dat je als parameter het getal 0,1,2 of 3 moet ingeven, anders zal er niets gebeuren. Gebruik deze methode.

      Oplossing

    2. Verwijder in de klasse Wombat de methodes foundLeaf() en eatLeaf() volledig. Hierdoor krijg je een fout in de methode act() - verwijder ook de aanroep van deze methodes volledig (inclusief 1 blokje if...else - het bewegen moet je behouden!) . De wombat eet nu geen blaadjes meer.
      Voeg nu de methode checkActors() toe, die een wombat een blaadje laat eten en herstel het gedrag van de wombat.
      Omdat de wombat ook moet bijhouden hoeveel blaadjes hij al gegeten heeft voeg je onderstaande regel - die intuitief duidelijk is - toe op de juiste plaats:
                leavesEaten = leavesEaten + 1;
      
      Tot slot laat je de wombat een willekeurige richting "kiezen", nàdat hij een blaadje heeft opgegeten..
      Zoek de methodes isTouching en removeTouching op in de Greenfoot Class Documentation. Deze methodes zijn protected. Ga na dat je de methodes niet terugvindt in het object-menu van een wombat. Dit object-menu bevat enkel de publieke methodes. Open de editor van Wombat. Als je Ctrl-spatie indrukt krijg je álle methodes te zien die je nu kan aanroepen. Hier vind je dus ook de protected (en later ook private) methodes

      Oplossing

    3. Voeg een nieuwe actor-klasse Cactus toe. Zoek de gepaste afbeelding voor deze klasse. Als de wombat op een cactus komt, dan moet het spel stoppen. Werk dit uit als gedrag van de cactus.
      Soms loopt de Wombat nog 1 cel verder omdat de act-cyclus van elke actor nog wordt uitgevoerd. Dit moet je niet oplossen.

      Oplossing