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

2014/5/2

How to avoid adding objects on top of others

gamer121 gamer121

2014/5/2

#
Hi, I am making a game where my Player goes through a maze while trying to eat as much food as possible. Whenever it touches Home, I want to add more Food to the world. However, it adds the food on top of the blocks(Wall) the maze consists of. Does anyone know how to fix this problem so that the food can appear underneath the Wall? My code related to this problem is shown below.
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Maze extends World
{
    private int counter;
    /**
     * Constructor for objects of class Maze.
     * 
     */
    public Maze()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(10, 10, 40); 
        addFood(20);
        addObject(new Home(),getWidth()-1,getHeight()-1);
        addObject(new Player(),0,0);
        addObject(new Lizard(),getWidth()-1,getHeight()-1);
        prepare();
    }

    public void addFood(int n)
    {
        for(int f=0; f<n; f++) {
            int x = Greenfoot.getRandomNumber(getWidth());
            int y = Greenfoot.getRandomNumber(getHeight());
            addObject(new Food(),x,y);
        }
    }

    private void prepare()
    {
        Wall wall = new Wall();
        addObject(wall, 3, 1);
        wall.setLocation(3, 5);
        wall.setLocation(5, 2);
        wall.setLocation(1, 0);
        Wall wall2 = new Wall();
        addObject(wall2, 1, 1);
        Wall wall3 = new Wall();
        addObject(wall3, 1, 2);
        Wall wall4 = new Wall();
        addObject(wall4, 1, 3);
        Wall wall5 = new Wall();
        addObject(wall5, 1, 3);
        Wall wall6 = new Wall();
        addObject(wall6, 1, 4);
        Wall wall7 = new Wall();
        addObject(wall7, 3, 4);
        Wall wall8 = new Wall();
        addObject(wall8, 3, 4);
        Wall wall9 = new Wall();
        addObject(wall9, 3, 2);
        Wall wall10 = new Wall();
        addObject(wall10, 4, 2);
        Wall wall11 = new Wall();
        addObject(wall11, 5, 2);
        Wall wall12 = new Wall();
        addObject(wall12, 5, 3);
        Wall wall13 = new Wall();
        addObject(wall13, 6, 4);
        Wall wall14 = new Wall();
        addObject(wall14, 5, 4);
        Wall wall15 = new Wall();
        addObject(wall15, 5, 5);
        Wall wall16 = new Wall();
        addObject(wall16, 5, 6);
        Wall wall17 = new Wall();
        addObject(wall17, 2, 4);
        Wall wall18 = new Wall();
        addObject(wall18, 8, 1);
        Wall wall19 = new Wall();
        addObject(wall19, 8, 3);
        Wall wall20 = new Wall();
        addObject(wall20, 8, 5);
        Wall wall21 = new Wall();
        addObject(wall21, 8, 6);
        Wall wall22 = new Wall();
        addObject(wall22, 8, 7);
        Wall wall23 = new Wall();
        addObject(wall23, 8, 7);
        Wall wall24 = new Wall();
        addObject(wall24, 8, 8);
        Wall wall25 = new Wall();
        addObject(wall25, 8, 6);
        Wall wall26 = new Wall();
        addObject(wall26, 8, 5);
        Wall wall27 = new Wall();
        addObject(wall27, 8, 5);
        Wall wall28 = new Wall();
        addObject(wall28, 8, 4);
        Wall wall29 = new Wall();
        addObject(wall29, 8, 4);
        Wall wall30 = new Wall();
        addObject(wall30, 8, 3);
        Wall wall31 = new Wall();
        addObject(wall31, 8, 3);
        Wall wall32 = new Wall();
        addObject(wall32, 7, 8);
        Wall wall33 = new Wall();
        addObject(wall33, 7, 8);
        Wall wall34 = new Wall();
        addObject(wall34, 6, 8);
        Wall wall35 = new Wall();
        addObject(wall35, 6, 8);
        Wall wall36 = new Wall();
        addObject(wall36, 6, 8);
        Wall wall37 = new Wall();
        addObject(wall37, 5, 8);
        Wall wall38 = new Wall();
        addObject(wall38, 4, 8);
        Wall wall39 = new Wall();
        addObject(wall39, 4, 8);
        Wall wall40 = new Wall();
        addObject(wall40, 4, 9);
        Wall wall41 = new Wall();
        addObject(wall41, 3, 9);
        Wall wall42 = new Wall();
        addObject(wall42, 2, 9);
        Wall wall43 = new Wall();
        addObject(wall43, 2, 9);
        Wall wall44 = new Wall();
        addObject(wall44, 2, 8);
        Wall wall45 = new Wall();
        addObject(wall45, 1, 7);
        Wall wall46 = new Wall();
        addObject(wall46, 1, 7);
        Wall wall47 = new Wall();
        addObject(wall47, 1, 6);
        Wall wall48 = new Wall();
        addObject(wall48, 1, 6);
        Wall wall49 = new Wall();
        addObject(wall49, 1, 8);
        Wall wall50 = new Wall();
        addObject(wall50, 4, 0);
        Wall wall51 = new Wall();
        addObject(wall51, 5, 0);
        Wall wall52 = new Wall();
        addObject(wall52, 5, 0);
        wall33.setLocation(7, 9);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(8, 8);
        wall24.setLocation(9, 9);
        wall24.setLocation(9, 7);
        wall23.setLocation(8, 7);
        wall23.setLocation(8, 7);
        wall23.setLocation(8, 7);
        wall23.setLocation(8, 7);
        wall23.setLocation(8, 7);
        wall23.setLocation(8, 7);
        wall23.setLocation(8, 7);
        wall32.setLocation(5, 7);
        wall32.setLocation(7, 7);
        wall32.setLocation(7, 6);
        wall23.setLocation(8, 7);
        wall24.setLocation(9, 8);
        wall33.setLocation(5, 9);
        wall37.setLocation(6, 9);
        wall24.setLocation(9, 8);
        Wall wall53 = new Wall();
        addObject(wall53, 7, 9);
        wall48.setLocation(0, 6);
        wall48.setLocation(1, 6);
        wall48.setLocation(0, 6);
        Wall wall54 = new Wall();
        addObject(wall54, 3, 6);
        wall24.setLocation(9, 8);
        wall24.setLocation(9, 8);
        wall24.setLocation(9, 8);
        wall24.setLocation(9, 7);
        wall48.setLocation(0, 6);
        wall46.setLocation(3, 7);
        wall46.setLocation(1, 7);
        wall49.setLocation(4, 7);
        wall46.setLocation(1, 8);
        wall45.setLocation(1, 8);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 7);
        wall49.setLocation(4, 9);
        wall54.setLocation(4, 1);
        wall16.setLocation(3, 6);
        wall16.setLocation(3, 8);
        wall16.setLocation(3, 6);
        wall2.setLocation(0, 1);
        removeObject(wall2);
        wall41.setLocation(3, 9);
        wall49.setLocation(5, 7);
        removeObject(wall49);
        wall39.setLocation(5, 7);
        removeObject(wall39);
        wall36.setLocation(5, 7);
        removeObject(wall36);
        wall53.setLocation(7, 9);
        wall37.setLocation(6, 9);
        wall33.setLocation(5, 9);
        wall40.setLocation(4, 9);
        wall46.setLocation(0, 8);
        removeObject(wall46);
        wall45.setLocation(1, 8);
        wall44.setLocation(2, 8);
        wall43.setLocation(0, 9);
        removeObject(wall43);
        wall47.setLocation(1, 6);
        wall48.setLocation(0, 6);
        wall16.setLocation(3, 6);
        wall.setLocation(1, 0);
        wall3.setLocation(1, 2);
        wall5.setLocation(0, 4);
        removeObject(wall5);
        wall4.setLocation(1, 3);
        wall6.setLocation(1, 4);
        wall17.setLocation(2, 5);
        wall17.setLocation(2, 4);
        wall8.setLocation(5, 7);
        removeObject(wall8);
        wall13.setLocation(6, 4);
        wall7.setLocation(3, 4);
        wall15.setLocation(5, 5);
        wall14.setLocation(5, 4);
        wall13.setLocation(6, 4);
        wall12.setLocation(5, 3);
        wall11.setLocation(5, 2);
        wall10.setLocation(4, 2);
        wall9.setLocation(3, 2);
        wall54.setLocation(4, 1);
        wall50.setLocation(4, 0);
        wall52.setLocation(7, 0);
        removeObject(wall52);
        wall51.setLocation(5, 0);
        wall18.setLocation(8, 1);
        wall31.setLocation(7, 2);
        removeObject(wall31);
        wall30.setLocation(6, 3);
        removeObject(wall30);
        wall19.setLocation(8, 3);
        wall29.setLocation(7, 3);
        removeObject(wall29);
        wall27.setLocation(5, 7);
        removeObject(wall27);
        wall25.setLocation(5, 7);
        removeObject(wall25);
        wall26.setLocation(5, 7);
        removeObject(wall26);
        wall23.setLocation(8, 9);
        removeObject(wall23);
        wall24.setLocation(9, 7);
        wall22.setLocation(8, 7);
        wall32.setLocation(7, 6);
        wall21.setLocation(7, 6);
        wall32.setLocation(8, 6);
        wall20.setLocation(8, 5);
        wall28.setLocation(8, 4);
        wall19.setLocation(8, 3);
    }
}
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color; 
public class Food extends Actor
{
    public Food(int size)

    {
        GreenfootImage img = new GreenfootImage(5,5);
        int red = Greenfoot.getRandomNumber(256);
        int green = Greenfoot.getRandomNumber(256);
        int blue = Greenfoot.getRandomNumber(256);
        img.setColor(new Color(red,green,blue));
        img.fillOval(0,0,size,size);
        setImage(img);
    }

    public Food()

    {
        this(5);
    }
}
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) public class Home extends Actor { public Home() { GreenfootImage img = new GreenfootImage(40,40); setImage(img); } public void act() { Actor player = getOneIntersectingObject(Player.class); if (player != null) { int k = 0; if (getX() == 0) { k = 9; } setLocation(k, k); getWorld().addObject(new Lizard(), Greenfoot.getRandomNumber(10),Greenfoot.getRandomNumber(10)); for (int i = 0; i < 7; i++) { getWorld().addObject(new Food(),Greenfoot.getRandomNumber(10),Greenfoot.getRandomNumber(10)); } } } }
danpost danpost

2014/5/2

#
Replace the last two lines of code posted with this:
int x = getX(), y = getY();
for (int n=0; n<7; n++)
{
    while (!getWorld().getObjectsAt(x, y, null).isEmpty())
    {
        x = Greenfoot.getRandomNumber(getWorld().getWidth());
        y = Greenfoot.getRandomNumber(getWorld().getHeight());
    }
    getWorld().addObject(new Food(), x, y);
}
You need to login to post a reply.