So below are my classes/world.
World class:
My Bullet class:
My Bacteria class:
And my Virus class:
Why is the Timer different in different scenarios?
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class MyWorld here. * * @author (your name) * @version (a version number or a date) */ public class MyWorld extends World { /** * Constructor for objects of class MyWorld. * */ int wave = 1; int d; int f; int g; double h; static int highscore = 0; int i; int j; public MyWorld() { // Create a new world with 600x400 cells with a cell size of 1x1 pixels. super(700, 700, 1); Player player = new Player (); addObject(player, 350, 350); Virus bacteria1 = new Virus (); addObject(bacteria1, 670, 670); Virus bacteria2 = new Virus (); addObject(bacteria2, 30, 30); Bacteria bacteria3 = new Bacteria (); addObject(bacteria3, 30, 670); Bacteria bacteria4 = new Bacteria (); addObject(bacteria4, 670, 30); Player.bulletsshot = 0; Bullet.enemieskilled = 0; Border border1 = new Border (); addObject(border1, 175, 100); Border border2 = new Border (); addObject(border2, 115, 165); border2.setRotation(270); Border border3 = new Border (); addObject(border3, 525, 100); Border border4 = new Border (); addObject(border4, 584, 165); border4.setRotation(90); Border border5 = new Border (); addObject(border5, 175, 600); Border border6 = new Border (); addObject(border6, 115, 539); border6.setRotation(270); Border border7 = new Border (); addObject(border7, 525, 600); Border border8 = new Border (); addObject(border8, 584, 539); border8.setRotation(90); Virus.freeze1 = false; Virus.timerB = 0; Bacteria.freeze2 = false; Bacteria.timerC = 0; } public void act () { d =getObjects(Bacteria.class).size() + getObjects(Virus.class).size(); showD(); g = wave -1; h = Math.round((Bullet.enemieskilled / Player.bulletsshot)*100.0)/100.0; if (getObjects(Player.class).size() == 0) { gameOver(); } else { newWave(); showWave(); } } public void showD() { showText("Enemies left: " + d, 615, 50); } private void showWave() { showText("Wave " + wave, 650, 25); showText("VirustimerC " + Bacteria.timerC, 600, 75); showText("VirustimerB " + Virus.timerB, 600, 125); } public void newWave () { if (d == 0) { wave++; Virus.freeze1 = false; Virus.timerB = 0; Bacteria.freeze2 = false; Bacteria.timerC = 0; for (int e = wave;e != 0;e--) { f = wave*2; if (Greenfoot.getRandomNumber(100) > f) { Bacteria bacteria1 = new Bacteria (); addObject(bacteria1, 670, 670); } else { Virus virus1 = new Virus (); addObject(virus1, 670, 670); } if (Greenfoot.getRandomNumber(100) > f) { Bacteria bacteria2 = new Bacteria (); addObject(bacteria2, 30, 670); } else { Virus virus2 = new Virus (); addObject(virus2, 30, 670); } if (Greenfoot.getRandomNumber(100) > f) { Bacteria bacteria3 = new Bacteria (); addObject(bacteria3, 670, 30); } else { Virus virus3 = new Virus (); addObject(virus3, 670, 30); } if (Greenfoot.getRandomNumber(100) > f) { Bacteria bacteria4 = new Bacteria (); addObject(bacteria4, 30, 30); } else { Virus virus4 = new Virus (); addObject(virus4, 30, 30); } } } } public void gameOver() { if (wave - 1> highscore) { highscore = wave - 1; } i = (int) Bullet.enemieskilled; j = (int) Player.bulletsshot; GameOver gameover = new GameOver (); addObject(gameover, 350, 350); showText(" ", 650, 25); showText(" ", 615, 50); showText("Waves survived: " + g, 350, 270); showText("Enemies killed: " + i, 350, 310); showText("Bullets shot: " + j, 350, 350); showText("Accuracy: " + h, 350, 390); showText("Highscore: " + highscore, 350, 430); showText("(Highscore resets after restarting Greenfoot)", 350, 470); Greenfoot.stop(); } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class Bullet here. * * @author (your name) * @version (a version number or a date) */ public class Bullet extends Mover { /** * Act - do whatever the Bullet wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public static double enemieskilled; public static int b; int c; public void act() { move (10.0); if (isTouching(Border.class)) { removeTouching (Bacteria.class); getWorld().removeObject(this); } else if (isTouching(Bacteria.class)) { //getWorld().addObject(new Explosion(), getX(), getY()); removeTouching (Bacteria.class); getWorld().removeObject(this); enemieskilled++; } else if (isTouching(Virus.class)) { //getWorld().addObject(new Explosion(), getX(), getY()); removeTouching (Virus.class); enemieskilled++; if(Greenfoot.getRandomNumber(100) < 100) { c = 2; switch(c) { case 0: nuke(); break; case 1: Player.fasterShooting(); break; case 2: Virus.freezeVirus(); Bacteria.freezeBacteria(); } } getWorld().removeObject(this); } else if (isAtEdge()) { getWorld().removeObject(this); } } public void nuke() { if (getWorld() != null) { getWorld().removeObjects(getWorld().getObjects(Bacteria.class)); getWorld().removeObjects(getWorld().getObjects(Virus.class)); nukeScreen(); } } public void nukeScreen() { } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class Enemy here. * * @author (your name) * @version (a version number or a date) */ public class Bacteria extends Actor { /** * Act - do whatever the Enemy wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ int a; int b = 2; public static boolean freeze2 = false; public static int timerC; public void act() { if (freeze2 == true) { timerC--; if(timerC == 0) { freeze2 = false; } } else { if( isAtEdge() ){ turn(17); } if( isTouching(Border.class) ){ turn(17); } if (Greenfoot.getRandomNumber(50) <3){ a = Greenfoot.getRandomNumber(91)-45; turn(a); } move(b); } lookForPlayer(); } public void lookForPlayer() { if (isTouching(Player.class)) { removeTouching (Player.class); } } public static void freezeBacteria() { freeze2 = true; timerC = timerC + 200; } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class Enemy here. * * @author (your name) * @version (a version number or a date) */ public class Virus extends Actor { /** * Act - do whatever the Enemy wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ int a; int b = 3; public static boolean freeze1 = false; public static int timerB; public void act() { if (freeze1 == true) { timerB--; if(timerB == 0) { freeze1 = false; } } else { if( isAtEdge() ){ turn(17); } if( isTouching(Border.class) ){ turn(17); } if (Greenfoot.getRandomNumber(50) <3){ a = Greenfoot.getRandomNumber(91)-45; turn(a); } move(b); } lookForPlayer(); } public void lookForPlayer() { if (isTouching(Player.class)) { removeTouching (Player.class); } } public static void freezeVirus() { freeze1 = true; timerB = timerB + 200; } }