so i ruined my game that i was making and now it barely works like it was meant to here is the source code its due today. so pls help
import greenfoot.*; public class MyWorld extends World { int count; int spawnSpeed = 50; int randomSpawn; int wave = 1; int pause; public Player mainPlayer = new Player(); Counter counter = new Counter(); HealthBar Healthbar = new HealthBar(mainPlayer); WeaponButton weaponButton = new WeaponButton(counter); button button = new button(); SuperPower superPower = new SuperPower(); public MyWorld() { super(1000, 800, 1); mainPlayer = new Player(weaponButton, superPower); addObject(button,976,25); addObject(mainPlayer,getWidth()/2, getHeight()/2); addObject(counter,96,70); addObject(Healthbar, mainPlayer.getX()-5, mainPlayer.getY()-50); addObject(weaponButton, 900, 100); addObject(superPower, mainPlayer.getX()+10, mainPlayer.getY()-80); } public Player getPlayer() { return mainPlayer; } public void act(){ count++; spawnZombies(); decreaseSpawnSpeed(); } public void spawnZombies(){ if(count % spawnSpeed == 0){ randomSpawn = Greenfoot.getRandomNumber(8); switch(randomSpawn){ case 0 : addObject(new Zombie(mainPlayer, counter), 0,0); break; case 1 : addObject(new Zombie(mainPlayer, counter), getWidth()/2,0); break; case 2 : addObject(new Zombie(mainPlayer, counter), getWidth(),0); break; case 3 : addObject(new Zombie(mainPlayer, counter), 0,getHeight()/2); break; case 4 : addObject(new Zombie(mainPlayer, counter), getWidth(),getHeight()/2); break; case 5 : addObject(new Zombie(mainPlayer, counter), 0,getHeight()); break; case 6 : addObject(new Zombie(mainPlayer, counter), getWidth()/2,getHeight()); break; case 7 : addObject(new Zombie(mainPlayer, counter), getWidth(),getHeight()); break; } } } public void decreaseSpawnSpeed(){ if(count % 600 == 0) { spawnSpeed--; } } } import greenfoot.*; public class HealthBar extends Actor { int health = 50; double specificHealth = (double)health; Player mainPlayer; Zombie zombie; public HealthBar(Player mainPlayer) { this.mainPlayer = mainPlayer; createImage(); } public void act() { createImage(); World world = getWorld(); MyWorld game = (MyWorld)world; setLocation(game.getPlayer().getX() - 5, game.getPlayer().getY() - 50); LoseHealth(); } public void createImage() { setImage(new GreenfootImage(52,12)); getImage().drawRect(0,0,51,11); getImage().setColor(Color.RED); getImage().fillRect(1,1,health,10); health--; } public void LoseHealth() { World world = getWorld(); MyWorld game = (MyWorld)world; if (game.getPlayer().hitByZombie() && zombie != null && getNeighbours(getImage().getWidth()/2, false, Zombie.class).contains(zombie) && zombie.hitsPlayer(mainPlayer)) { health--; } } } import greenfoot.*; import greenfoot.MouseInfo; public class Player extends Actor { // all the variables for the players stats Counter counter; Zombie zombie; public final int speed = 3; public int firerate = 10; int health = 100; int stamina = 10; int cash = 0; int wave = 1; int ammo = 20; int superTimer; public int pause = 100; int kills = 0; int survivedTime = 0; private boolean reloadKeyDown = false; int time = 0; private final int reloadTime = 10, maxShots = 30; private int reloadTimer = 0, shotsLeft = maxShots; private boolean shooting = false; boolean farthest = false; WeaponButton weaponButton; SuperPower superPower; /* BY GARRETT*/ // creates the player character public Player(){ setImage(new GreenfootImage(70, 50)); getImage().setColor(Color.YELLOW); getImage().fillOval(0, 0, 50, 50); getImage().setColor(Color.BLACK); getImage().fillRect(50, 20, 70, 10); } public Player(WeaponButton weaponButton, SuperPower superPower){ this.superPower = superPower; this.weaponButton = weaponButton; setImage(new GreenfootImage(70, 50)); getImage().setColor(Color.YELLOW); getImage().fillOval(0, 0, 50, 50); getImage().setColor(Color.BLACK); getImage().fillRect(50, 20, 70, 10); } // tells the player character to use all the methods that have been created as long as the conditions are right for the given method public void act() { move(); turnAround(); shoot(); time++; hitByZombie(); } // tells the actor to turn to face the mouse public void turnAround(){ button button = new button(); if (Color.BLACK.equals(button.getCurrentColor())){ if(Greenfoot.getMouseInfo() != null){ turnTowards(Greenfoot.getMouseInfo().getX(), Greenfoot.getMouseInfo().getY()); } } } // tells the actor to do if the button is black and if it isnt black public void shoot() { button button = new button(); if (Color.BLACK.equals(button.getCurrentColor())){ manualShoot(); } else { autoShoot(); } } // returns the buttons color to determine what the firemode is public static int getColor() { return button.colorValue; } // one of the firemodes that is player skilled based private void manualShoot() { MouseInfo mouse = Greenfoot.getMouseInfo(); if(ammo>0){ if (Greenfoot.mousePressed(null) && weaponButton.WeaponUpgrade == 1) { turnTowards(Greenfoot.getMouseInfo().getX(), Greenfoot.getMouseInfo().getY()); Bullet bullet = new Bullet(); getWorld().addObject(bullet, getX(), getY()); bullet.setRotation(getRotation()-0); bullet.move(25); } if (Greenfoot.mousePressed(null) && weaponButton.WeaponUpgrade == 2) { Bullet bullet = new Bullet(); getWorld().addObject(bullet, getX(), getY()); bullet.setRotation(getRotation()-5); bullet.move(25); Bullet bullet2 = new Bullet(); getWorld().addObject(bullet2, getX(), getY()); bullet2.setRotation(getRotation()+5); bullet2.move(25); } if (Greenfoot.mousePressed(null) && weaponButton.WeaponUpgrade == 3) { Bullet bullet = new Bullet(); getWorld().addObject(bullet, getX(), getY()); bullet.setRotation(getRotation()-5); bullet.move(25); Bullet bullet2 = new Bullet(); getWorld().addObject(bullet2, getX(), getY()); bullet2.setRotation(getRotation()+5); bullet2.move(25); Bullet bullet3 = new Bullet(); getWorld().addObject(bullet3, getX(), getY()); bullet3.setRotation(getRotation()-0); bullet3.move(25); } if (Greenfoot.mousePressed(null) && weaponButton.WeaponUpgrade == 4) { Bullet bullet = new Bullet(); getWorld().addObject(bullet, getX(), getY()); bullet.setRotation(getRotation()-10); bullet.move(25); Bullet bullet2 = new Bullet(); getWorld().addObject(bullet2, getX(), getY()); bullet2.setRotation(getRotation()+10); bullet2.move(25); Bullet bullet3 = new Bullet(); getWorld().addObject(bullet3, getX(), getY()); bullet3.setRotation(getRotation()-5); bullet3.move(25); Bullet bullet4 = new Bullet(); getWorld().addObject(bullet4, getX(), getY()); bullet4.setRotation(getRotation()+5); bullet4.move(25); } if (Greenfoot.mousePressed(null) && weaponButton.WeaponUpgrade == 5) { Bullet bullet = new Bullet(); getWorld().addObject(bullet, getX(), getY()); bullet.setRotation(getRotation()-10); bullet.move(25); Bullet bullet2 = new Bullet(); getWorld().addObject(bullet2, getX(), getY()); bullet2.setRotation(getRotation()+10); bullet2.move(25); Bullet bullet3 = new Bullet(); getWorld().addObject(bullet3, getX(), getY()); bullet3.setRotation(getRotation()-0); bullet3.move(25); Bullet bullet4 = new Bullet(); getWorld().addObject(bullet4, getX(), getY()); bullet4.setRotation(getRotation()-5); bullet4.move(25); Bullet bullet5 = new Bullet(); getWorld().addObject(bullet5, getX(), getY()); bullet5.setRotation(getRotation()+5); bullet5.move(25); } } } public void useSuperPower() { if(superPower.superCount>99 && superTimer< 30) { superTimer++; } if(superTimer > 30) { Bullet bullet = new Bullet(); getWorld().addObject(bullet, getX(), getY()); bullet.setRotation(getRotation()-60); bullet.move(25); Bullet bullet2 = new Bullet(); getWorld().addObject(bullet2, getX(), getY()); bullet.setRotation(getRotation()+60); bullet2.move(25); Bullet bullet3 = new Bullet(); getWorld().addObject(bullet3, getX(), getY()); bullet.setRotation(getRotation()-0); bullet3.move(25); Bullet bullet4 = new Bullet(); getWorld().addObject(bullet4, getX(), getY()); bullet.setRotation(getRotation()-180); bullet4.move(25); Bullet bullet5 = new Bullet(); getWorld().addObject(bullet5, getX(), getY()); bullet.setRotation(getRotation()+120); bullet5.move(25); Bullet bullet6 = new Bullet(); getWorld().addObject(bullet6, getX(), getY()); bullet.setRotation(getRotation()-120); bullet6.move(25); superTimer++; } } // the second fire mode that is more of a auto fire to the nearest enemy private void autoShoot() { if(pause>0){ pause --; } if(pause == 0){ if (ammo > 0) { if (getWorld().getObjects(Zombie.class).isEmpty()) return; Actor closest = null; int closeness = 9999; for (Object obj : getWorld().getObjects(Zombie.class)) { Actor enemy = (Actor)obj; int dist = (int)Math.hypot(getX()-enemy.getX(), getY()-enemy.getY()); if (dist < closeness) { closeness = dist; closest = enemy; } } Actor bullet = new Bullet(); getWorld().addObject(bullet, getX(), getY()); bullet.turnTowards(closest.getX(), closest.getY()); setRotation(bullet.getRotation()); ammo--; pause = firerate; } } } // gets the users inputs and moves the player accordingly public void move(){ if(Greenfoot.isKeyDown("W")||Greenfoot.isKeyDown("UP")){ setLocation( getX(), getY()-speed); } if(Greenfoot.isKeyDown("A")||Greenfoot.isKeyDown("LEFT")){ setLocation( getX()-speed, getY()); } if(Greenfoot.isKeyDown("S")||Greenfoot.isKeyDown("DOWN")){ setLocation( getX(), getY()+speed); } if(Greenfoot.isKeyDown("D")||Greenfoot.isKeyDown("RIGHT")){ setLocation( getX()+speed, getY()); } } // tells the character to reload his gun when the user hits r public void hitbyZombie() { Bullet bullet = (Bullet)getOneIntersectingObject(Bullet.class); health --; getWorld().removeObject(bullet); } public void youWin(){ if(time >100 && !isTouching(Zombie.class)){ getWorld().showText("You Win! - you Survived the 60 seconds ", getWorld().getWidth()/2, getWorld().getHeight()/2); } } public boolean hitByZombie() { Zombie zombie = (Zombie)getOneIntersectingObject(Zombie.class); if (zombie != null && getNeighbours(getImage().getWidth()/2, false, Zombie.class).contains(zombie) && zombie.hitsPlayer(this)) { return true; } else { return false; } } } import greenfoot.*; public class Bullet extends Actor { public Bullet(){ setImage(new GreenfootImage(10,5)); getImage().setColor(Color.BLACK); getImage().fillRect(0,0,10,5); } public void act() { move(10); DestroyBullet(); } public void move(int distance) { double radians = Math.toRadians(getRotation()); int dx = (int) Math.round(Math.cos(radians) * distance); int dy = (int) Math.round(Math.sin(radians) * distance); setLocation(getX() + dx, getY() + dy); } private void DestroyBullet(){ if(isAtEdge()){ getWorld().removeObject(this); } } public boolean hitsZombie(Zombie zombie) { return getObjectsInRange(getImage().getWidth()/2, Zombie.class).contains(zombie); } } import greenfoot.*; public class Zombie extends Actor { int animateImage = 0; int animateSpeed = 5; int count; int health = 3; Player player; Counter counter; public Zombie(Player mainPlayer, Counter counter){ this.counter = counter; player = mainPlayer; setImage("skeleton-idle_16.png"); getImage().scale(80,80); } public void act() { count++; animate(); moveAround(); hitByBullet(); } // animates the zombie public void animate(){ if(count % animateSpeed == 0){ if(animateImage > 16){ animateImage = 0; } setImage("skeleton-move_"+ animateImage + ".png"); animateImage++; getImage().scale(80,80); } } private void moveAround(){ move(1); turnTowards(player.getX(), player.getY()); } public void hitByBullet() { Bullet bullet = (Bullet)getOneIntersectingObject(Bullet.class); if (bullet != null && getNeighbours(getImage().getWidth()/2, false, Bullet.class).contains(bullet) && bullet.hitsZombie(this)) { health--; } if(health == 0){ getWorld().removeObject(this); counter.Score++; } } public boolean hitsPlayer(Player mainPlayer) { return getObjectsInRange(getImage().getWidth()/2, Player.class).contains(mainPlayer); } } import greenfoot.*; public class Counter extends Actor { int Score; int cash; public Counter(){ setImage(new GreenfootImage( "Score:"+ Score+ "cash:" + cash, 40, Color.BLACK, new Color(0,0,0,0))); } public void act() { setImage(new GreenfootImage( "Score:"+ Score+ "cash:" + cash, 40, Color.BLACK, new Color(0,0,0,0))); } } import greenfoot.*; public class SuperPower extends Actor { final int SUPER_POWER_LIMIT = 100; int superCount; int count; int superTimer; public SuperPower() { createImage(); } public void act () { createImage(); World world = getWorld(); MyWorld game = (MyWorld)world; game.getPlayer(); setLocation(game.getPlayer().getX() + 10, game.getPlayer().getY() - 80); useSuper(); } public void useSuper() { count++; if(count % 10 == 0) { superCount++; } if(superCount >= 100) { superCount = 0; } } public void createImage() { setImage(new GreenfootImage(SUPER_POWER_LIMIT + 2,12)); getImage().drawRect(0,0,SUPER_POWER_LIMIT + 1,11); getImage().setColor(Color.BLUE); getImage().fillRect(1,1,superCount,10); } } import greenfoot.*; public class WeaponButton extends Actor { int cost = 150; int WeaponUpgrade = 1; Counter counter; public WeaponButton(Counter counter) { this.counter = counter; setImage(new GreenfootImage("Weapon \n upgrade \n cost: " + cost, 25, Color.BLACK, new Color(0,0,0,0))); } public void act(){ upgrade(); } public void upgrade() { if(Greenfoot.mousePressed(this) && counter.cash >149) { counter.cash -= 150; cost +=50; WeaponUpgrade++; } } } import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) public class button extends Actor { Color[] colors = { Color.BLACK, Color.RED }; public static int colorValue = 0; // index of colors array public button() { setImage(new GreenfootImage(70, 50)); changeColor(); changeColor(); } public Color getCurrentColor() { return colors[colorValue]; } public void changeColor() { colorValue = (colorValue+1)%2; // toggle index between 0 and 1 getImage().setColor(getCurrentColor()); getImage().fillOval(0, 0, 20 , 20); } public void act() { if (Greenfoot.mouseClicked(this)) { changeColor(); } } }