Opdracht 4(**) Plant geeft tomaten (??)

Plaats reactie
admin
Site Admin
Berichten: 39
Lid geworden op: 01-02-2017 08:45

Opdracht 4(**) Plant geeft tomaten (??)

Bericht door admin » 06-03-2017 20:25

Persoonlijk begrijp ik de tekst van de opdracht niet: moet er nu een tomaat worden gegeven aan de tuinman als het waterlevel groter is dan 8? Dat is het al vrij snel… En waar komt die tomaat opeens vandaan?
Ik negeer de passage over de tomaat omdat dit nergens bij a t/m d terugkomt.

Ik lees opdracht 4 daarom zo:

“Gebruik Tuinman scenario zoals je dat in dit hoofdstuk hebt gemaakt. Zorg ervoor dat telkens als het waterniveau van de plant hoger of gelijk is aan 750, de tuinman een punt krijgt. Volg de stappen hieronder.
a t/m d beschrijft eigenlijk de aanpak in stapjes: je moet nu ook een objectreferentie meegeven aan de plant zodra deze wordt aangemaakt door de tuinman. Dan kun je de tuinman een punt geven als het waterniveau vd plant boven de 750 komt.

Antwoord bij a.
Je moet dus eerst een veld definieren met een objectreferentie naar de tuinman, net zoals je dat bij de waterstraal deed. Open de code vd plant.
Dan ergens bovenaan definieren: Gardener tuinman;
(zet dit maar net onder int waterlevel neer)
Antwoord bij b.
Je moet dus de code vd plant weer openen. Kijk eerst bij de waterstraal. Daar heb ik staan:

/**
* Set the objectreference to the gardener
* @param tm The objectreference to the gardener
*/
public void stelTuinmanIn (Gardener tm) {
tuinman = tm;
}
//misschien heb je de oorspronkelijke engelse code nog staan:

/**
* Set the objectreference to the gardener
* @param g The objectreference to the gardener
*/
public void setGardener (Gardener tm) {
gardener = tm;
}

Maakt niet uit, allebei goed. Op je PO wil ik alleen NL-naamgevingen zien weet je nog?)
Kopieer die code naar de plant. Zet maar helemaal onderaan neer.

Antwoord bij c.
Als de tuinman een nieuwe plant maakt, moet de objectreferentie worden meegegeven. Dat lijkt heel erg op wat je bij de tuinman voor de waterstraal al deed.
Nu moet je dat dus bij de z-toets gaan doen voor de plant.
Er staat op dit moment dit in jouw code vd tuinman:

// If "z" is pushed, create a plant a the current location
if (Greenfoot.isKeyDown("z")) {
World world = getWorld();
world.addObject(new Plant(), getX(), getY());
}

Dat breid je uit en verander je naar:

// If "z" is pushed, create a plant a the current location
if (Greenfoot.isKeyDown("z")) {
World world = getWorld();
Plant plantje = new Plant();
plantje.stelTuinmanIn(this);
world.addObject(plantje, getX(), getY());
}
Let op de laatste regel!! Er staat nu ‘plantje’ ipv ‘new Plant()’
Antwoord bij D.
Ik begrijp uit de tekst dat de tuinman pas punten krijgt als het waterlevel boven de 750 komt, dus niet meer als de waterstraal de plant raakt. Dus eerst de code tuinman.addPoints(1); weghalen bij de waterstraal (knip de code weg).
Als het waterlevel van de plant hoger is dan 750….. dus je moet bij de plant zijn want daar zie je het waterlevel gedefinieerd staan. Open de code vd plant
Voeg deze code toe:

private void geefTuinmanPunten ()
{
if (waterLevel > 750)
{
tuinman.addPoints(1); //of garderner.addPoint(1); als je nog in het engels werkt
waterLevel = 750;
}
}
KLAAR! Tenminste, de tuiman krijgt nog steeds meerdere punten tegelijk als de straal de plant raakt (en het waterlevel > 750 is).

Na deze opdracht is de volledige code vd plant:


+++++++++begin
import greenfoot.*;
import java.awt.Color;

/**
* A Plant needs water, otherwise it disappears
*
*/
public class Plant extends Actor
{
// Field: determines the current waterlevel of the plant
int waterLevel = 500;
// jor: plant krijgt veld mee met objectreferentie mee naar Gardener genaamd 'tuinman'
Gardener tuinman;

/**
* The plant uses water
*/
public void act()
{
useWater();
geefTuinmanPunten();

}

private void geefTuinmanPunten ()
{
if (waterLevel > 750)
{
tuinman.addPoints(1);
waterLevel = 750;
}
}
/**
* Add water to the plant, up to a certain maximum
* @param amountOfWater The amount of water to be added (1-10)
*/
public void addWater (int amountOfWater) {
// The waterlevel is between 0 and 999. If 1 amount of water is added,
// the waterlevel rises with 50.
waterLevel += amountOfWater*50;
if (waterLevel > 999) {
waterLevel = 999;
}
updateStatusBar();
}

/**
* This method makes sure the waterlevel drops. It is a non-public method
* (it cannot be used from outside this class).
*/
private void useWater () {
// The waterlevel is between 0 and 999. With each cycle of Greenfoot
// (each act()), the waterlevel decreases by 1. If the waterlevel is 0,
// the Plant is removed.
waterLevel--;
updateStatusBar();
if (waterLevel == 0) {
getWorld().removeObject(this);
}
}

/**
* Update the statusbar indicating the amount of water. It is a non-public method
* (it cannot be used from outside this class).
*/
private void updateStatusBar() {
GreenfootImage newImage = new GreenfootImage ("plant.png");
newImage.setColor (Color.BLUE);
newImage.fillRect(18, 40-(waterLevel/60 +1) , 3 , waterLevel/60 + 1);
setImage (newImage);
}

/**
* Set the objectreference to the gardener
* @param tm The objectreference to the gardener
*/
public void stelTuinmanIn (Gardener tm) {
tuinman = tm;
}
}
+++++einde code plant

En de volledige code vd tuinman:
++++begin code tuinman
import greenfoot.*;
import java.awt.Color;

/**
* A gardener walks around and sprays water for his plants. It's a game, so it
* keep tracks of the amount of points. The more points, the better of course.
*
*/
public class Gardener extends Actor
{
// Field for keeping track of the points
int points = 0;

/**
* Act: walk around (using arrows), create plants (using "z")
* spray water (using space)
*/
public void act()
{
if (Greenfoot.isKeyDown("left")) {
setRotation(180);
move(1);
}
if (Greenfoot.isKeyDown("up")) {
setRotation(270);
move(1);
}
if (Greenfoot.isKeyDown("right")) {
setRotation(0);
move(1);
}
if (Greenfoot.isKeyDown("down")) {
setRotation(90);
move(1);
}

// If "z" is pushed, create a plant a the current location
if (Greenfoot.isKeyDown("z")) {
World world = getWorld();
Plant plantje = new Plant();
plantje.stelTuinmanIn(this);
world.addObject(plantje, getX(), getY());
}

// If spacebar is pushed, create a waterspray at the current location
if (Greenfoot.isKeyDown("space")) {
World world = getWorld();
WaterSpray waterStraal = new WaterSpray();
waterStraal.stelTuinmanIn(this);
waterStraal.setRotation (getRotation());
world.addObject(waterStraal, getX(), getY());
}
// Update the points
updateText();
}

/**
* Add a certain amount of points (e.g. when the waterspray hits a plant)
* Make sure the gardener shows the amount of points
* @param p amount of points to be added
*/
public void addPoints (int p) {
points += p;
updateText();
}

/**
* Show the amount of points above the head of the gardener. This is a non-public
* method (only avaible from inside the class).
*
*/
private void updateText() {
GreenfootImage newImage = new GreenfootImage ("gardener.png");
newImage.setColor (Color.BLACK);
newImage.drawString(points + "", 10, 15);
setImage (newImage);
}
}

+++++einde code tuinman

Plaats reactie