Ok so I think I am close but I am not very good at this. So I need to provide a different number of points for splitting and destroying an asteroid; 10 & 25. Any help is greatly appreciated.
Space----------------------------------------------------------------------------------------------------------------------------------
Counter-----------------------------------------------------------------------------------------------------------------------------
Rocket------------------------------------------------------------------------------------------------------------------------------
ScoreBoard------------------------------------------------------------------------------------------------------------------------
Bullet--------------------------------------------------------------------------------------------------------------------------------
import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot) import java.awt.Color; /** * Space. Something for rockets to fly in. * * @author Lorren Williams * @version 07/10/2014 */ public class Space extends World { private Counter scoreCounter; private int startAsteroids = 3; public Space() { super(600, 400, 1); GreenfootImage background = getBackground(); background.setColor(Color.BLACK); background.fill(); createStars(300); Rocket rocket = new Rocket(); addObject(rocket, getWidth()/2 + 100, getHeight()/2); addAsteroids(startAsteroids); scoreCounter = new Counter("Score: "); addObject(scoreCounter, 60, 380); Explosion.initializeImages(); ProtonWave.initializeImages(); } /** * Add a given number of asteroids to our world. Asteroids are only added into * the left half of the world. */ private void addAsteroids(int count) { for(int i = 0; i < count; i++) { int x = Greenfoot.getRandomNumber(getWidth()/2); int y = Greenfoot.getRandomNumber(getHeight()/2); addObject(new Asteroid(), x, y); } } /** * Crete a given number of stars in space. */ private void createStars(int number) { GreenfootImage background = getBackground(); for(int i=0; i < number; i++) { int x = Greenfoot.getRandomNumber( getWidth() ); int y = Greenfoot.getRandomNumber( getHeight() ); int color = 120 - Greenfoot.getRandomNumber(100); background.setColor(new Color(color,color,color)); background.fillOval(x, y, 2, 2); } } public void countScore(){ scoreCounter.add(25); } /** * This method is called when the game is over to display the final score. */ public void gameOver() { addObject(new ScoreBoard(getCounter().getValue()), getWidth()/2, getHeight()/2); } public Counter getCounter() { return scoreCounter; } }
import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot) import java.awt.Color; import java.awt.Graphics; /** * Counter that displays a text and number. * * @author Michael Kolling * @version 1.0.1 */ public class Counter extends Actor { private static final Color textColor = new Color(255, 180, 150); private int value = 0; private int target = 0; private String text; private int stringLength; public Counter() { this(""); } public Counter(String prefix) { text = prefix; stringLength = (text.length() + 2) * 10; setImage(new GreenfootImage(stringLength, 16)); GreenfootImage image = getImage(); image.setColor(textColor); updateImage(); } public void act() { if(value < target) { value++; updateImage(); } else if(value > target) { value--; updateImage(); } } public void add(int score) { target += score; } public int getValue() { return value; } /** * Make the image */ private void updateImage() { GreenfootImage image = getImage(); image.clear(); image.drawString(text + value, 1, 12); } }
import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot) /** * A rocket that can be controlled by the arrowkeys: up, left, right. * The gun is fired by hitting the 'space' key. 'z' releases a proton wave. * * @author Poul Henriksen * @author Michael Kolling * * @version 1.0 */ public class Rocket extends SmoothMover { private static final int gunReloadTime = 5; // The minimum delay between firing the gun. private static final int protonReloadTime = 500; // The minimum delay between proton wave bursts. private int reloadDelayCount; // How long ago we fired the gun the last time. private int protonDelayCount; // How long ago we fired the proton wave the last time. private GreenfootImage rocket = new GreenfootImage("rocket.png"); private GreenfootImage rocketWithThrust = new GreenfootImage("rocketWithThrust.png"); private boolean touched = false; /** * Initilise this rocket. */ public Rocket() { reloadDelayCount = 5; protonDelayCount = 500; addForce(new Vector(13, 0.3)); // initially slowly drifting } /** * Do what a rocket's gotta do. (Which is: mostly flying about, and turning, * accelerating and shooting when the right keys are pressed.) */ public void act() { move(); checkKeys(); checkCollision(); reloadDelayCount++; protonDelayCount++; } /** * Check whether there are any key pressed and react to them. */ private void checkKeys() { ignite(Greenfoot.isKeyDown("up")); if (Greenfoot.isKeyDown("left")) { setRotation(getRotation() - 5); } if (Greenfoot.isKeyDown("right")) { setRotation(getRotation() + 5); } if (Greenfoot.isKeyDown("space")) { fire(); } if (Greenfoot.isKeyDown("z")) { startProtonWave(); } } /** * Check whether we are colliding with an asteroid. */ private void checkCollision() { Actor a = getOneIntersectingObject(Asteroid.class); if (a != null) { Space space = (Space) getWorld(); space.addObject(new Explosion(), getX(), getY()); space.removeObject(this); space.gameOver(); } } /** * Should the rocket be ignited? */ private void ignite(boolean boosterOn) { if (boosterOn) { setImage (rocketWithThrust); addForce (new Vector(getRotation(), 0.3)); } else { setImage(rocket); } } /** * Fire a bullet if the gun is ready. */ private void fire() { if (reloadDelayCount >= gunReloadTime) { Bullet bullet = new Bullet (getMovement().copy(), getRotation()); getWorld().addObject (bullet, getX(), getY()); bullet.move (); reloadDelayCount = 0; } } /** * Release a proton wave (if it is loaded). */ private void startProtonWave() { if (protonDelayCount >= protonReloadTime) { ProtonWave wave = new ProtonWave(); getWorld().addObject (wave, getX(), getY()); protonDelayCount = 0; } } public void explode(){ Asteroid asteroid = (Asteroid) getOneIntersectingObject(Asteroid.class); if (touched && asteroid == null) { touched = false; } else if(!touched && asteroid != null) { getWorld().addObject( new Explosion(), getX(), getY()); ((Space)getWorld()).gameOver(); getWorld().removeObject(this); touched = true; } } }
import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot) import java.awt.Color; import java.awt.Font; import java.util.Calendar; /** * The ScoreBoard is used to display results on the screen. It can display some * text and several numbers. * * @Lorren Williams * @version 7/10/2014 */ public class ScoreBoard extends Actor { public static final float FONT_SIZE = 48.0f; public static final int WIDTH = 400; public static final int HEIGHT = 300; /** * Create a score board with dummy result for testing. */ public ScoreBoard() { this(100); } /** * Create a score board for the final result. */ public ScoreBoard(int score) { makeImage("Game Over", "Score: ", score); } /** * Make the score board image. */ private void makeImage(String title, String prefix, int score) { GreenfootImage image = new GreenfootImage(WIDTH, HEIGHT); image.setColor(new Color(255,255,255, 128)); image.fillRect(0, 0, WIDTH, HEIGHT); image.setColor(new Color(0, 0, 0, 128)); image.fillRect(5, 5, WIDTH-10, HEIGHT-10); Font font = image.getFont(); font = font.deriveFont(FONT_SIZE); image.setFont(font); image.setColor(Color.WHITE); image.drawString(title, 60, 100); image.drawString(prefix + score, 60, 200); setImage(image); } }
import greenfoot.*; // (World, Actor, GreenfootImage, and Greenfoot) /** * A bullet that can hit asteroids. * * @author Poul Henriksen */ public class Bullet extends SmoothMover { /** The damage this bullet will deal */ private static final int damage = 16; /** A bullet looses one life each act, and will disappear when life = 0 */ private int life = 30; public Bullet() { } public Bullet(Vector speed, int rotation) { super(speed); setRotation(rotation); addForce(new Vector(rotation, 15)); Greenfoot.playSound("EnergyGun.wav"); } /** * The bullet will damage asteroids if it hits them. */ public void act() { if(life <= 0) { getWorld().removeObject(this); } else { life--; move(); checkAsteroidHit(); } } /** * Check whether we have hit an asteroid. */ private void checkAsteroidHit() { Asteroid asteroid = (Asteroid) getOneIntersectingObject(Asteroid.class); if (asteroid != null){ getWorld().removeObject(this); asteroid.hit(damage); } } }