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);
}
}
}
}
