Skip to content
Snippets Groups Projects
Commit 0fd4e653 authored by Oscar Wiberg's avatar Oscar Wiberg
Browse files

fortsatt omstrukturering

parent a6771d51
No related branches found
No related tags found
1 merge request!2Newmode
......@@ -45,8 +45,8 @@ public interface Constants {
double enemyHeight = 80;
// powerups
String lifeImg = "src/Images1/heart2.png";
String powerImg = "src/Images1/blixt.png";
String lifeImg = "src/Images1/apple.png";
String powerImg = "src/Images1/zap.png";
String bombImg = "src/Images1/bomb.png";
double bombWidth = 50;
......
......@@ -31,7 +31,7 @@ public class Bomb {
}
public Bounds getBoundingBox() {
return new Rectangle( startX, posY, Constants.bombWidth, Constants.bombHeight).getBoundsInParent();
return new Rectangle(startX, posY, Constants.bombWidth, Constants.bombHeight).getBoundsInParent();
}
......
......@@ -10,51 +10,24 @@ import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.shape.Rectangle;
public class Enemy extends Antagonist{
public class Enemy extends Object{
public Enemy(String enemyImg, double x, double y) {
super(enemyImg, x, y);
public Enemy(String enemyImg, double x, double y, double h, double w) {
super(enemyImg, x, y, h, w);
}
// if (collided && enemy.getEnemyX() < player.getPlayerX()) {
// collided = false;
// }
@Override
public boolean playerAntagonistCollision(Player player) {
// boolean hit = false;
boolean collisionX = player.getPlayerX() < (x + 60.00) && (player.getPlayerX() + 60.00) > x;
// Check for collision on the y-axis
boolean collisionY = player.getPlayerY() < (y + 45.00) && (player.getPlayerY() + 60.00) > y;
if (collisionY && collisionX && !collisionDetected) {
player.decreaseLives();
collisionDetected = true;
return true;
}
if (!collisionX) {
collisionDetected = false;
}
return false;
}
public Bounds getBoundingBox() {
return new Rectangle(x, y, Constants.enemyWidth, Constants.enemyHeight).getBoundsInParent();
}
@Override
public double getY() {
return y;
public void use(Player player) {
// TODO Auto-generated method stub
}
......
......@@ -6,7 +6,7 @@ import java.util.Random;
import javafx.scene.image.Image;
public class FlyingEnemy extends Antagonist{
public class FlyingEnemy extends Object{
private Random drop;
......@@ -16,8 +16,8 @@ public class FlyingEnemy extends Antagonist{
private boolean bombDropped = false;
public FlyingEnemy(String enemyImg, double x, double y) {
super(enemyImg, x, y);
public FlyingEnemy(String enemyImg, double x, double y, double h, double w) {
super(enemyImg, x, y, h, w);
this.drop = new Random();
this.bombDropX = dropNextBombX();
......@@ -53,12 +53,15 @@ public class FlyingEnemy extends Antagonist{
bombDropped = false;
}
@Override
public boolean playerAntagonistCollision(Player player) {
public void use(Player player) {
// TODO Auto-generated method stub
return false;
}
......
package states;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import constants.Constants;
import javafx.geometry.Bounds;
import javafx.scene.image.Image;
import javafx.scene.shape.Rectangle;
public abstract class Object {
private double posX;
private double posY;
private double height;
private double width;
private Image img;
public Object(String image, double x, double y, double h, double w) {
posY = y;
posX = x;
width = w;
height = h;
try {
img = new Image(new FileInputStream(image));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public double getX() {
return posX;
}
public double getY() {
return posY;
}
public Image getImage() {
return img;
}
public void setX(double posX) {
this.posX = posX;
}
public void setY(double posY) {
this.posY = posY;
}
public double getH() {
return height;
}
public double getW() {
return width;
}
public boolean playerObjectCollision(Player player) {
boolean hit = false;
double playerX = player.getPlayerX();
double playerY = player.getPlayerY();
// Define new smaller width and height
double smallerWidth = Constants.playerWidth - 50; // Example: reduced by 20 pixels
double smallerHeight = Constants.playerHeight - 50; // Example: reduced by 20 pixels
// Calculate new X and Y to center the smaller rectangle around the player's position
double centeredX = playerX + (Constants.playerWidth - smallerWidth) / 2;
double centeredY = playerY + (Constants.playerHeight - smallerHeight) / 2;
Bounds playerRect = new Rectangle(centeredX, centeredY, smallerWidth, smallerHeight).getBoundsInParent();
Bounds objectRect = new Rectangle(this.getX(), this.getY(), this.getW(), this.getH()).getBoundsInParent();
if (playerRect.intersects(objectRect)) {
hit = true;
}
return hit;
}
public abstract void use(Player player);
// här kommer de två olika powerupsen avgöra vad som händer när ma ta den, denna klass kallar på kollisionen
}
......@@ -62,6 +62,8 @@ public class PlayState extends GameState {
private int movingSpeed = 10;
private Bomb bomb;
private boolean isFlyingEnemyActive = false;
private String currScore;
private double collisionX = -1.00;
......@@ -94,9 +96,9 @@ public class PlayState extends GameState {
public void mode1() {
player = new Player(Constants.playerImg);
slidingPlayer = Constants.slidingPlayerImg;
enemy = new Enemy(Constants.enemyImg, 800.00, 270.00);
extraLife = new ExtraLifePowerUp(Constants.lifeImg);
flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00);
enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth);
// extraLife = new ExtraLifePowerUp(Constants.lifeImg);
flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth);
// flyingEnemy.setAntagonistX(800.00);
// tempy = flyingEnemy.getY();
bgColor = Color.ROYALBLUE;
......@@ -107,9 +109,9 @@ public class PlayState extends GameState {
public void mode2() {
player = new Player(Constants.playerImg2);
slidingPlayer = Constants.slidingPlayerImg2;
enemy = new Enemy(Constants.enemyImg, 800.00, 250.00);
extraLife = new ExtraLifePowerUp(Constants.lifeImg);
flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00);
enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth);
// extraLife = new ExtraLifePowerUp(Constants.lifeImg);
flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth);
// flyingEnemy.setAntagonistX(800.00);
// tempy = flyingEnemy.getY();
bgColor = Color.BEIGE;
......@@ -123,6 +125,8 @@ public class PlayState extends GameState {
*/
@Override
public void draw(GraphicsContext g) {
currScore = "Currently: " + Integer.toString(player.getPasses());
drawBg(g, bgColor);
g.setFill(fontColor);
......@@ -133,6 +137,7 @@ public class PlayState extends GameState {
g.fillText(livesleft+player.getLives(), 0, 30);
g.fillText(informationText, Constants.screenWidth - 300, 30);
g.fillText(scoreText, 0, 60);
g.fillText(currScore, 0, 90);
} else {
g.fillText(gameOverText, Constants.screenWidth/2, 200);
score.saveScore(player.getPasses());
......@@ -150,12 +155,6 @@ public class PlayState extends GameState {
// Detta block används för att rita ut rectanglarna runt spelare och enemy
// g.setStroke(Color.BLACK); // Set the rectangle's border color
// g.setLineWidth(2); // Set the border width
// // g.strokeRect(flyingEnemy.getX(), tempy, Constants.enemyWidth, Constants.enemyHeight);
// g.strokeRect(player.getPlayerX(), player.getRect(), Constants.playerWidth, Constants.playerHeight);
drawEnemy(g);
......@@ -168,17 +167,22 @@ public class PlayState extends GameState {
public void drawEnemy(GraphicsContext g) {
engen = new Random();
if (!isFlyingEnemyActive) {
g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight);
if (enemy.getX() < 0 - Constants.enemyWidth) {
enemy.setAntagonistX(Constants.screenWidth);
enemy.setX(Constants.screenWidth);
collided = false;
collisionX = -1.00;
player.updatePasses(1);
if (engen.nextInt(2) == 1) { // 50% chance
if (engen.nextInt(2) == 1 && player.getPasses() > 2) { // 50% chance after player hase passed
isFlyingEnemyActive = true;
flyingEnemy.setAntagonistX(Constants.screenWidth); // Reset position
flyingEnemy.setX(Constants.screenWidth); // Reset position
}
}
......@@ -188,8 +192,8 @@ public class PlayState extends GameState {
if (flyingEnemy.getX() < 0 - Constants.enemyWidth) {
isFlyingEnemyActive = false;
// flyingEnemy.setAntagonistX(Constants.screenWidth); // Reset the enemy's position
// player.updatePasses(1);
player.updatePasses(1);
// Reset bomb drop flag to allow the next bomb drop
flyingEnemy.resetBombDrop();
......@@ -275,14 +279,11 @@ public class PlayState extends GameState {
@Override
public void update() {
//om enemy position är mindre än player och collide är true kollar den inte collision
// Enemy hoppar 10 snäpp till vänster för varje update
// enemy.setAntagonistX(enemy.getX()-10);
// enemy.setAntagonistX(enemy.getX()-movingSpeed);
if (isFlyingEnemyActive) {
flyingEnemy.setAntagonistX(flyingEnemy.getX() -movingSpeed);
flyingEnemy.setX(flyingEnemy.getX() -movingSpeed);
Bomb droppedBomb = flyingEnemy.dropBomb();
......@@ -290,7 +291,10 @@ public class PlayState extends GameState {
bomb = droppedBomb;
}
} else {
enemy.setAntagonistX(enemy.getX() - movingSpeed);
enemy.setX(enemy.getX() - movingSpeed);
}
if (bomb != null) {
......@@ -311,39 +315,46 @@ public class PlayState extends GameState {
// Om
if (!gameOver) {
if (!collided) {
// collided = enemy.playerAntagonistCollision(player);
collided = enemy.playerAntagonistCollision(player);
if (!collided && enemy.playerObjectCollision(player)) {
collided = true;
if (Integer.valueOf(player.getLives()) == 0) {
gameOver = true;
}
}
if (collisionX == -1.00) {
collisionX = enemy.getX();
System.out.println("Player-Enemy Collision X Coordinate: " + collisionX);
}
player.decreaseLives();
//återställer boolean när enemy passerat
if (collided && enemy.getX() < player.getPlayerX()) {
collided = false;
}
if (Integer.valueOf(player.getLives()) == 0) {
gameOver = true;
}
// if (collided && enemy.getX() < collisionX) {
// collided = false;
// }
}
if (up) {
player.jump(movingSpeed);
}
if (player.getPlayerY() == 265) {
up = false;
}
if (down) {
player.slide(slidingPlayer);
if (up) {
}
player.jump(movingSpeed);
}
if (player.getPlayerY() == 265) {
up = false;
}
if (down) {
player.slide(slidingPlayer);
}
......@@ -351,6 +362,8 @@ public class PlayState extends GameState {
// Here one would probably instead move the player and any
// enemies / moving obstacles currently active.
......
package states;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import constants.Constants;
import javafx.scene.image.Image;
public abstract class PowerUp {
private double powerUpX = (Constants.screenWidth - Constants.playerWidth) / 2;
private double powerUpY = 265.00;
private Image powerUpImage;
PowerUp(String image) {
try {
powerUpImage = new Image(new FileInputStream(image));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public double getPowerUpX() {
return powerUpX;
}
public void setPowerUpX(double powerUpX) {
this.powerUpX = powerUpX;
}
public double getPowerUpY() {
return powerUpY;
}
public Image getImage() {
return powerUpImage;
}
public boolean powerUpPlayerCollision(Player player) {
boolean hit = false;
// här ska det finnas kod för att kolla kollisioner mellan spelare och powerup
return hit;
}
public abstract void use(Player player);
// här kommer de två olika powerupsen avgöra vad som händer när ma ta den, denna klass kallar på kollisionen
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment