This site requires JavaScript, please enable it in your browser!
Greenfoot back
OnTheCrystalShip
OnTheCrystalShip wrote ...

2015/5/24

Having trouble with Counters

OnTheCrystalShip OnTheCrystalShip

2015/5/24

#
Hey Greenfooters. I'm having some trouble getting counters to work consistently. I just quickly wrote up 2 programs. In the first one, the counter works perfectly. In the second one, it doesn't work at all. I can't see any major differences between the two, so I'm hoping you guys could shed some light on to why things aren't working as they should be. Game 1: Bee World (Working Counter) beeWorld (World Class):
import greenfoot.*;  

public class beeWorld extends World
{
    Counter counter = new Counter();
    
    public beeWorld()
    {    
        super(600, 400, 1); 

        prepare();
    }
    public Counter getCounter(){
        return counter;
    }
    
    private void prepare()
    {
        bee bee = new bee();
        addObject(bee, (getWidth())/2, (getHeight())/2);
        ant ant = new ant();
        addObject(ant, Greenfoot.getRandomNumber(getWidth()-5), Greenfoot.getRandomNumber(getHeight()-5));
        ant ant2 = new ant();
        addObject(ant2, Greenfoot.getRandomNumber(getWidth()-5), Greenfoot.getRandomNumber(getHeight()-5));
        ant ant3 = new ant();
        addObject(ant3, Greenfoot.getRandomNumber(getWidth()-5), Greenfoot.getRandomNumber(getHeight()-5));
        addObject(counter, 60, 30);
    }
    public void addAnt(){
        ant ant = new ant();
        addObject(ant, Greenfoot.getRandomNumber(getWidth()-5), Greenfoot.getRandomNumber(getHeight()-5));
    }
}
bee (Predator Class):
import greenfoot.*; 

public class bee extends Actor
{
    public void act() 
    {
        if(Greenfoot.isKeyDown("right")){
            move(5);
        }
        if(Greenfoot.isKeyDown("left")){
            move(-5);
        }
        if(Greenfoot.isKeyDown("up")){
            turn(5);
        }
        if(Greenfoot.isKeyDown("down")){
            turn(-5);
        }
        Actor ant = getOneIntersectingObject(ant.class);
        if(ant != null){
            World beeWorld = getWorld();
            beeWorld.removeObject(ant);
            beeWorld.addObject(ant, Greenfoot.getRandomNumber(beeWorld.getWidth()-5), Greenfoot.getRandomNumber(beeWorld.getHeight()-5));
            beeWorld BeeWorld = (beeWorld)beeWorld;
            Counter counter = BeeWorld.getCounter();
            counter.upScore();
        }
    }    
}
ant (Prey Class):
import greenfoot.*;

public class ant extends Actor
{
    public void act() 
    {
        move(8);
        if(getY() >= (getWorld().getHeight())-5 || getY() <= 5 || getX() >= (getWorld().getWidth())-5 || getX() <= 5){
            turn(90+Greenfoot.getRandomNumber(90));
        }
    }    
}
Counter:
import greenfoot.*; 
import java.awt.Color;

public class Counter extends Actor
{
    int score = 0;
    public void act() 
    {
        setImage(new GreenfootImage("Score: "+ score, 24, Color.RED, Color.WHITE));
    }
    public void upScore(){
        score++;
    }
}

Game 2: Fish World (Non-Working Counter) fishWorld (World Class):
import greenfoot.*;  

public class fishWorld extends World
{
    counter counter = new counter();

    public fishWorld()
    {    
        super(600, 400, 1); 

        prepare();
    }


    public counter getCounter(){
        return counter;
    }

    private void prepare()
    {
        fish fish = new fish();
        addObject(fish, (getWidth())/2, (getHeight())/2);
        mouse mouse = new mouse();
        addObject(mouse, Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
        addObject(counter, 60, 30);
    }
}

fish (Predator Class):
import greenfoot.*;  

public class fish extends Actor
{
    public void act() 
    {
        if(Greenfoot.isKeyDown("right")){
            move(5);
        }
        if(Greenfoot.isKeyDown("left")){
            move(-5);
        }
        if(Greenfoot.isKeyDown("up")){
            turn(5);
        }
        if(Greenfoot.isKeyDown("down")){
            move(-5);
        }
        Actor mouse = getOneIntersectingObject(mouse.class);
        if(mouse != null){
            World fishWorld = getWorld();
            fishWorld.removeObject(mouse);
            fishWorld.addObject(mouse, Greenfoot.getRandomNumber(fishWorld.getWidth()), Greenfoot.getRandomNumber(fishWorld.getHeight()));
            fishWorld FishWorld = (fishWorld)fishWorld;
            counter counter = FishWorld.getCounter();
            counter.upScore();
        }
    }    
}
mouse (Prey Class):
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class mouse extends Actor
{
    public void act() 
    {
        move(8);
        if(getX() >= (getWorld().getWidth())-5 || getY() >= (getWorld().getWidth())-5 || getX() <= 5 || getY() <= 5){
            turn(90+Greenfoot.getRandomNumber(90));
        }
    }    
}
counter:
import greenfoot.*; 
import java.awt.Color;

public class counter extends Actor
{
    int score = 0;
    public void act() 
    {
        setImage(new GreenfootImage("Score: "+ 0, 24, Color.RED, Color.WHITE));
    }    
    public void upScore(){
        score++;
    }
}
Thanks!
davmac davmac

2015/5/24

#
Spot the difference! Working:
        setImage(new GreenfootImage("Score: "+ score, 24, Color.RED, Color.WHITE));
Not working:
        setImage(new GreenfootImage("Score: "+ 0, 24, Color.RED, Color.WHITE));
You need to login to post a reply.