Hi, im having a problem.
I made a code for the crab game when the crab eats a worm a new worm gets added.
Now im trying to code to add 3 new worms when 3 worms have been eaten.
This is the code for my crab.
import greenfoot.*;
/**
* This class defines a crab. Crabs live on the beach.
*/
public class Crab extends Actor
{
private boolean readyForRemove;
private int wormsEaten;
private GreenfootImage imagePotenStrekken;
private GreenfootImage imagePotenSamen;
/**
* Dit is de constructor.
* Hier word aan de variabelen de initieele waarde toegekent.
*/
public Crab()// Waarde instellen voor potenstrekken en potensamen
{
imagePotenStrekken = new GreenfootImage("crab.png"); // Waarde voor Potenstrekken // Constructor
imagePotenSamen = new GreenfootImage ("crab2.png"); // Waarde Poten samen
setImage(imagePotenStrekken);
readyForRemove = false;
wormsEaten = 0; // eigenlijk begint een int standaard vanop nul maar het is good practice om dit toch zo te doen.
}
public void act()
{
eetWorm();
verplaats();
wisselAfbeelding();
wormToevoegen();
spelGewonnen();
removeIfMarked();
}
/**
* Verplaats de krab met 5 pixels op het scherm
*/
public void verplaats()
{
//Als ik pijltje rechts duw: voorwaarts, 7 pixels
if ( Greenfoot.isKeyDown("right") ) {
move(7);
}
//Als ik pijltje links duw: achterwaarts, 7 pixels
if ( Greenfoot.isKeyDown("left") ) {
move(-7);
}
//Als ik spatie indruk: draai, 3 graden
if ( Greenfoot.isKeyDown("space") ) {
turn(10);
}
if ( Greenfoot.isKeyDown("up") ) {
setLocation(getX(), getY() - 5);
}
if ( Greenfoot.isKeyDown("Down") ) {
setLocation(getX(), getY() + 5);
}
}
/**
* Als Crab een Worm aanraakt zegt hij tegen de worm dat hij zichzelf moet verwijderen.
* Hier word ook als er een worm word 'gegeten' iedere keer 1 bij de variable wormseaten bijgeschreven.
*/
private void eetWorm()
{
if (isTouching(Worm.class)) {
Worm worm;
worm = (Worm) getOneIntersectingObject(Worm.class);
worm.remove();
wormsEaten = wormsEaten + 1;
Greenfoot.playSound("slurp.wav");
}
}
/**
* Gaat de waarde van de variable wormsEaten teruggeven
* Hierdoor weten we hoeveel wormen Crab heeft gegeten
*/
public int HoeveelWormenGegeten()
{
return wormsEaten;
}
/**
* Het spel is gewonnen als de waarde van variabel wormsEaten 8 is.
*/
private void spelGewonnen()
{
if (wormsEaten == 8){
Greenfoot.playSound("fanfare.wav");
Greenfoot.stop();
}
}
public void wormToevoegen()
{
if (wormsEaten == 3){
Worm worm;
worm = worm;
worm.nieuweWorm();
}
}
/**
* Deze methode wisselt van afbeelding
*/
private void wisselAfbeelding()
{
if ( !isRemoved() ) {
if (getImage() == imagePotenStrekken ) { //als de poten gestrekt zijn
setImage(imagePotenSamen);//doe poten dich
}
else {
setImage(imagePotenStrekken); // als dat niet waar
}}
}
/**
* Markeer het object om verwijderd te worden.
*/
public void remove()
{
readyForRemove = true;
}
/**
* Geeft de huidige waarde true of false van de variabel readyForRemove
*/
public boolean isRemoved()
{
return readyForRemove;
}
/**
* Verwijder het object indien het gemarkeerd is om te verwijderen.
* Plaats deze methode als LAATSTE METHODE IN DE ACT!!
*/
private void removeIfMarked()
{
if (readyForRemove == true) {
getWorld().removeObject(this);
}
}
}
this is the code for my worm:
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Worm here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Worm extends Actor
{
private boolean readyForRemove;
/**
* Act - do whatever the Worm wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
removeIfMarked();// Add your action code here.
}
/**
* Dit is de constructor van Worm
* Hier worden de initieele waardes van de variabelen gegeven.
*/
public Worm()
{
readyForRemove = false;
}
/**
* Als je deze methode gebruikt die hieronder beschreven is, veranderd de waarde van variabel readyForRemove naar true
*/
public void remove()
{
readyForRemove = true;
}
/**
* Gaat de huidige waarde opvragen van de variabel readyForRemove, true of false
*/
public boolean isMarkedRemove()
{
return readyForRemove;
}
/**
* Verwijdert zichzelf als de waarde van removeIfMarked true is.
*/
private void removeIfMarked()
{
if ( readyForRemove == true) {
getWorld().removeObject(this);
}
}
/**
* Maakt een nieuw object van Worm aan op een willekeurige plaats in de wereld
*/
public void nieuweWorm()
{
Worm worm;
worm = new Worm();
CrabWorld crabWorld = (CrabWorld) getWorld();
int wereldBreedte = crabWorld.getWidth();
int wereldHoogte = crabWorld.getHeight();
int x = Greenfoot.getRandomNumber(wereldBreedte);
int y = Greenfoot.getRandomNumber(wereldHoogte);
crabWorld.addObject(worm, x, y);
}
}