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

2018/11/21

Counter Issue

greenfootUser343 greenfootUser343

2018/11/21

#
Hello, There is an issue with the counter on this game. Here are my classes: Level Two Class
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Level2 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Level2 extends World
{
    public Level2()
    {    
        super(800, 600, 1);
        prepare(); 
    }

    public void prepare() {
        Counter counter = new Counter ();
        addObject(counter, 58, 26);
        counter.setLocation(35, 35);
        Car car = new Car();
        addObject (car, 400, 525);    
    }

    public void act() {
        if(Greenfoot.getRandomNumber(100) < 2) //this will make trucks randomley apear.
        {        
            addObject(new CarEnemy(counter), Greenfoot.getRandomNumber(455) + 195, 0); //this keeps trucks on the road   
        }
    }
}
CarEnemy Class
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class cars here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class CarEnemy extends Characters
{
    /**
     * Act - do whatever the cars wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        driveDown();
        endOfRoad();
    }
    private Counter counter;
    public CarEnemy(Counter pointCounter) {

        counter = pointCounter;

    }
    public void driveDown()
    {
        setLocation(getX(), getY() + 5);
    }
    public void endOfRoad()
    {
        if (canSee(Car.class))
        {
            collectItem(Car.class);
            Greenfoot.setWorld(new Level2GameOver ());

        }
        if(getY() >= getWorld().getHeight() -1)
        {
            getWorld().removeObject(this);
            counter.add(1);
        }
    }
}
Car Class
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Car here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Car extends Characters
{
    /**
     * Act - do whatever the Car wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        checkKeys();
    }
    
    public void moveLeft()
    {
        if(getX() > 195)
        {
            setLocation(getX() - 4, getY());
        }
    }
    
    public void moveRight()
    {
        if(getX() < 650)
        {
            setLocation(getX() + 4, getY());
        }
    }
    
    public void checkKeys()
    {
        if (Greenfoot.isKeyDown("left"))
        {
            moveLeft();
        }
        if(Greenfoot.isKeyDown("right"))
        {
            moveRight();
        }
    }
}
Counter Class
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Counter here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Counter extends Actor
{
    private static final Color transparent = new Color(0,0,0,0);
    private GreenfootImage background;
    private int value;
    private int target;
   public Counter()
    {
        background = getImage();  // get image from class
        value = 0;
        target = 0;
        updateImage();
    }

   public void act() 
    {
        if (value < target) {
            value++;
            updateImage();
        }
        else if (value > target) {
            value--;
            updateImage();
        }
    }
    
   public void add(int score)
    {
        target += score;
    }
    
    
   public int getValue()
    {
        return value;
    }
    
   public void setValue(int newValue)
    {
        target = newValue;
        value = newValue;
        updateImage();
    }
    
   private void updateImage()
    {
        GreenfootImage image = new GreenfootImage(background);
        GreenfootImage text = new GreenfootImage("" + value, 22, Color.YELLOW, transparent);
        image.drawImage(text, (image.getWidth()-text.getWidth())/2, 
                        (image.getHeight()-text.getHeight())/2);
        setImage(image);
    }
    
}
Characters Class
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Character here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Characters extends Actor
{
    public boolean atWorldEdge()
    {
        if(getX() < 10 || getX() > getWorld().getWidth() - 10)
            return true;
        if(getY() < 10 || getY() > getWorld().getHeight() - 10)
            return true;
        else
            return false;
    }
    
        public boolean canSee(Class clss)
    {
        Actor actor = getOneObjectAtOffset(0, 0, clss);
        return actor != null;        
    }
          
    
    public boolean collectItem(Class cls) {
        if (getOneIntersectingObject(cls) == null)
            return false;
        getWorld().removeObject(getOneIntersectingObject(cls));
        return true; 
    }
}
The error is 'cannot find symbol - variable counter' in the Level 2 Class Thanks in advance
Super_Hippo Super_Hippo

2018/11/21

#
Move line 18 in the Level2 class out of methods. But generally, instead of passing the counter object to the car, you would get the counter through a getter method from the world.
greenfootUser343 greenfootUser343

2018/11/22

#
Thank you, that resolved the issue.
You need to login to post a reply.