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

2018/10/11

Help with keeping score.

Astrooocow Astrooocow

2018/10/11

#
I need help with my counter, for some reason, it is not counting up when the bullet collides with the goal, it just stays at 0.
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class SimpleGame here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class SimpleGame extends World
{
    /**
     * Constructor for objects of class SimpleGame.
     * 
     */
    Counter counter = new Counter();
    private static final GreenfootImage bgImage = new GreenfootImage("Background.png");
    public SimpleGame()
    {    
       super(600, 400, 1, false); 
       setBackground(bgImage);
       populate();
       getCounter();
    }
    public void populate()
    {
       Player p = new Player();
       addObject(p, 100, Greenfoot.getRandomNumber(200)+100);
       
       goal g = new goal();
       addObject(g, Greenfoot.getRandomNumber(100)+450, 200);
       
       Counter c = new Counter();
       addObject(c, 300, 50);
    }
    public Counter getCounter()
    {
        return counter;
    }
}
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Player here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Player extends Actor
{
    /**
     * Act - do whatever the Player wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    
    public void act() 
    {
        // Add your action code here.
        movePlayer();
        boundaries();
        if(Greenfoot.isKeyDown("space"))
            shoot();
    }
    public Player()
    {
        GreenfootImage image = getImage();
        image.scale(image.getWidth() - 100, image.getHeight() - 100);
        setImage(image);
    }
    public void movePlayer() //tests all movement keys and moves player
    {
        if(Greenfoot.isKeyDown("w"))
            setLocation(getX(), getY() - 6);
        if(Greenfoot.isKeyDown("s"))
            setLocation(getX(), getY() + 6);
    }
    public void boundaries() //keeps player within boundaries
    {
        if(getY() > 380)
            setLocation(getX(), getY() - 6);
        if(getY() < 20)
            setLocation(getX(), getY() + 6);
    }
    public void shoot()
    {
        getWorld().addObject(new bullet(), getX()+35, getY());
    }
}
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class goal here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class goal extends Actor
{
    /**
     * Act - do whatever the goal wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public boolean bool = false;
    public int count = 0;
    public int speed = 3;
    public int scoreCount = 0;
    public void act() 
    {
        // Add your action code here.
        moveg();
    }   
    public goal()
    {
        GreenfootImage image = getImage();
        image.scale(image.getWidth() - 100, image.getHeight() - 100);
        setImage(image);
    }
    public void moveg()
    {
        setSpeed();
        if(getDir())
            setLocation(getX(), getY() + speed);
        else
            setLocation(getX(), getY() - speed);
    }
    public boolean getDir()
    {
        if(getY() < 0)
        {
            bool = true;
            return(true);
        }
        else if(getY() > 380)
        {
            bool = false;
            return(false);
        }
        return(bool);
    }
    public void count()
    {
        count++;
    }
    public void setSpeed()
    {
        count();
        if(count == 1000)
            speed = 4;
        if(count == 2038)
            speed = 0;
    }
}
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.lang.Math;
/**
 * Write a description of class bullet here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class bullet extends Actor
{
    /**
     * Act - do whatever the bullet wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        setLocation(getX() + 12, getY());
        Actor player = getOneIntersectingObject(goal.class);
        if(player!=null)
        {
            ((SimpleGame)getWorld()).getCounter().addScore();
            getWorld().removeObject(this);
        }
    }
    public bullet()
    {
        GreenfootImage image = getImage();
        image.scale(image.getWidth() - 130, image.getHeight() - 130);
        setImage(image);
    }
    

}
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
{
    public int score = 0;
    public Counter()
    {
        updateCounter();
    }
    public void addScore()
    {
        score++;
        updateCounter();
    }
    public void updateCounter()
    {
        setImage(new GreenfootImage("Your Score: " + score, 24, Color.WHITE, Color.BLACK));
    }
}
danpost danpost

2018/10/11

#
Remove line 32 in your SimpleGame class and change 'c' in line 33 to 'counter'. This will allow your getCounter method to return the Counter object that is in your world (as opposed to a different one).
Astrooocow Astrooocow

2018/10/11

#
Thank you so much! I completely missed that. :) It works as expected now!
You need to login to post a reply.