From 65f226a951371944e7d4273a82c6adbc22cd20f0 Mon Sep 17 00:00:00 2001 From: Artem Semenovykh Date: Thu, 7 Nov 2024 21:16:59 +0100 Subject: [PATCH] Task 3 - a b c --- .idea/misc.xml | 2 +- .../BoulderAndDiamondController.java | 88 +++++++++++-------- .../enssat/BoulderDash/models/LevelModel.java | 32 +++++++ 3 files changed, 82 insertions(+), 40 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 9b2ea2a4..168ecc74 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,7 @@ - + \ No newline at end of file diff --git a/src/fr/enssat/BoulderDash/controllers/BoulderAndDiamondController.java b/src/fr/enssat/BoulderDash/controllers/BoulderAndDiamondController.java index 656481ff..20508677 100644 --- a/src/fr/enssat/BoulderDash/controllers/BoulderAndDiamondController.java +++ b/src/fr/enssat/BoulderDash/controllers/BoulderAndDiamondController.java @@ -59,7 +59,7 @@ public class BoulderAndDiamondController implements Runnable { for (int x = this.levelModel.getSizeWidth() - 1; x >= 0; x--) { for (int y = this.levelModel.getSizeHeight() - 1; y >= 0; y--) { // Gets the spriteName of actual DisplayableElementModel object scanned - DisplayableElementModel elementModel = this.levelModel.getGroundLevelModel()[x][y]; + DisplayableElementModel elementModel = this.levelModel.getElement(x, y); if(elementModel == null) { elementModel = new DirtModel(); @@ -69,7 +69,7 @@ public class BoulderAndDiamondController implements Runnable { // If it is a boulder or a diamond... if (spriteName == "boulder" || spriteName == "diamond") { - this.manageFall(x, y); + this.manageFallingObjectBehavior(x, y); } else if(spriteName == "expandingwall"){ if(this.expandWall(x,y).equals("left")){ x -= 1; @@ -86,8 +86,9 @@ public class BoulderAndDiamondController implements Runnable { * @param y Vertical position */ private String expandWall(int x, int y) { - DisplayableElementModel elementLeft = this.levelModel.getGroundLevelModel()[x - 1][y]; - DisplayableElementModel elementRight = this.levelModel.getGroundLevelModel()[x + 1][y]; + DisplayableElementModel elementLeft = this.levelModel.getElementLeft(x, y); + DisplayableElementModel elementRight = this.levelModel.getElementRight(x, y); + String spriteNameLeft = elementLeft.getSpriteName(); String spriteNameRight = elementRight.getSpriteName(); @@ -109,11 +110,16 @@ public class BoulderAndDiamondController implements Runnable { * @param x Horizontal position * @param y Vertical position */ - private void manageFall(int x, int y) { + private void manageFallingObjectBehavior(int x, int y) { + + // Task3 - Variable to get rig of calling one Method in if-clause several times + DisplayableElementModel element = this.levelModel.getElement(x, y); + DisplayableElementModel elementTwoBelow = this.levelModel.getElementTwoBelow(x, y); + // Get informed about Rockford surroundings - DisplayableElementModel elementBelow = this.levelModel.getGroundLevelModel()[x][y + 1]; - DisplayableElementModel elementLeft = this.levelModel.getGroundLevelModel()[x - 1][y]; - DisplayableElementModel elementRight = this.levelModel.getGroundLevelModel()[x + 1][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 spriteNameLeft = elementLeft.getSpriteName(); @@ -124,41 +130,45 @@ public class BoulderAndDiamondController implements Runnable { this.levelModel.makeThisDisplayableElementFall(x, y); } else if (spriteNameBelow == "boulder") { // Boulders have to roll if they hit another boulder - if (this.levelModel.getGroundLevelModel()[x - 1][y + 1].getSpriteName() == "black") { + if (this.levelModel.getElementBelowLeft(x, y).getSpriteName() == "black") { this.levelModel.makeThisBoulderSlideLeft(x, y); - } else if (this.levelModel.getGroundLevelModel()[x + 1][y + 1].getSpriteName() == "black") { + } else if (this.levelModel.getElementBelowRight(x, y).getSpriteName() == "black") { this.levelModel.makeThisBoulderSlideRight(x, y); } - } else if (spriteNameBelow == "rockford" && this.levelModel.getGroundLevelModel()[x][y].isFalling()) { - this.levelModel.exploseGround(x, y + 1); - - this.audioLoadHelper.playSound("die"); - - try { - Thread.sleep(25); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - this.levelModel.setGameRunning(false); - } else if (spriteNameBelow == "magicwall") { - if (this.levelModel.getGroundLevelModel()[x][y].getSpriteName() == "boulder" - && (this.levelModel.getGroundLevelModel()[x][y+2].getSpriteName() == "dirt" || - this.levelModel.getGroundLevelModel()[x][y+2].getSpriteName() == "black")) { - if(this.levelModel.getGroundLevelModel()[x][y].isConvertible()) { - this.levelModel.transformThisBoulderIntoADiamond(x, y); - } else { - this.levelModel.deleteThisBoulder(x, y); - } - } - } else if (elementBelow.isDestructible() && spriteNameBelow != "dirt" && this.levelModel.getGroundLevelModel()[x][y].isFalling()) { - this.levelModel.exploseThisBrickWall(x, y); - } else if (spriteNameLeft == "rockford" && this.levelModel.getRockford().isRunningRight() && this.levelModel.getGroundLevelModel()[x + 1][y].getSpriteName() == "black") { - this.levelModel.moveThisBoulderToRight(x, y); - } else if (spriteNameRight == "rockford" && this.levelModel.getRockford().isRunningLeft() && this.levelModel.getGroundLevelModel()[x - 1][y].getSpriteName() == "black") { - this.levelModel.moveThisBoulderToLeft(x, y); } else { - this.levelModel.getGroundLevelModel()[x][y].setFalling(false); + if (spriteNameBelow == "rockford" && element.isFalling()) { + this.levelModel.exploseGround(x, y + 1); + + this.audioLoadHelper.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); + } } } + + } diff --git a/src/fr/enssat/BoulderDash/models/LevelModel.java b/src/fr/enssat/BoulderDash/models/LevelModel.java index cbb5415a..b4f18c5d 100644 --- a/src/fr/enssat/BoulderDash/models/LevelModel.java +++ b/src/fr/enssat/BoulderDash/models/LevelModel.java @@ -465,6 +465,38 @@ public class LevelModel extends Observable implements Runnable { return groundGrid; } + /** + * Task 3c - move methods to LevelModel + * + * @return position according to specific + */ + public DisplayableElementModel getElement(int x, int y) { + return getGroundLevelModel()[x][y]; + } + + public DisplayableElementModel getElementTwoBelow(int x, int y) { + return getElement(x, y + 2); + } + + public DisplayableElementModel getElementBelowRight(int x, int y) { + return getElement(x + 1, y + 1); + } + + public DisplayableElementModel getElementBelowLeft(int x, int y) { + return getElement(x - 1, y + 1); + } + + public DisplayableElementModel getElementRight(int x, int y) { + return getElement(x + 1, y); + } + + public DisplayableElementModel getElementLeft(int x, int y) { + return getElement(x - 1, y); + } + + public DisplayableElementModel getElementBelow(int x, int y) { + return getElement(x, y + 1); + } /** * Notify observers about a model change */