Opdracht 5(**) Sinaasappels

Plaats reactie
admin
Site Admin
Berichten: 36
Lid geworden op: 01-02-2017 10:09

Opdracht 5(**) Sinaasappels

Bericht door admin » 06-03-2017 22:08

Dit lijkt erg op de vlo die verdwijnt als ie de vis raakt.
Nu moet je iets soortgelijks doen bij de tuinman OF de sinaasappel. Volgens mij kan het allebei, maar ik kies voor de tuinman,

Eerst maar eens programmeren dat de tuinman een punt krijgt als hij een sinaasappel raakt:

Bij de public void act vd tuinman schrijf ik eerst deze methodeaanroep erbij:

Code: Selecteer alles

tuinmanRaaktSinaasappel();
Dan wat verder naar onderen deze methode definieren:

Code: Selecteer alles


public void tuinmanRaaktSinaasappel()
    {
        if (isTouching (Orange.class)) 
        {
           addPoints(1);         
           removeTouching(Orange.class);
       }     
    }
Test of het werkt.

Nu moet de tuinman een aantal punten krijgen gelijk aan de grootte vd sinaasappel.
Even zoeken bij de code vd sinaasappel en je ziet dit:

Code: Selecteer alles

public int getSize () 
{
        return size;
}
Elke aparte sinaasappel heeft dus z’n eigen size al bij zich in de code.
Je hebt geleerd hoe je een methode aanroept van een ander object. In dit geval moet het iets worden zoals:

Als de Gardener de Orange raakt…
{
Welke Orange raakt hij dan? Haal de gegevens van precies DIE Orange op.
Haal de grootte van die orange op.
Tel de grootte op bij het puntenaantal van de Gardener
}


In code:

Code: Selecteer alles


public void tuinmanRaaktSinaasappel()
    {
        if (isTouching (Orange.class)) 
        {
          Orange sinaasappel = (Orange)getOneIntersectingObject(Orange.class);
           points = points + sinaasappel.getSize();
           World world = getWorld();
            removeTouching(Orange.class);
       }     
    }
Let weer op de casting (zie opdracht 6.7 onderaan). Je zegt dus:
(Orange)getOneIntersectingObject(Orange.class);

En niet:
getOneIntersectingObject(Orange.class);

Want dan krijg je de foutmelding zoals bij Opdracht 6.7 aangegeven.

ReneBruikman
Berichten: 8
Lid geworden op: 06-02-2017 16:55

andere oplossing

Bericht door ReneBruikman » 10-03-2017 11:19

Het kan ook in sinaasappel

Code: Selecteer alles


public void oppakken() {
        if (isTouching (Gardener.class)) {
           Gardener tuinman = (Gardener)getOneIntersectingObject (Gardener.class);
           tuinman.addPoints(1 + size);
           World world = getWorld();
           world.removeObject (this);
        }
    }
en

Code: Selecteer alles


/**
     * Act - do whatever the Orange wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        oppakken();
    }  

Plaats reactie