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
*/