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

2018/4/18

Removing an object when a value is met

Yomi Yomi

2018/4/18

#
In my game, the player can gain and lose hp; I am trying to get it so that once 'totalCount' for hp is below 0, the player actor will be removed. When I attempt this, one of my errors is that the symbol can't be found, though as far as I can tell I'm calling it in the same way I've called other methods. The second error comes (I think) from the first one, in that it can't find the variable I'm trying to recieve from the method. I've tried to do it similarly to the tutorial on removing objects (https://www.greenfoot.org/doc/tut-3) with the exception that instead of being removed from collision, its removed from a number. Any help with this is greatly apreciated. The code related to my issue is here; Player_1_1:
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_1_1 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() 
    {
        int x = getX();
        int y = getY();
        
        
        
        if (Greenfoot.isKeyDown("a"))
        {
            setLocation(x-1,y);
            if (getOneIntersectingObject(Wall.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(half_wall_side.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(half_wall_up.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(wall_10x1.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(wall_11x1.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(wall_1x7.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_wall.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_half_wall_side.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_half_wall_up.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_wall_10x1.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_wall_11x1.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_wall_1x7.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_half_wall_side_10x1.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_half_wall_side_11x1.class) != null) 
            setLocation (getX()+1,getY());
            if (getOneIntersectingObject(blue_half_wall_1x7.class) != null) 
            setLocation (getX()+1,getY());
        }
        if (Greenfoot.isKeyDown("d"))
        {
            setLocation(x+1,y);
            if (getOneIntersectingObject(Wall.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(half_wall_side.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(half_wall_up.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(wall_10x1.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(wall_11x1.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(wall_1x7.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_wall.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_half_wall_side.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_half_wall_up.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_wall_10x1.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_wall_11x1.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_wall_1x7.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_half_wall_side_10x1.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_half_wall_side_11x1.class) != null) 
            setLocation (getX()-1,getY());
            if (getOneIntersectingObject(blue_half_wall_1x7.class) != null) 
            setLocation (getX()-1,getY());
        }
        if (Greenfoot.isKeyDown("w"))
        {
            setLocation(x,y-1);
            if (getOneIntersectingObject(Wall.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(half_wall_side.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(half_wall_up.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(wall_10x1.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(wall_11x1.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(wall_1x7.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_wall.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_half_wall_side.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_half_wall_up.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_wall_10x1.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_wall_11x1.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_wall_1x7.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_half_wall_side_10x1.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_half_wall_side_11x1.class) != null) 
            setLocation (getX(),getY()+1);
            if (getOneIntersectingObject(blue_half_wall_1x7.class) != null) 
            setLocation (getX(),getY()+1);
        }
        if (Greenfoot.isKeyDown("s"))
        {
            setLocation(x,y+1);
            if (getOneIntersectingObject(Wall.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(half_wall_side.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(half_wall_up.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(wall_10x1.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(wall_11x1.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(wall_1x7.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_wall.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_half_wall_side.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_half_wall_up.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_wall_10x1.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_wall_11x1.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_wall_1x7.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_half_wall_side_10x1.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_half_wall_side_11x1.class) != null) 
            setLocation (getX(),getY()-1);
            if (getOneIntersectingObject(blue_half_wall_1x7.class) != null) 
            setLocation (getX(),getY()-1);
        }
        
        Actor Medicine;
        Medicine = getOneObjectAtOffset(0, 0, Medicine.class);
        if (Medicine != null)
        {
            World world;
            hit_med();
            world = getWorld();
            world.removeObject(Medicine);
            //add 1 to hp
        }
        
        Actor Drug;
        Drug = getOneObjectAtOffset(0, 0, Drug.class);
        if (Drug != null)
        {
            World world;
            hit_drug();
            death();
            world = getWorld();
            world.removeObject(Drug);
            //remove 1 from hp
        }
        
        
        
        Actor Coin;
        Coin = getOneObjectAtOffset(0, 0, Coin.class);
        if (Coin != null)
        {
            World world;
            hit_coin();
            world = getWorld();
            world.removeObject(Coin);
            //add 1 to currency
        }
        
        
        
        Actor Scene_Changer_L1_1;
        Scene_Changer_L1_1 = getOneObjectAtOffset(0, 0, Scene_Changer_L1_1.class);
        if (Scene_Changer_L1_1 != null)
        {
            Level_1_2 level = new Level_1_2();
            level.getHpCounter().bumpCount(((Level_1_1)getWorld()).getHpCounter().getCount());
            level.getCounter().bumpCount(((Level_1_1)getWorld()).getCounter().getCount());
            Greenfoot.setWorld(level);
        }
        
        
    }    
    
    private void hit_coin()
    {
            Level_1_1 levelOneOne = (Level_1_1) getWorld();
            coin_counter counter = levelOneOne.getCounter();
            counter.bumpCount(1);
    }
    
    private void hit_med()
    {
            Level_1_1 levelOneOne = (Level_1_1) getWorld();
            hp counter = levelOneOne.getHpCounter();
            counter.bumpCount(1);
    }
    
    private void hit_drug()
    {
            Level_1_1 levelOneOne = (Level_1_1) getWorld();
            hp counter = levelOneOne.getHpCounter();
            counter.reduceCount(1);
    }
    
    private void death()
    {
        Level_1_1 levelOneOne = (Level_1_1) getWorld();
        hp counter = levelOneOne.getHpCounter();
        getCount();
        Actor Player;
        if (totalCount ==-1)
        {
            World world;
            world = getWorld();
            world.removeObject(Player);
        }
    }
}
hp:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class hp here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class hp extends Actor
{
    private int totalCount = 0;
    
    

    public void Counter()
    {
        setImage(new GreenfootImage("HP: 1", 20, Color.WHITE, Color.BLACK));
    }

   
    
    public void bumpCount(int amount)
    {
        totalCount += amount;
        setImage(new GreenfootImage("HP: " + totalCount, 20, Color.WHITE, Color.BLACK));
    }
    
    public void reduceCount(int amount)
    {
        totalCount -= amount;
        setImage(new GreenfootImage("HP: " + totalCount, 20, Color.WHITE, Color.BLACK));
    }
    
    public int getCount()
    {
        return totalCount;
    }
    
    
}
danpost danpost

2018/4/18

#
The problem is in lines 235 through 237. Line 237 uses totalCount, which is not defined at that point. What do you think lines 235 and 236 are doing?
Yomi Yomi

2018/4/20

#
I think that 235 is getting the value of totalCount from the hp class and bringing it from the hp class into the Player_1_1 class and 236 is telling Player_1_1 if the totalCount is -1, that it should remove Player_1_1 from the world.
danpost danpost

2018/4/20

#
Yomi wrote...
I think that 235 is getting the value of totalCount from the hp class and bringing it from the hp class into the Player_1_1 class and 236 is telling Player_1_1 if the totalCount is -1, that it should remove Player_1_1 from the world.
Actually, you should get a method not found error on line 235 as you are executing the method on "this" (a Player_1_1 object) by default, and there is no method called getCount in the Player_1_1 class. Next, all line 26 is doing is declaring a new Object reference of type Actor called Player (it creates a new variable called Player that is declared to hold an Actor type object). It is not assigned any object to hold (its value is "null") and it is not used later in your code (useless). Finally, line 237 should fail also with a variable not found error as totalCount is never declared locally inside the method (or as a field in the class). If you had tried it, you would have known about the two "not found" errors, and, in turn, known that there was a problem there. You should have pointed those lines out and not just say
The code related to my issue is here
and give the entire class without pinpointing where the issue was.
You need to login to post a reply.