import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class Brick here. * * @author (your name) * @version (a version number or a date) */ public class Brick extends World { SimpleTimer time = new SimpleTimer(); Counter con = new Counter(); private int spawnTimer; /** * Constructor for objects of class Brick. * */ public Brick() //call for act method { super(600, 400, 1); // Create a new world with 600x400 cells with a cell size of 1x1 pixels. addObject(new AttackZombie(),100,100); // Add Zombie at 100, 100 addObject(new AttackZombie(),300,300); addObject(new AttackZombie(),400,400); addObject(new AttackZombie(),200,300); addObject(new Player(),200,200); // Add Player at 200,200 addObject(con, 50,50); // Add Counter and Timer at 50,50 time.mark(); } public void act() //call for act method { con.setValue(time.millisElapsed() / 1000); // add 1 second/ 1000 millisecond to timer if(time.millisElapsed() >= 90000){ Greenfoot.setWorld( new Win()); } } private void checkForSpawning() // call from act method { spawnTimer = (spawnTimer+1)%600; // repeat every 10 seconds (about) if (spawnTimer == 0) // at each timer reset { addObject(new AttackZombie(), 100, 100); addObject(new AttackZombie(), 200, 200); } } } import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class Laser here. * * @author (your name) * @version (a version number or a date) */ public class Lazer extends Actor { /** * this code checks if the laser is touching the alien */ public void checkHit(){ if(isTouching(AttackZombie.class)){ getWorld().removeObject((getOneIntersectingObject(AttackZombie.class))); } } public void addedToWorld(Brick world){ setRotation(getWorld().getObjects(Player.class).get(0).checkRotation()); } public void act() /** * this code runs all of the laser methods */ { move(5); MyWorld mw = (MyWorld)getWorld(); if(isAtEdge()){ getWorld().removeObject(this); } else if(isTouching(AttackZombie.class)){ getWorld().removeObject(getOneIntersectingObject(AttackZombie.class)); ((MyWorld) getWorld()).newAttackZombie(); ((MyWorld)getWorld()).getCounter().addScore(); } } } import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class AttackZombie here. * * @author (your name) * @version (a version number or a date) */ public class AttackZombie extends Actor { int rightSideOfScreen; int bottomOfScreen; public void addedToWorld(World Brick) { rightSideOfScreen = Brick.getWidth() - 1; bottomOfScreen = Brick.getHeight() - 1; } public void act() { move(2); if(Greenfoot.getRandomNumber(20)==1) { setRotation(Greenfoot.getRandomNumber (360)); } int x = getX(); int y = getY(); if(x<=0 || y<=0 || x >= rightSideOfScreen || y >=bottomOfScreen) { turn(180); } } } import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.List; /** * Write a description of class Player here. * * @author (your name) * @version (a version number or a date) */ public class Player extends Actor { SimpleTimer Timer = new SimpleTimer(); /** * 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() { checkkeys(); if (isTouching(AttackZombie.class)) { getWorld().removeObject(this); //Greenfoot.setWorld(new EndScreen()); } if(Timer.millisElapsed() > 500 && Greenfoot.isKeyDown("space")) { Timer.mark(); ((Brick)getWorld()).addObject(new Laser(), this.getX(), this.getY() ); } } public void checkkeys() { if ( Greenfoot.isKeyDown("w")) { move(3); } if ( Greenfoot.isKeyDown("a")) { turn(-3); } if ( Greenfoot.isKeyDown("s")) { move(-3); } if ( Greenfoot.isKeyDown("d")) { turn(3); } } } import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * A Counter class that allows you to display a numerical value on screen. * * The Counter is an actor, so you will need to create it, and then add it to * the world in Greenfoot. If you keep a reference to the Counter then you * can adjust its value. Here's an example of a world class that * displays a counter with the number of act cycles that have occurred: * * <pre> * class CountingWorld * { * private Counter actCounter; * * public CountingWorld() * { * super(600, 400, 1); * actCounter = new Counter("Act Cycles: "); * addObject(actCounter, 100, 100); * } * * public void act() * { * actCounter.setValue(actCounter.getValue() + 1); * } * } * </pre> * * @author Neil Brown and Michael Kölling * @version 1.0 */ public class Counter1 extends Actor { private static final Color transparent = new Color(0,0,0,0); private GreenfootImage background; private int value; private int target; private String prefix; public Counter1() { this(new String()); } /** * Create a new counter, initialised to 0. */ public Counter1(String prefix) { background = getImage(); // get image from class value = 0; target = 0; this.prefix = prefix; updateImage(); } /** * Animate the display to count up (or down) to the current target value. */ public void act() { if (value < target) { value++; updateImage(); } else if (value > target) { value--; updateImage(); } } /** * Add a new score to the current counter value. This will animate * the counter over consecutive frames until it reaches the new value. */ public void add(int score) { target += score; } /** * Return the current counter value. */ public int getValue() { return target; } /** * Set a new counter value. This will not animate the counter. */ public void setValue(int newValue) { target = newValue; value = newValue; updateImage(); } /** * Sets a text prefix that should be displayed before * the counter value (e.g. "Score: "). */ public void setPrefix(String prefix) { this.prefix = prefix; updateImage(); } /** * Update the image on screen to show the current value. */ private void updateImage() { GreenfootImage image = new GreenfootImage(background); GreenfootImage text = new GreenfootImage(prefix + value, 22, Color.BLACK, transparent); if (text.getWidth() > image.getWidth() - 20) { image.scale(text.getWidth() + 20, image.getHeight()); } image.drawImage(text, (image.getWidth()-text.getWidth())/2, (image.getHeight()-text.getHeight())/2); setImage(image); } } import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * A Counter class that allows you to display a numerical value on screen. * * The Counter is an actor, so you will need to create it, and then add it to * the world in Greenfoot. If you keep a reference to the Counter then you * can adjust its value. Here's an example of a world class that * displays a counter with the number of act cycles that have occurred: * * <pre> * class CountingWorld * { * private Counter actCounter; * * public CountingWorld() * { * super(600, 400, 1); * actCounter = new Counter("Act Cycles: "); * addObject(actCounter, 100, 100); * } * * public void act() * { * actCounter.setValue(actCounter.getValue() + 1); * } * } * </pre> * * @author Neil Brown and Michael Kölling * @version 1.0 */ public class Counter extends Actor { private static final Color transparent = new Color(0,0,0,0); private GreenfootImage background; private int value; private int target; private String prefix; public Counter() { this(new String()); } /** * Create a new counter, initialised to 0. */ public Counter(String prefix) { background = getImage(); // get image from class value = 0; target = 0; this.prefix = prefix; updateImage(); } /** * Animate the display to count up (or down) to the current target value. */ public void act() { if (value < target) { value++; updateImage(); } else if (value > target) { value--; updateImage(); } } /** * Add a new score to the current counter value. This will animate * the counter over consecutive frames until it reaches the new value. */ public void add(int score) { target += score; } /** * Return the current counter value. */ public int getValue() { return target; } /** * Set a new counter value. This will not animate the counter. */ public void setValue(int newValue) { target = newValue; value = newValue; updateImage(); } /** * Sets a text prefix that should be displayed before * the counter value (e.g. "Score: "). */ public void setPrefix(String prefix) { this.prefix = prefix; updateImage(); } /** * Update the image on screen to show the current value. */ private void updateImage() { GreenfootImage image = new GreenfootImage(background); GreenfootImage text = new GreenfootImage(prefix + value, 22, Color.BLACK, transparent); if (text.getWidth() > image.getWidth() - 20) { image.scale(text.getWidth() + 20, image.getHeight()); } image.drawImage(text, (image.getWidth()-text.getWidth())/2, (image.getHeight()-text.getHeight())/2); setImage(image); } } import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class TimeChecker here. * * @author (your name) * @version (a version number or a date) */ public class TimeChecker extends Actor { long initialTime; public TimeChecker() { initialTime = System.currentTimeMillis(); } public void act() { if(System.currentTimeMillis() > initialTime + 200000) { Greenfoot.setWorld(new Win()); } } }