This is really urgent and I didnt think I would post on here but I need to make a game for a class project and everything is fine but the problem is that when the player gets attacked by the enemies and the enemies reduce the players health to 0 or lower than 0 the game just stops and the terminal window pops up. Also the healthbar does not drop down to 0 after the final blow, but the game stops anyway, which is the bigger problem.
Here is my player code:
and here is the code to my enemies class:
I would be super super thankful if anybody could help me because our teacher told us not to ask him for help
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo) public class player extends Animal { public boolean kaputt = false; public int damage; public int vSpeed = 0; public int velocity = 1; private int jumpStrength = -15; public int bulletspeed = 20; public static int level = 1; public int scene = 1; int scaleX=150; int scaleY=150; public int frame = 1; public int animCount = 0; public int animationCycles = 0; public int shootAnimFrame = 0; private boolean canShoot = true; GreenfootImage idle1 = new GreenfootImage ("1000013314.png"); GreenfootImage idle2 = new GreenfootImage ("1000013316.png"); GreenfootImage idle3 = new GreenfootImage ("1000013318.png"); GreenfootImage idle4 = new GreenfootImage ("1000013321.png"); GreenfootImage idle5 = new GreenfootImage ("1000013322.png"); GreenfootImage idle6 = new GreenfootImage ("1000013323.png"); GreenfootImage idle7 = new GreenfootImage ("1000013324.png"); GreenfootImage idle8 = new GreenfootImage ("1000013325.png"); GreenfootImage idle9 = new GreenfootImage ("1000013327.png"); GreenfootImage idle10 = new GreenfootImage ("1000013329.png"); GreenfootImage idle11 = new GreenfootImage ("1000013330.png"); GreenfootImage idle12 = new GreenfootImage ("1000013331.png"); GreenfootImage idle13 = new GreenfootImage ("1000013332.png"); GreenfootImage idle14 = new GreenfootImage ("1000013333.png"); GreenfootImage idle15 = new GreenfootImage ("1000013335.png"); GreenfootImage idle16 = new GreenfootImage ("1000013336.png"); GreenfootImage idle17 = new GreenfootImage ("1000013338.png"); GreenfootImage idle18 = new GreenfootImage ("1000013339.png"); GreenfootImage idle19 = new GreenfootImage ("1000013340.png"); GreenfootImage idle20 = new GreenfootImage ("1000013342.png"); GreenfootImage runright1 = new GreenfootImage ("1000013440.png"); GreenfootImage runright2 = new GreenfootImage ("1000013495.png"); GreenfootImage runright3 = new GreenfootImage ("1000013440.png"); GreenfootImage runright4 = new GreenfootImage ("1000013499.png"); GreenfootImage runleft1 = new GreenfootImage ("1000013532.png"); GreenfootImage runleft2 = new GreenfootImage ("1000013533.png"); GreenfootImage runleft3 = new GreenfootImage ("1000013532.png"); GreenfootImage runleft4 = new GreenfootImage ("1000013534.png"); GreenfootImage shr1 = new GreenfootImage ("shr1.png"); GreenfootImage shr2 = new GreenfootImage ("shr2.png"); GreenfootImage shr3 = new GreenfootImage ("shr3.png"); GreenfootImage shr4 = new GreenfootImage ("shr4.png"); GreenfootImage shl1 = new GreenfootImage ("shl1.png"); GreenfootImage shl2 = new GreenfootImage ("shl2.png"); GreenfootImage shl3 = new GreenfootImage ("shl3.png"); GreenfootImage shl4 = new GreenfootImage ("shl4.png"); private int health = 200; private GreenfootImage healthBarBackground = new GreenfootImage(200, 10); private GreenfootImage healthBar = new GreenfootImage(200, 10); private boolean invincible = false; private int invincibilityTimer = 0; private int flashCount = 0; private int flashTimer = 0; private boolean facingRight = true; private GreenfootImage idleRightImage1; private GreenfootImage idleLeftImage1; private GreenfootImage idleRightImage2; private GreenfootImage idleLeftImage2; private GreenfootImage idleRightImage3; private GreenfootImage idleLeftImage3; private GreenfootImage idleRightImage4; private GreenfootImage idleLeftImage4; private GreenfootImage idleRightImage5; private GreenfootImage idleLeftImage5; private GreenfootImage idleRightImage6; private GreenfootImage idleLeftImage6; private GreenfootImage idleRightImage7; private GreenfootImage idleLeftImage7; private GreenfootImage idleRightImage8; private GreenfootImage idleLeftImage8; private GreenfootImage idleRightImage9; private GreenfootImage idleLeftImage9; private GreenfootImage idleRightImage10; private GreenfootImage idleLeftImage10; private GreenfootImage idleRightImage11; private GreenfootImage idleLeftImage11; private GreenfootImage idleRightImage12; private GreenfootImage idleLeftImage12; private GreenfootImage idleRightImage13; private GreenfootImage idleLeftImage13; private GreenfootImage idleRightImage14; private GreenfootImage idleLeftImage14; private GreenfootImage idleRightImage15; private GreenfootImage idleLeftImage15; private GreenfootImage idleRightImage16; private GreenfootImage idleLeftImage16; private GreenfootImage idleRightImage17; private GreenfootImage idleLeftImage17; private GreenfootImage idleRightImage18; private GreenfootImage idleLeftImage18; private GreenfootImage idleRightImage19; private GreenfootImage idleLeftImage19; private GreenfootImage idleRightImage20; private GreenfootImage idleLeftImage20; private int shootCooldown = 0; private int shootCooldownTime = 30; private boolean isShooting = false; public player() { idleRightImage1 = new GreenfootImage("1000013314.png"); idleLeftImage1 = new GreenfootImage(idleRightImage1); idleLeftImage1.mirrorHorizontally(); idleRightImage2 = new GreenfootImage("1000013316.png"); idleLeftImage2 = new GreenfootImage(idleRightImage2); idleLeftImage2.mirrorHorizontally(); idleRightImage3 = new GreenfootImage("1000013318.png"); idleLeftImage3 = new GreenfootImage(idleRightImage3); idleLeftImage3.mirrorHorizontally(); idleRightImage4 = new GreenfootImage("1000013321.png"); idleLeftImage4 = new GreenfootImage(idleRightImage4); idleLeftImage4.mirrorHorizontally(); idleRightImage5 = new GreenfootImage("1000013322.png"); idleLeftImage5 = new GreenfootImage(idleRightImage5); idleLeftImage5.mirrorHorizontally(); idleRightImage6 = new GreenfootImage("1000013323.png"); idleLeftImage6 = new GreenfootImage(idleRightImage6); idleLeftImage6.mirrorHorizontally(); idleRightImage7 = new GreenfootImage("1000013324.png"); idleLeftImage7 = new GreenfootImage(idleRightImage7); idleLeftImage7.mirrorHorizontally(); idleRightImage8 = new GreenfootImage("1000013325.png"); idleLeftImage8 = new GreenfootImage(idleRightImage8); idleLeftImage8.mirrorHorizontally(); idleRightImage9 = new GreenfootImage("1000013327.png"); idleLeftImage9 = new GreenfootImage(idleRightImage9); idleLeftImage9.mirrorHorizontally(); idleRightImage10 = new GreenfootImage("1000013329.png"); idleLeftImage10 = new GreenfootImage(idleRightImage10); idleLeftImage10.mirrorHorizontally(); idleRightImage11 = new GreenfootImage("1000013330.png"); idleLeftImage11 = new GreenfootImage(idleRightImage11); idleLeftImage11.mirrorHorizontally(); idleRightImage12 = new GreenfootImage("1000013331.png"); idleLeftImage12 = new GreenfootImage(idleRightImage12); idleLeftImage12.mirrorHorizontally(); idleRightImage13 = new GreenfootImage("1000013332.png"); idleLeftImage13 = new GreenfootImage(idleRightImage13); idleLeftImage13.mirrorHorizontally(); idleRightImage14 = new GreenfootImage("1000013333.png"); idleLeftImage14 = new GreenfootImage(idleRightImage14); idleLeftImage14.mirrorHorizontally(); idleRightImage15 = new GreenfootImage("1000013335.png"); idleLeftImage15 = new GreenfootImage(idleRightImage15); idleLeftImage15.mirrorHorizontally(); idleRightImage16 = new GreenfootImage("1000013336.png"); idleLeftImage16 = new GreenfootImage(idleRightImage16); idleLeftImage16.mirrorHorizontally(); idleRightImage17 = new GreenfootImage("1000013338.png"); idleLeftImage17 = new GreenfootImage(idleRightImage17); idleLeftImage17.mirrorHorizontally(); idleRightImage18 = new GreenfootImage("1000013339.png"); idleLeftImage18 = new GreenfootImage(idleRightImage18); idleLeftImage18.mirrorHorizontally(); idleRightImage19 = new GreenfootImage("1000013340.png"); idleLeftImage19 = new GreenfootImage(idleRightImage19); idleLeftImage19.mirrorHorizontally(); idleRightImage20 = new GreenfootImage("1000013342.png"); idleLeftImage20 = new GreenfootImage(idleRightImage20); idleLeftImage20.mirrorHorizontally(); healthBarBackground.setColor(Color.GRAY); healthBarBackground.fill(); healthBar.setColor(Color.RED); healthBar.fill(); GreenfootImage img = getImage(); img.scale(scaleX, scaleY); setImage(img); } public void act() { if (invincible) { invincibilityTimer--; if (invincibilityTimer > 0 && flashCount < 3) { flashTimer++; if (flashTimer >= 10) { toggleTransparency(); flashTimer = 0; flashCount++; } } if (flashCount >= 3) { stopFlashing(); } } if (invincibilityTimer <= 0) { invincible = false; setTransparency(255); flashCount = 0; flashTimer = 0; } if (shootCooldown > 0) { shootCooldown--; } if (!canShoot) { shootCooldown--; if (shootCooldown <= 0) { canShoot = true; } } checkWorldChange(); animCount = animCount + 1; move(); checkFall(); checkCeiling(); checkRightWall(); jump(); shoot(); updateHealthBar(); canshoot(); checkCollisions(); checkBottomBorderDeath(); checkPlayerHealth(); } public void canshoot(){ if (!canShoot) { shootCooldown--; if (shootCooldown <= 0) { canShoot = true; } } if (isShooting) { animCount++; if (getX() > Greenfoot.getMouseInfo().getX()) { if (animCount % 6 == 0) { switch (frame) { case 1: setImage(shl1); break; case 2: setImage(shl2); break; case 3: setImage(shl3); break; case 4: setImage(shl4); break; } frame++; if (frame > 4) frame = 1; } } else { if (animCount % 6 == 0) { switch (frame) { case 1: setImage(shr1); break; case 2: setImage(shr2); break; case 3: setImage(shr3); break; case 4: setImage(shr4); break; } frame++; if (frame > 4) frame = 1; } } if (animCount > 48) { animCount = 0; isShooting = false; } GreenfootImage img = getImage(); img.scale(scaleX, scaleY); } } public void checkBottomBorderDeath() { int worldHeight = getWorld().getHeight(); if (getY() >= worldHeight - 1) { Lvl1 world = (Lvl1) getWorld(); world.handleGameOver(); } } private void checkWorldChange() { if (getX() >= getWorld().getWidth() - 1) { Scene2lvl1 scene2 = new Scene2lvl1(); Greenfoot.setWorld(scene2); setLocation(1, getY()); } if (getX() <= 0) { Scene1lvl1 scene1 = new Scene1lvl1(); Greenfoot.setWorld(scene1); setLocation(scene1.getWidth() - 2, getY()); } } public void reduceHealth(int damage) { if (!invincible) { health -= damage; if (health <= 0) { health = 0; handleDeath(); } else { invincible = true; invincibilityTimer = 100; setTransparency(128); // Flashing effect } } } private void handleDeath() { if (getWorld() != null) { getWorld().removeObject(this); } } private void toggleTransparency() { int currentTransparency = getImage().getTransparency(); int newTransparency = (currentTransparency == 128) ? 255 : 128; setTransparency(newTransparency); } private void stopFlashing() { setTransparency(255); setImage(getImage()); } public void updateHealthBar() { int healthBarWidth = (int)((double)health / 200 * 200); healthBar = new GreenfootImage(healthBarWidth, 10); healthBar.setColor(Color.RED); healthBar.fill(); getWorld().getBackground().drawImage(healthBarBackground, 10, 10); getWorld().getBackground().drawImage(healthBar, 10, 10); } public void checkPlayerHealth() { try { System.out.println("Current player health: " + health); if (health == 0) { System.out.println("Player health is 0, handling player death..."); handleDeath(); } } catch (Exception e) { e.printStackTrace(); // This will print the error message and stack trace } } public void setTransparency(int transparency) { GreenfootImage image = getImage(); image.setTransparency(transparency); setImage(image); } public void shoot() { if (Greenfoot.isKeyDown("enter") && canShoot) { MouseInfo mouse = Greenfoot.getMouseInfo(); if (mouse != null) { int mouseX = mouse.getX(); int mouseY = mouse.getY(); int angle = (int) Math.toDegrees(Math.atan2(mouseY - getY(), mouseX - getX())); canShoot = false; shootCooldown = shootCooldownTime; isShooting = true; getWorld().addObject(new projectiles(angle), getX(), getY()); } } } public void move() { if (Greenfoot.isKeyDown("right")) { move(5); bulletspeed = 20; facingRight = true; if (animCount % 6 == 0) { switch (frame) { case 1: setImage(runright1); break; case 2: setImage(runright2); break; case 3: setImage(runright3); break; case 4: setImage(runright4); break; } frame++; if (frame > 4) frame = 1; GreenfootImage img = getImage(); img.scale(scaleX, scaleY); } } else if (Greenfoot.isKeyDown("left")) { move(-5); bulletspeed = -20; facingRight = false; if (animCount % 6 == 0) { switch (frame) { case 1: setImage(runleft1); break; case 2: setImage(runleft2); break; case 3: setImage(runleft3); break; case 4: setImage(runleft4); break; } frame++; if (frame > 4) frame = 1; GreenfootImage img = getImage(); img.scale(scaleX, scaleY); } } else { if (animCount % 9 == 0) { if (facingRight) { switch (frame) { case 1: setImage(idle1); break; case 2: setImage(idle2); break; case 3: setImage(idle3); break; case 4: setImage(idle4); break; case 5: setImage(idle5); break; case 6: setImage(idle6); break; case 7: setImage(idle7); break; case 8: setImage(idle8); break; case 9: setImage(idle9); break; case 10: setImage(idle10); break; case 11: setImage(idle11); break; case 12: setImage(idle12); break; case 13: setImage(idle13); break; case 14: setImage(idle14); break; case 15: setImage(idle15); break; case 16: setImage(idle16); break; case 17: setImage(idle17); break; case 18: setImage(idle18); break; case 19: setImage(idle19); break; case 20: setImage(idle20); break; } } else { switch (frame) { case 1: setImage(idleLeftImage1); break; case 2: setImage(idleLeftImage2); break; case 3: setImage(idleLeftImage3); break; case 4: setImage(idleLeftImage4); break; case 5: setImage(idleLeftImage5); break; case 6: setImage(idleLeftImage6); break; case 7: setImage(idleLeftImage7); break; case 8: setImage(idleLeftImage8); break; case 9: setImage(idleLeftImage9); break; case 10: setImage(idleLeftImage10); break; case 11: setImage(idleLeftImage11); break; case 12: setImage(idleLeftImage12); break; case 13: setImage(idleLeftImage13); break; case 14: setImage(idleLeftImage14); break; case 15: setImage(idleLeftImage15); break; case 16: setImage(idleLeftImage16); break; case 17: setImage(idleLeftImage17); break; case 18: setImage(idleLeftImage18); break; case 19: setImage(idleLeftImage19); break; case 20: setImage(idleLeftImage20); break; } } frame++; if (frame > 20) frame = 1; GreenfootImage img = getImage(); img.scale(scaleX, scaleY); } } } public void checkCollisions() { Actor enemy = getOneIntersectingObject(enemies.class); if (enemy != null && !invincible) { reduceHealth(10); } if (canSee(Coins.class)) { eat(Coins.class); Greenfoot.playSound("coin-recieved-230517.mp3"); Lvl1 lvl1 = (Lvl1)getWorld(); lvl1.gibZaehler().add(1); } } public void fall() { setLocation(getX(), getY() + vSpeed); if(vSpeed <= 12) vSpeed=vSpeed+velocity; } public boolean onFloor() { int spriteHeight = getImage().getHeight(); int lookForGround = spriteHeight/2; Actor floor = getOneObjectAtOffset(0, lookForGround, floor.class); if (floor == null) { return false; } else { movetoground(floor); return true; } } public boolean checkRightWall() { int spriteWidth = getImage().getWidth(); int lookForRightWall = spriteWidth/2; Actor rWall = getOneObjectAtOffset(lookForRightWall, 0, floor.class); if (rWall == null) { return false; } else { stopByRWall(rWall); return true; } } public void stopByRWall(Actor rWall) { int wallWidth = rWall.getImage().getWidth(); int newX = rWall.getX() - (wallWidth + getImage().getWidth())/2; setLocation(newX, getY()); } public boolean checkLeftWall() { int spriteWidth = getImage().getWidth(); int lookForRightWall = spriteWidth/2; Actor lWall = getOneObjectAtOffset(lookForRightWall, 0, floor.class); if (lWall == null) { return false; } else { stopByLWall(lWall); return true; } } public void stopByLWall(Actor lWall) { int wallWidth = lWall.getImage().getWidth(); int newX = lWall.getX() + (wallWidth + getImage().getWidth())/2; setLocation(newX, getY()); } public boolean checkCeiling() { int spriteHeight = getImage().getHeight(); int lookForCeiling = spriteHeight/2; Actor ceiling = getOneObjectAtOffset(0, -lookForCeiling, floor.class); if (ceiling != null) { bopHead(ceiling); return true; } else { return false; } } public void bopHead(Actor ceiling) { int ceilingHeight = ceiling.getImage().getHeight(); int newY = ceiling.getY() + (ceilingHeight + getImage().getHeight())/2; setLocation(getX(), newY); vSpeed = 2; } public void checkFall() { if (onFloor()) { vSpeed = 0; } else { fall(); } } public void jump() { if (Greenfoot.isKeyDown("space")==true && onFloor()) { vSpeed = jumpStrength; fall(); } } public void movetoground(Actor floor) { int floorHeight = floor.getImage().getHeight(); int newY = floor.getY() - (floorHeight + getImage().getHeight())/2; setLocation(getX(), newY); } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class enemies here. * * @author (your name) * @version (a version number or a date) */ public class enemies extends Animal { /** * Act - do whatever the enemies wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. * */ public int vSpeed = 0; public int velocity = 1; protected int health; public int damage; public int speed; public int spriteHeight = getImage().getHeight(); public int spriteWidth = getImage().getWidth(); public int lookForWalls = spriteWidth/2; public int lookForEdge = spriteWidth/4; public int lookForGround = spriteHeight/2; private GreenfootImage baseImage; private double imageFactor = 1; public enemies(int bSpeed, int bHealth) { speed = bSpeed; health = bHealth; } public void act() { checkFall(); checkBottomBorderDeath(); } public void takeDamage(int damage) { health -= damage; if (health <= 0) { die(); } } public void die() { dropCoin(); getWorld().removeObject(this); } public void dropCoin() { if (getWorld() != null) { Coins coin = new Coins(); getWorld().addObject(coin, getX(), getY()); } } public void checkBottomBorderDeath() { int worldHeight = getWorld().getHeight(); if (getY() >= worldHeight - 1) { getWorld().removeObject(this); } } public void checkFall() { if (onFloor()) { vSpeed = 0; } else { fall(); } } public void fall() { setLocation(getX(), getY() + vSpeed); if(vSpeed <= 12) vSpeed=vSpeed+velocity; } public boolean onFloor() { int spriteHeight = getImage().getHeight(); int lookForGround = spriteHeight/2; Actor floor = getOneObjectAtOffset(0, lookForGround, floor.class); if (floor == null) { return false; } else { movetoground(floor); return true; } } public void movetoground(Actor floor) { int floorHeight = floor.getImage().getHeight(); int newY = floor.getY() - (floorHeight + getImage().getHeight())/2; setLocation(getX(), newY); } public void moveEnemy() { int currentX = getX(); int worldWidth = getWorld().getWidth(); if (currentX <= 0 || currentX >= worldWidth - 1) { speed = -speed; lookForWalls = -lookForWalls; lookForEdge = -lookForEdge; } Actor wall = getOneObjectAtOffset(lookForWalls, 0, floor.class); Actor cliff = getOneObjectAtOffset(lookForEdge, getImage().getHeight() / 2 + 10, floor.class); if (wall != null || cliff == null) { speed = -speed; lookForWalls = -lookForWalls; lookForEdge = -lookForEdge; } else { move(speed); } } public void death() { Actor player = getOneIntersectingObject(player.class); if (player != null) { if (this instanceof enemy1) { ((player) player).reduceHealth(10); } else if (this instanceof enemy2) { ((player) player).reduceHealth(50); } else if (this instanceof enemy3) { ((player) player).reduceHealth(30); } else if (this instanceof enemy4) { ((player) player).reduceHealth(70); } if (health <= 0) { getWorld().removeObject(this); } } } }