From ee7ed3cb4336d80d5aac21a5db654a707d8c4847 Mon Sep 17 00:00:00 2001 From: saidic Date: Sat, 9 Nov 2024 21:17:22 +0100 Subject: [PATCH] ueb03 - Task3_d --second_trial --- .../BoulderAndDiamondController.java | 105 +++++++++++------- 1 file changed, 62 insertions(+), 43 deletions(-) diff --git a/src/fr/enssat/BoulderDash/controllers/BoulderAndDiamondController.java b/src/fr/enssat/BoulderDash/controllers/BoulderAndDiamondController.java index d780c795..320c0ffb 100644 --- a/src/fr/enssat/BoulderDash/controllers/BoulderAndDiamondController.java +++ b/src/fr/enssat/BoulderDash/controllers/BoulderAndDiamondController.java @@ -109,62 +109,81 @@ public class BoulderAndDiamondController extends AbstractLevelController impleme * @param y Vertical position */ private void manageFallingObjectBehavior(int x, int y) { - - // Task3 - Variable to get rig of calling one Method in if-clause several times + // Get surrounding elements DisplayableElementModel element = this.levelModel.getElement(x, y); DisplayableElementModel elementTwoBelow = this.levelModel.getElementTwoBelow(x, y); - - // Get informed about Rockford surroundings - DisplayableElementModel elementBelow = this.levelModel.getElementBelow(x, y); - DisplayableElementModel elementLeft = this.levelModel.getElementLeft(x, y); + DisplayableElementModel elementBelow = this.levelModel.getElementBelow(x, y); + DisplayableElementModel elementLeft = this.levelModel.getElementLeft(x, y); DisplayableElementModel elementRight = this.levelModel.getElementRight(x, y); - String spriteNameBelow = elementBelow.getSpriteName(); + String spriteNameBelow = elementBelow.getSpriteName(); String spriteNameLeft = elementLeft.getSpriteName(); String spriteNameRight = elementRight.getSpriteName(); - // Then, process in case of the surrounding - if (spriteNameBelow == "black") { + // Handle different cases based on the element's surroundings + handleFalling(x, y, spriteNameBelow, element); + handleBoulder(x, y, spriteNameBelow, element, elementTwoBelow); + handleRockfordCollision(x, y, spriteNameBelow, element); + handleMagicWall(x, y, spriteNameBelow, element, elementTwoBelow); + handleDestructibleWalls(x, y, elementBelow, element); + handleRockfordMovement(x, y,element, spriteNameLeft, spriteNameRight, elementLeft, elementRight); + } + + private void handleFalling(int x, int y, String spriteNameBelow, DisplayableElementModel element) { + if (spriteNameBelow.equals("black")) { this.levelModel.makeThisDisplayableElementFall(x, y); - } else if (spriteNameBelow == "boulder") { - // Boulders have to roll if they hit another boulder - if (this.levelModel.getElementBelowLeft(x, y).getSpriteName() == "black") { + } + } + + private void handleBoulder(int x, int y, String spriteNameBelow, DisplayableElementModel element, DisplayableElementModel elementTwoBelow) { + if (spriteNameBelow.equals("boulder")) { + if (this.levelModel.getElementBelowLeft(x, y).getSpriteName().equals("black")) { this.levelModel.makeThisBoulderSlideLeft(x, y); - } else if (this.levelModel.getElementBelowRight(x, y).getSpriteName() == "black") { + } else if (this.levelModel.getElementBelowRight(x, y).getSpriteName().equals("black")) { this.levelModel.makeThisBoulderSlideRight(x, y); } - } else { - if (spriteNameBelow == "rockford" && element.isFalling()) { - this.levelModel.exploseGround(x, y + 1); + } + } - AUDIO_LOAD_HELPER.playSound("die"); - - try { - Thread.sleep(25); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - this.levelModel.setGameRunning(false); - } else if (spriteNameBelow == "magicwall") { - if (element.getSpriteName() == "boulder" - && (elementTwoBelow.getSpriteName() == "dirt" || - elementTwoBelow.getSpriteName() == "black")) { - if(element.isConvertible()) { - this.levelModel.transformThisBoulderIntoADiamond(x, y); - } else { - this.levelModel.deleteThisBoulder(x, y); - } - } - } else if (elementBelow.isDestructible() && spriteNameBelow != "dirt" && element.isFalling()) { - this.levelModel.exploseThisBrickWall(x, y); - } else if (spriteNameLeft == "rockford" && this.levelModel.getRockford().isRunningRight() && elementRight.getSpriteName() == "black") { - this.levelModel.moveThisBoulderToRight(x, y); - } else if (spriteNameRight == "rockford" && this.levelModel.getRockford().isRunningLeft() && elementLeft.getSpriteName() == "black") { - this.levelModel.moveThisBoulderToLeft(x, y); - } else { - element.setFalling(false); + private void handleRockfordCollision(int x, int y, String spriteNameBelow, DisplayableElementModel element) { + if (spriteNameBelow.equals("rockford") && element.isFalling()) { + this.levelModel.exploseGround(x, y + 1); + AUDIO_LOAD_HELPER.playSound("die"); + try { + Thread.sleep(25); + } catch (InterruptedException e) { + e.printStackTrace(); } + this.levelModel.setGameRunning(false); + } + } + + private void handleMagicWall(int x, int y, String spriteNameBelow, DisplayableElementModel element, DisplayableElementModel elementTwoBelow) { + if (spriteNameBelow.equals("magicwall")) { + if (element.getSpriteName().equals("boulder") && + (elementTwoBelow.getSpriteName().equals("dirt") || elementTwoBelow.getSpriteName().equals("black"))) { + if (element.isConvertible()) { + this.levelModel.transformThisBoulderIntoADiamond(x, y); + } else { + this.levelModel.deleteThisBoulder(x, y); + } + } + } + } + + private void handleDestructibleWalls(int x, int y, DisplayableElementModel elementBelow, DisplayableElementModel element) { + if (elementBelow.isDestructible() && !elementBelow.getSpriteName().equals("dirt") && element.isFalling()) { + this.levelModel.exploseThisBrickWall(x, y); + } + } + + private void handleRockfordMovement(int x, int y,DisplayableElementModel element ,String spriteNameLeft, String spriteNameRight, DisplayableElementModel elementLeft, DisplayableElementModel elementRight) { + if (spriteNameLeft.equals("rockford") && this.levelModel.getRockford().isRunningRight() && elementRight.getSpriteName().equals("black")) { + this.levelModel.moveThisBoulderToRight(x, y); + } else if (spriteNameRight.equals("rockford") && this.levelModel.getRockford().isRunningLeft() && elementLeft.getSpriteName().equals("black")) { + this.levelModel.moveThisBoulderToLeft(x, y); + } else { + element.setFalling(false); } }