I am pretty new to Greenfoot and programming in general, and I've been taking a class to improve my skills. One of the assignments involves drawing variously colored and positioned circles and different places in a world using while loops. I wrote the following code and whenever it's put in the constructor method I get some kind of terminal error. However, I can't even see the terminal or find the greenfoot.properties file to change its location.
This is the code for the entire world and the bubble class, in case that's helpful.
World:
Bubble class:
public void setup34() { int i = 0; while (i < 20) { addObject(new Bubble(190 - i * 10), getWidth()/2, getHeight()/2); } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * A bit of empty space for bubbles to float in. * * @author Michael Kölling * @version 1.0 */ public class Space extends World { /** * Create Space. Make it black. */ public Space() { super(900, 600, 1); getBackground().setColor(Color.ORANGE); getBackground().fill(); //setup29(); //setup30(); setup34(); } public void setup28() { addObject(new Bubble(), getWidth()/2, getHeight()/2); // NOTE: use getWidth()/2 and getHeight()/2 for the center } public void setup29() { int i = 0; while (i < 29) { setup28(); i++; } } public void setup30() { int i = 0; while (i < 30) { addObject(new Bubble(),Greenfoot.getRandomNumber(getWidth()),Greenfoot.getRandomNumber(getHeight())); i++; } } public void setup31() { int i = 0; while (i < 21) { addObject(new Bubble(),i * 30, i * 30); i++; } } public void setup32() { int i = 0; while (i < 21) { addObject(new Bubble(),i * 45, i * 30); i++; } } public void setup33() { int i = 0; while (i < 10) { addObject(new Bubble(i*10 + 10),i * 40 + 300, 100); i++; } int j = 0; while (j < 21) { addObject(new Bubble(),j * 45, j * 30); j++; } } public void setup34() { int i = 0; while (i < 20) { addObject(new Bubble(190 - i * 10), getWidth()/2, getHeight()/2); } } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * This is a colored floating bubble. * * @author Michael Kölling * @version 1.0 */ public class Bubble extends Actor { private int speed; // assigned to be a random number in the constructor method and used in the act method /** * Create a Bubble that floats, with random size and random color. */ public Bubble() // first constructor, the default constructor with no argumens { // create a random size, between 10 and 110 pixels this(Greenfoot.getRandomNumber(100) + 10); // recall this is the Java name of ourself, will call the second constructor } /** * Create a Bubble that floats, with a given size and random color. */ public Bubble(int size) // second constructor, the size of the bubble is supplied as a paramenter { GreenfootImage img = new GreenfootImage(size, size); // create a random color, with every color channel between 30 and 230 int red = Greenfoot.getRandomNumber(200) + 30; int green = Greenfoot.getRandomNumber(200) + 30; int blue = Greenfoot.getRandomNumber(200) + 30; int alpha = Greenfoot.getRandomNumber(190) + 60; img.setColor(new Color(red, green, blue, alpha)); img.fillOval(0, 0, size-1, size-1); setImage(img); // IMPORTANT CONCEPT, the image dynamically created above now becomes the image // for this particular object at run time when it is created. // NOTE: No image is assigned as the default image for the Class // random speed: 1 to 4 speed = Greenfoot.getRandomNumber(4) + 1; // the private instance field speed is given a value in the constructor } /** * Create a Bubble that floats, with given size and initial float direction. */ public Bubble(int size, int direction) // third constructor, both size and direction are specified as parameters { this(size); // IMPORTANT CONCEPT, just as the first constructor calls the second constructor, so does the // third constructor call the second constructor. That way the code to dynamically create // the individual image for the object needs to be given in only 1 place, the second constructor setRotation(direction); } /** * Float. */ public void act() { if (isAtEdge()) { turn(180); } move(speed); if (Greenfoot.getRandomNumber(100) < 50) { // randomly turn 1/2 the time turn(Greenfoot.getRandomNumber(5) - 2); // -2 to 2 } } }