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

2017/5/8

How do I add just one Igloo every 100 actions?

jbush15 jbush15

2017/5/8

#
public void act() { createNewIgloo(); } public void createNewIgloo() { newIgloo ++; if (newIgloo == threshold) { newIgloo(); }} private void newIgloo() { getWorld().addObject(new Igloo(), Greenfoot.getRandomNumber(800), Greenfoot.getRandomNumber(600)); newIgloo = 0; } Every 100 actions my program doubles the number of igloos left instead of creating just one.
danpost danpost

2017/5/8

#
The act method of your Igloo class executes once for each igloo in your world each act step. Spawn your igloos from your World subclass (the World class API provides an act method for your worlds).
jbush15 jbush15

2017/5/10

#
I copied and pasted it to the world method and it does nothing import greenfoot.*; // (Actor, World, Greenfoot, GreenfootImage) import java.awt.Color; public class SnowmanPalace extends World { /** * Create the Snowman Palace. Our world has a size * of 800x600 cells, where every cell is just 1 pixel. */ public SnowmanPalace() { super(800, 600, 1); createSun(); createSnowman(); createCamel(); createIgloo(); createHealth(); } public void createSun(){ addObject(new Sun(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight())); } public void createSnowman() {addObject(new Snowman(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight())); } public void createCamel() { for ( int camel = 0; camel < 2; camel ++) { addObject(new Camel(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight())); } } private int igloo = 0; public void createIgloo() { while (igloo < 4){ igloo++; addObject(new Igloo(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight())); } createNewIgloo(); } public void createHealth() {addObject(new Health(), 100, 100); } private int iglooCount = 0; private void createNewIgloo() { iglooCount++; if (iglooCount == 100) { newIgloo(); iglooCount = 0; }} private void newIgloo() { addObject(new Igloo(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight())); }
jbush15 jbush15

2017/5/10

#
Now it just adds one more to the start up screen private int iglooCount = 100; private void createNewIgloo() { iglooCount --; if (iglooCount > 0) { newIgloo(); iglooCount = 100; } } private void newIgloo() { addObject(new Igloo(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight())); }
danpost danpost

2017/5/10

#
I am re-posting the code properly (see the link below the reply box: Posting code? read this!).
import greenfoot.*;
import java.awt.Color;

public class SnowmanPalace extends World
{
    private int igloo = 0;
    private int iglooCount = 0;

    public SnowmanPalace() 
    {
        super(800, 600, 1);
        createSun();
        createSnowman();
        createCamel();
        createIgloo();      
        createHealth();
    }  
    
    public void createSun()
    {
        addObject(new Sun(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight())); 
    }
    
    public void createSnowman()
    {
        addObject(new Snowman(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
    }
    
    public void createCamel()
    {
        for (int camel=0; camel<2; camel++)     
        {
            addObject(new Camel(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));           
        }
    } 
    
    public void createIgloo()
    {
        while (igloo < 4)
        {
            igloo++;
            addObject(new Igloo(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
        }
        createNewIgloo();
    }
    
    public void createHealth()
    {
        addObject(new Health(), 100, 100);
    }
    
    private void createNewIgloo()
    {
        iglooCount++;
        if (iglooCount == 100)
        {
            newIgloo();
            iglooCount = 0;
        }
    }

    private void newIgloo()
    {
        addObject(new Igloo(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
    }
Your second code post will be ignored (it is not correct and what you had was sufficient to begin with). I do not see where you added an act method to the class Add it:
public void act()
{
    createNewIgloo();
}
jbush15 jbush15

2017/5/10

#
Thank you
SR20 SR20

2017/5/11

#
All good

All Good

You need to login to post a reply.