Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
55fab7af24 | ||
5bb81a4e65 | |||
7a9956fb63 | |||
7d3f773365 | |||
8cccc03881 | |||
7c8f81ff1c | |||
d937090e5f | |||
cb6b7513aa | |||
266283c49c | |||
ab04dc1fd8 | |||
5ec9fa6e18 | |||
f0ad616ae2 | |||
11ee2dc2ea | |||
![]() |
d9bcafa8ee | ||
![]() |
3dc8f7f10a | ||
![]() |
53dc37347c | ||
![]() |
c74f2d5056 | ||
![]() |
ed80b6a94c | ||
![]() |
61e87948ab |
2
.idea/misc.xml
generated
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectRootManager">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
BIN
Exercise 04.pdf
Normal file
1
boulder-dash/.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
/bin/
|
/bin/
|
||||||
/out/
|
/out/
|
||||||
|
/classes/
|
||||||
|
Before Width: | Height: | Size: 357 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 400 KiB |
Before Width: | Height: | Size: 457 B |
Before Width: | Height: | Size: 832 B |
Before Width: | Height: | Size: 140 B |
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 605 B |
Before Width: | Height: | Size: 856 B |
Before Width: | Height: | Size: 589 B |
Before Width: | Height: | Size: 135 B |
Before Width: | Height: | Size: 75 B |
Before Width: | Height: | Size: 71 B |
Before Width: | Height: | Size: 471 B |
Before Width: | Height: | Size: 340 B |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 71 B |
@ -1,8 +1,7 @@
|
|||||||
package fr.enssat.BoulderDash.controllers;
|
package fr.enssat.BoulderDash.controllers;
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.LevelModel;
|
import fr.enssat.BoulderDash.models.LevelModel;
|
||||||
import fr.enssat.BoulderDash.models.DirtModel;
|
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,7 +61,7 @@ public class BoulderAndDiamondController implements Runnable {
|
|||||||
DisplayableElementModel elementModel = this.levelModel.getGroundLevelModel()[x][y];
|
DisplayableElementModel elementModel = this.levelModel.getGroundLevelModel()[x][y];
|
||||||
|
|
||||||
if(elementModel == null) {
|
if(elementModel == null) {
|
||||||
elementModel = new DirtModel();
|
elementModel = DisplayableElementModel.newDirtModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
String spriteName = elementModel.getSpriteName();
|
String spriteName = elementModel.getSpriteName();
|
||||||
|
@ -2,7 +2,6 @@ package fr.enssat.BoulderDash.controllers;
|
|||||||
|
|
||||||
import fr.enssat.BoulderDash.models.LevelModel;
|
import fr.enssat.BoulderDash.models.LevelModel;
|
||||||
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
||||||
import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
|
|
||||||
import fr.enssat.BoulderDash.views.MenuView;
|
import fr.enssat.BoulderDash.views.MenuView;
|
||||||
import fr.enssat.BoulderDash.views.GameView;
|
import fr.enssat.BoulderDash.views.GameView;
|
||||||
|
|
||||||
@ -86,7 +85,7 @@ public class GameController implements ActionListener {
|
|||||||
this.gameView.dispose();
|
this.gameView.dispose();
|
||||||
|
|
||||||
if(source.equals("restart")){
|
if(source.equals("restart")){
|
||||||
this.levelModel = new LevelModel(this.navigationBetweenViewController.getPickedLevelIdentifier(), audioLoadHelper);
|
this.levelModel = LevelModel.createGameLevelModel(this.navigationBetweenViewController.getPickedLevelIdentifier(), audioLoadHelper);
|
||||||
this.gameView = new GameView(this, levelModel);
|
this.gameView = new GameView(this, levelModel);
|
||||||
this.gameView.setVisible(true);
|
this.gameView.setVisible(true);
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package fr.enssat.BoulderDash.controllers;
|
package fr.enssat.BoulderDash.controllers;
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
|
||||||
import fr.enssat.BoulderDash.models.LevelModel;
|
import fr.enssat.BoulderDash.models.LevelModel;
|
||||||
import fr.enssat.BoulderDash.controllers.RockfordUpdateController;
|
|
||||||
import fr.enssat.BoulderDash.controllers.BoulderAndDiamondController;
|
|
||||||
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
||||||
|
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
@ -9,7 +9,6 @@ import fr.enssat.BoulderDash.helpers.LevelSaveHelper;
|
|||||||
import fr.enssat.BoulderDash.models.LevelModel;
|
import fr.enssat.BoulderDash.models.LevelModel;
|
||||||
import fr.enssat.BoulderDash.views.HelpView;
|
import fr.enssat.BoulderDash.views.HelpView;
|
||||||
import fr.enssat.BoulderDash.views.LevelEditorView;
|
import fr.enssat.BoulderDash.views.LevelEditorView;
|
||||||
import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
|
@ -6,8 +6,6 @@ import java.awt.event.ActionListener;
|
|||||||
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
||||||
import fr.enssat.BoulderDash.models.LevelModel;
|
import fr.enssat.BoulderDash.models.LevelModel;
|
||||||
import fr.enssat.BoulderDash.views.MenuView;
|
import fr.enssat.BoulderDash.views.MenuView;
|
||||||
import fr.enssat.BoulderDash.controllers.LevelEditorController;
|
|
||||||
import fr.enssat.BoulderDash.controllers.GameController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller to navigate between the different views
|
* Controller to navigate between the different views
|
||||||
@ -50,7 +48,7 @@ public class NavigationBetweenViewController implements ActionListener {
|
|||||||
|
|
||||||
case "editor":
|
case "editor":
|
||||||
// New blank model for editor
|
// New blank model for editor
|
||||||
this.levelModelForEditor = new LevelModel(audioLoadHelper);
|
this.levelModelForEditor = LevelModel.createEditorLevelModel(audioLoadHelper);
|
||||||
this.levelEditorController = new LevelEditorController(this.levelModelForEditor, this);
|
this.levelEditorController = new LevelEditorController(this.levelModelForEditor, this);
|
||||||
|
|
||||||
this.levelEditorController.getLevelEditorView().setVisible(true);
|
this.levelEditorController.getLevelEditorView().setVisible(true);
|
||||||
@ -66,7 +64,7 @@ public class NavigationBetweenViewController implements ActionListener {
|
|||||||
// Reinit the levelModelForGame...
|
// Reinit the levelModelForGame...
|
||||||
pickedLevelIdentifier = this.menuView.getLevelIdentifier();
|
pickedLevelIdentifier = this.menuView.getLevelIdentifier();
|
||||||
|
|
||||||
this.levelModelForGame = new LevelModel(pickedLevelIdentifier, audioLoadHelper);
|
this.levelModelForGame = LevelModel.createGameLevelModel(pickedLevelIdentifier, audioLoadHelper);
|
||||||
this.gameController = new GameController(levelModelForGame, audioLoadHelper, this);
|
this.gameController = new GameController(levelModelForGame, audioLoadHelper, this);
|
||||||
|
|
||||||
if (levelEditorController != null) {
|
if (levelEditorController != null) {
|
||||||
|
@ -2,17 +2,8 @@ package fr.enssat.BoulderDash.helpers;
|
|||||||
|
|
||||||
import fr.enssat.BoulderDash.exceptions.UnknownModelException;
|
import fr.enssat.BoulderDash.exceptions.UnknownModelException;
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
|
import fr.enssat.BoulderDash.models.displayableElement.RockfordModel;
|
||||||
import fr.enssat.BoulderDash.models.ExpandingWallModel;
|
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
|
||||||
import fr.enssat.BoulderDash.models.RockfordModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
import fr.enssat.BoulderDash.models.EmptyModel;
|
|
||||||
import fr.enssat.BoulderDash.models.BrickWallModel;
|
|
||||||
import fr.enssat.BoulderDash.models.BoulderModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DiamondModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DirtModel;
|
|
||||||
import fr.enssat.BoulderDash.models.MagicWallModel;
|
|
||||||
import fr.enssat.BoulderDash.models.SteelWallModel;
|
|
||||||
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
@ -258,8 +249,8 @@ public class LevelLoadHelper {
|
|||||||
* @param lineIndex Position in line (vertical axis)
|
* @param lineIndex Position in line (vertical axis)
|
||||||
*/
|
*/
|
||||||
private DisplayableElementModel constructGridElement(String spriteName, int rowIndex, int lineIndex, boolean convertible) throws UnknownModelException {
|
private DisplayableElementModel constructGridElement(String spriteName, int rowIndex, int lineIndex, boolean convertible) throws UnknownModelException {
|
||||||
ModelConvertHelper modelConvert = new ModelConvertHelper();
|
ModelConvertHelper modelConvert = ModelConvertHelper.getInstance();
|
||||||
DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
|
DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
|
||||||
|
|
||||||
// Custom actions?
|
// Custom actions?
|
||||||
switch (spriteName) {
|
switch (spriteName) {
|
||||||
|
@ -3,8 +3,6 @@ package fr.enssat.BoulderDash.helpers;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@ -17,8 +15,7 @@ import org.w3c.dom.Document;
|
|||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
|
||||||
import fr.enssat.BoulderDash.models.DirtModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -320,13 +317,13 @@ public class LevelSaveHelper {
|
|||||||
|
|
||||||
// Null?
|
// Null?
|
||||||
if(curGridElement == null) {
|
if(curGridElement == null) {
|
||||||
curGridElement = new DirtModel();
|
curGridElement = DisplayableElementModel.newDirtModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retrieve current values
|
// Retrieve current values
|
||||||
groupValue = curGridElement.getGroupName();
|
groupValue = "field";
|
||||||
nameValue = curGridElement.getSpriteName();
|
nameValue = curGridElement.getSpriteName();
|
||||||
stateValue = curGridElement.getStateValue();
|
stateValue = "initial";
|
||||||
convertibleValue = curGridElement.isConvertible() ? "1" : "0";
|
convertibleValue = curGridElement.isConvertible() ? "1" : "0";
|
||||||
|
|
||||||
// Create sprite XML element
|
// Create sprite XML element
|
||||||
|
@ -2,34 +2,41 @@ package fr.enssat.BoulderDash.helpers;
|
|||||||
|
|
||||||
import fr.enssat.BoulderDash.exceptions.UnknownModelException;
|
import fr.enssat.BoulderDash.exceptions.UnknownModelException;
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.ExpandingWallModel;
|
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
|
||||||
import fr.enssat.BoulderDash.models.RockfordModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
import fr.enssat.BoulderDash.models.EmptyModel;
|
|
||||||
import fr.enssat.BoulderDash.models.BrickWallModel;
|
|
||||||
import fr.enssat.BoulderDash.models.BoulderModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DiamondModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DirtModel;
|
|
||||||
import fr.enssat.BoulderDash.models.MagicWallModel;
|
|
||||||
import fr.enssat.BoulderDash.models.SteelWallModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ModelConvertHelper
|
* ModelConvertHelper
|
||||||
*
|
|
||||||
* Provides model conversion services.
|
* Provides model conversion services.
|
||||||
*
|
*
|
||||||
* @author Valerian Saliou <valerian@valeriansaliou.name>
|
* @author Valerian Saliou <valerian@valeriansaliou.name>
|
||||||
* @since 2015-06-22
|
* @since 2015-06-22
|
||||||
*/
|
*/
|
||||||
public class ModelConvertHelper {
|
public class ModelConvertHelper {
|
||||||
|
/**
|
||||||
|
* Holds the single instance of the class.
|
||||||
|
*/
|
||||||
|
private static ModelConvertHelper instance = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Class constructor
|
||||||
*/
|
*/
|
||||||
public ModelConvertHelper() {
|
private ModelConvertHelper() {
|
||||||
// Nothing done.
|
// Nothing done.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the single instance of the ModelConvertHelper.
|
||||||
|
* Creates the instance if it doesn't exist.
|
||||||
|
*
|
||||||
|
* @return The single instance of the ModelConvertHelper.
|
||||||
|
*/
|
||||||
|
public static synchronized ModelConvertHelper getInstance() {
|
||||||
|
if (instance == null) {
|
||||||
|
instance = new ModelConvertHelper();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Gets the model associated to the string
|
* Gets the model associated to the string
|
||||||
*
|
*
|
||||||
@ -43,47 +50,47 @@ public class ModelConvertHelper {
|
|||||||
switch (spriteName) {
|
switch (spriteName) {
|
||||||
case "black":
|
case "black":
|
||||||
case "Black":
|
case "Black":
|
||||||
element = new EmptyModel();
|
element = DisplayableElementModel.newEmptyModel();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "boulder":
|
case "boulder":
|
||||||
case "Boulder":
|
case "Boulder":
|
||||||
element = new BoulderModel(isConvertible);
|
element = DisplayableElementModel.newBoulderModel(isConvertible);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "brickwall":
|
case "brickwall":
|
||||||
case "Brick Wall":
|
case "Brick Wall":
|
||||||
element = new BrickWallModel();
|
element = DisplayableElementModel.newBrickWallModel();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "diamond":
|
case "diamond":
|
||||||
case "Diamond":
|
case "Diamond":
|
||||||
element = new DiamondModel();
|
element = DisplayableElementModel.newDiamondModel();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "dirt":
|
case "dirt":
|
||||||
case "Dirt":
|
case "Dirt":
|
||||||
element = new DirtModel();
|
element = DisplayableElementModel.newDirtModel();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "magicwall":
|
case "magicwall":
|
||||||
case "Magic Wall":
|
case "Magic Wall":
|
||||||
element = new MagicWallModel();
|
element = DisplayableElementModel.newMagicWallModel();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "rockford":
|
case "rockford":
|
||||||
case "Rockford":
|
case "Rockford":
|
||||||
element = new RockfordModel();
|
element = DisplayableElementModel.newRockfordModel();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "steelwall":
|
case "steelwall":
|
||||||
case "Steel Wall":
|
case "Steel Wall":
|
||||||
element = new SteelWallModel();
|
element = DisplayableElementModel.newSteelWallModel();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "expandingwall":
|
case "expandingwall":
|
||||||
case "Expanding Wall":
|
case "Expanding Wall":
|
||||||
element = new ExpandingWallModel();
|
element = DisplayableElementModel.newExpandingWallModel();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* BoulderModel
|
|
||||||
*
|
|
||||||
* Represents the boulders.
|
|
||||||
*
|
|
||||||
* @author Colin Leverger <me@colinleverger.fr>
|
|
||||||
* @since 2015-06-19
|
|
||||||
*/
|
|
||||||
public class BoulderModel extends DisplayableElementModel {
|
|
||||||
private static String spriteName;
|
|
||||||
private static boolean isDestructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static String collideSound;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static dataset
|
|
||||||
* Specifies the physical parameters of the object
|
|
||||||
*/
|
|
||||||
static {
|
|
||||||
spriteName = "boulder";
|
|
||||||
isDestructible = false;
|
|
||||||
canMove = true;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = true;
|
|
||||||
priority = 2;
|
|
||||||
collideSound = "die";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public BoulderModel(boolean convertible) {
|
|
||||||
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, false, collideSound, convertible);
|
|
||||||
this.loadSprite(spriteName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BoulderModel() {
|
|
||||||
this(false);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* BrickWallModel
|
|
||||||
*
|
|
||||||
* Represents the brick wall in the game.
|
|
||||||
*
|
|
||||||
* @author Colin Leverger <me@colinleverger.fr>
|
|
||||||
* @since 2015-06-19
|
|
||||||
*/
|
|
||||||
public class BrickWallModel extends DisplayableElementModel {
|
|
||||||
private static String spriteName;
|
|
||||||
private static boolean isDestructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static boolean falling;
|
|
||||||
private static String collideSound;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static dataset
|
|
||||||
* Specifies the physical parameters of the object
|
|
||||||
*/
|
|
||||||
static {
|
|
||||||
spriteName = "brickwall";
|
|
||||||
isDestructible = true;
|
|
||||||
canMove = false;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = false;
|
|
||||||
priority = 3;
|
|
||||||
falling = false;
|
|
||||||
collideSound = "touch";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public BrickWallModel() {
|
|
||||||
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
|
|
||||||
this.loadSprite(spriteName);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CursorModel
|
|
||||||
*
|
|
||||||
* Represents the field cursor pointer.
|
|
||||||
*
|
|
||||||
* @author Valerian Saliou <valerian@valeriansaliou.name>
|
|
||||||
* @since 2015-06-22
|
|
||||||
*/
|
|
||||||
public class CursorModel extends DisplayableElementModel {
|
|
||||||
private static String spriteName;
|
|
||||||
private static boolean isDestructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static boolean falling;
|
|
||||||
private static String collideSound;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static dataset
|
|
||||||
* Specifies the physical parameters of the object
|
|
||||||
*/
|
|
||||||
static {
|
|
||||||
spriteName = "cursor";
|
|
||||||
isDestructible = false;
|
|
||||||
canMove = false;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = false;
|
|
||||||
priority = 0;
|
|
||||||
falling = false;
|
|
||||||
collideSound = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public CursorModel() {
|
|
||||||
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
|
|
||||||
|
|
||||||
this.loadSprite(spriteName);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DirtModel
|
|
||||||
*
|
|
||||||
* Represents the dirt in the game.
|
|
||||||
*
|
|
||||||
* @author Colin Leverger <me@colinleverger.fr>
|
|
||||||
* @since 2015-06-19
|
|
||||||
*/
|
|
||||||
public class DirtModel extends DisplayableElementModel {
|
|
||||||
private static String spriteName;
|
|
||||||
private static boolean isDestructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static boolean falling;
|
|
||||||
private static String collideSound;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static dataset
|
|
||||||
* Specifies the physical parameters of the object
|
|
||||||
*/
|
|
||||||
static {
|
|
||||||
spriteName = "dirt";
|
|
||||||
isDestructible = true;
|
|
||||||
canMove = false;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = false;
|
|
||||||
priority = 0;
|
|
||||||
falling = false;
|
|
||||||
collideSound = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public DirtModel() {
|
|
||||||
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
|
|
||||||
|
|
||||||
this.loadSprite(spriteName);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DoorModel
|
|
||||||
*
|
|
||||||
* Represents escape door.
|
|
||||||
*
|
|
||||||
* @author Colin Leverger <me@colinleverger.fr>
|
|
||||||
* @since 2015-06-19
|
|
||||||
*/
|
|
||||||
public class DoorModel extends DisplayableElementModel {
|
|
||||||
private static String spriteName;
|
|
||||||
private static boolean isDestructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static boolean falling;
|
|
||||||
private static String collideSound;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static dataset
|
|
||||||
* Specifies the physical parameters of the object
|
|
||||||
*/
|
|
||||||
static {
|
|
||||||
spriteName = "door";
|
|
||||||
isDestructible = false;
|
|
||||||
canMove = false;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = false;
|
|
||||||
priority = 0;
|
|
||||||
falling = false;
|
|
||||||
collideSound = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public DoorModel() {
|
|
||||||
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
|
|
||||||
|
|
||||||
this.loadSprite(spriteName);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EmptyModel
|
|
||||||
*
|
|
||||||
* Represents "nothing".
|
|
||||||
*
|
|
||||||
* @author Colin Leverger <me@colinleverger.fr>
|
|
||||||
* @since 2015-06-19
|
|
||||||
*/
|
|
||||||
public class EmptyModel extends DisplayableElementModel {
|
|
||||||
private static String spriteName;
|
|
||||||
private static boolean isDestructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static boolean falling;
|
|
||||||
private static String collideSound;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static dataset
|
|
||||||
* Specifies the physical parameters of the object
|
|
||||||
*/
|
|
||||||
static {
|
|
||||||
spriteName = "black";
|
|
||||||
isDestructible = false;
|
|
||||||
canMove = false;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = false;
|
|
||||||
priority = 0;
|
|
||||||
falling = false;
|
|
||||||
collideSound = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public EmptyModel() {
|
|
||||||
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
|
|
||||||
|
|
||||||
this.loadSprite(spriteName);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ExpandingWallModel
|
|
||||||
*
|
|
||||||
* Represents a ExpandingWall in the game.
|
|
||||||
*
|
|
||||||
* @author Colin Leverger <me@colinleverger.fr>
|
|
||||||
* @since 2015-06-19
|
|
||||||
*/
|
|
||||||
public class ExpandingWallModel extends DisplayableElementModel {
|
|
||||||
private static String spriteName;
|
|
||||||
private static boolean destructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static boolean falling;
|
|
||||||
private static String collideSound;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Static dataset
|
|
||||||
* Specifies the physical parameters of the object
|
|
||||||
*/
|
|
||||||
static {
|
|
||||||
spriteName = "expandingwall";
|
|
||||||
destructible = false;
|
|
||||||
canMove = false;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = false;
|
|
||||||
priority = 10;
|
|
||||||
falling = false;
|
|
||||||
collideSound = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public ExpandingWallModel() {
|
|
||||||
super(destructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
|
|
||||||
this.loadSprite(spriteName);
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,16 +5,9 @@ import fr.enssat.BoulderDash.exceptions.UnknownModelException;
|
|||||||
import fr.enssat.BoulderDash.helpers.LevelLoadHelper;
|
import fr.enssat.BoulderDash.helpers.LevelLoadHelper;
|
||||||
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
|
||||||
import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
|
import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
import fr.enssat.BoulderDash.models.displayableElement.CursorModel;
|
||||||
import fr.enssat.BoulderDash.models.RockfordModel;
|
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
|
||||||
import fr.enssat.BoulderDash.models.GameInformationModel;
|
import fr.enssat.BoulderDash.models.displayableElement.RockfordModel;
|
||||||
import fr.enssat.BoulderDash.models.SteelWallModel;
|
|
||||||
import fr.enssat.BoulderDash.models.EmptyModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DiamondModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DoorModel;
|
|
||||||
import fr.enssat.BoulderDash.models.DirtModel;
|
|
||||||
import fr.enssat.BoulderDash.models.ExpandingWallModel;
|
|
||||||
import fr.enssat.BoulderDash.models.CursorModel;
|
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
@ -48,6 +41,11 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
private boolean gamePaused;
|
private boolean gamePaused;
|
||||||
// Are we in editor or game mode ?
|
// Are we in editor or game mode ?
|
||||||
private String mode;
|
private String mode;
|
||||||
|
/**
|
||||||
|
* Gets the single instance of the ModelConvertHelper.
|
||||||
|
*/
|
||||||
|
private ModelConvertHelper modelConverter = ModelConvertHelper.getInstance();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sprite animation thread
|
* Sprite animation thread
|
||||||
@ -66,7 +64,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
* @param audioLoadHelper Audio load helper
|
* @param audioLoadHelper Audio load helper
|
||||||
* @param mode Instance mode
|
* @param mode Instance mode
|
||||||
*/
|
*/
|
||||||
public LevelModel(String levelName, AudioLoadHelper audioLoadHelper, String mode) {
|
private LevelModel(String levelName, AudioLoadHelper audioLoadHelper, String mode) {
|
||||||
this.levelName = levelName;
|
this.levelName = levelName;
|
||||||
this.audioLoadHelper = audioLoadHelper;
|
this.audioLoadHelper = audioLoadHelper;
|
||||||
this.gamePaused = false;
|
this.gamePaused = false;
|
||||||
@ -79,7 +77,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
this.sizeWidth = this.levelLoadHelper.getWidthSizeValue();
|
this.sizeWidth = this.levelLoadHelper.getWidthSizeValue();
|
||||||
this.sizeHeight = this.levelLoadHelper.getHeightSizeValue();
|
this.sizeHeight = this.levelLoadHelper.getHeightSizeValue();
|
||||||
|
|
||||||
this.cursorModel = new CursorModel();
|
this.cursorModel = DisplayableElementModel.newCursorModel();
|
||||||
this.gameInformationModel = new GameInformationModel(this.levelLoadHelper.getDiamondsToCatch());
|
this.gameInformationModel = new GameInformationModel(this.levelLoadHelper.getDiamondsToCatch());
|
||||||
|
|
||||||
this.createLimits();
|
this.createLimits();
|
||||||
@ -90,39 +88,50 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates LevelModel for existing level
|
||||||
|
*
|
||||||
|
* @param levelName Level name
|
||||||
|
* @param audioLoadHelper Audio load helper
|
||||||
|
* @param mode Instance mode
|
||||||
|
*/
|
||||||
|
public static LevelModel createExistingLevelModel(String levelName, AudioLoadHelper audioLoadHelper, String mode) {
|
||||||
|
return new LevelModel(levelName, audioLoadHelper, mode);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates LevelModel (game mode)
|
||||||
*
|
*
|
||||||
* @param levelName Level name
|
* @param levelName Level name
|
||||||
* @param audioLoadHelper Audio load helper
|
* @param audioLoadHelper Audio load helper
|
||||||
*/
|
*/
|
||||||
public LevelModel(String levelName, AudioLoadHelper audioLoadHelper) {
|
public static LevelModel createGameLevelModel(String levelName, AudioLoadHelper audioLoadHelper) {
|
||||||
this(levelName, audioLoadHelper, "game");
|
return new LevelModel(levelName, audioLoadHelper, "game");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class constructor (editor mode)
|
* Creates LevelModel (editor mode)
|
||||||
*
|
*
|
||||||
* @param audioLoadHelper Audio load helper
|
* @param audioLoadHelper Audio load helper
|
||||||
*/
|
*/
|
||||||
public LevelModel(AudioLoadHelper audioLoadHelper) {
|
public static LevelModel createEditorLevelModel(AudioLoadHelper audioLoadHelper) {
|
||||||
this.audioLoadHelper = audioLoadHelper;
|
LevelModel levelModel = new LevelModel(null, audioLoadHelper, "editor");
|
||||||
this.gameRunning = false;
|
levelModel.gameRunning = false;
|
||||||
this.mode = "editor";
|
|
||||||
|
|
||||||
this.sizeWidth = 25 + 2;
|
levelModel.sizeWidth = 25 + 2;
|
||||||
this.sizeHeight = 25 + 2;
|
levelModel.sizeHeight = 25 + 2;
|
||||||
|
|
||||||
// Generate dirt
|
// Generate dirt
|
||||||
this.groundGrid = new DisplayableElementModel[this.sizeWidth][this.sizeHeight];
|
levelModel.groundGrid = new DisplayableElementModel[levelModel.sizeWidth][levelModel.sizeHeight];
|
||||||
|
|
||||||
for (int x = 0; x < this.sizeWidth; x++) {
|
for (int x = 0; x < levelModel.sizeWidth; x++) {
|
||||||
for (int y = 0; y < this.sizeHeight; y++) {
|
for (int y = 0; y < levelModel.sizeHeight; y++) {
|
||||||
this.groundGrid[x][y] = new DirtModel();
|
levelModel.groundGrid[x][y] = DisplayableElementModel.newDirtModel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.createLimits();
|
levelModel.createLimits();
|
||||||
|
return levelModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -150,12 +159,12 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
int maxHeight = this.sizeHeight - 1;
|
int maxHeight = this.sizeHeight - 1;
|
||||||
|
|
||||||
for (int x = 0; x < this.sizeWidth; x++) {
|
for (int x = 0; x < this.sizeWidth; x++) {
|
||||||
this.groundGrid[x][0] = new SteelWallModel();
|
this.groundGrid[x][0] = DisplayableElementModel.newSteelWallModel();
|
||||||
this.groundGrid[x][maxHeight] = new SteelWallModel();
|
this.groundGrid[x][maxHeight] = DisplayableElementModel.newSteelWallModel();
|
||||||
}
|
}
|
||||||
for (int y = 0; y < this.sizeHeight; y++) {
|
for (int y = 0; y < this.sizeHeight; y++) {
|
||||||
this.groundGrid[0][y] = new SteelWallModel();
|
this.groundGrid[0][y] = DisplayableElementModel.newSteelWallModel();
|
||||||
this.groundGrid[maxWidth][y] = new SteelWallModel();
|
this.groundGrid[maxWidth][y] = DisplayableElementModel.newSteelWallModel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,7 +257,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
// Check that we are not out of bound...
|
// Check that we are not out of bound...
|
||||||
if (this.isOutOfBounds(posX, posY) == false) {
|
if (this.isOutOfBounds(posX, posY) == false) {
|
||||||
// Create a new empty model in the old pos of Rockford
|
// Create a new empty model in the old pos of Rockford
|
||||||
this.groundGrid[oldX][oldY] = new EmptyModel();
|
this.groundGrid[oldX][oldY] = DisplayableElementModel.newEmptyModel();
|
||||||
|
|
||||||
// Save the x / y pos of Rockford in the levelModel only
|
// Save the x / y pos of Rockford in the levelModel only
|
||||||
this.updateRockfordPosition(posX, posY);
|
this.updateRockfordPosition(posX, posY);
|
||||||
@ -264,7 +273,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
private void spawnExit() {
|
private void spawnExit() {
|
||||||
int x = (int) (Math.random() * (this.getSizeHeight() - 2));
|
int x = (int) (Math.random() * (this.getSizeHeight() - 2));
|
||||||
int y = (int) (Math.random() * (this.getSizeWidth() - 2));
|
int y = (int) (Math.random() * (this.getSizeWidth() - 2));
|
||||||
this.groundGrid[x + 1][y + 1] = new DoorModel();
|
this.groundGrid[x + 1][y + 1] = DisplayableElementModel.newDoorModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -283,18 +292,15 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Grab model value
|
|
||||||
ModelConvertHelper modelConverter = new ModelConvertHelper();
|
|
||||||
DisplayableElementModel targetModel;
|
|
||||||
int xPos, yPos;
|
int xPos, yPos;
|
||||||
|
|
||||||
xPos = this.getCursorXPosition();
|
xPos = this.getCursorXPosition();
|
||||||
yPos = this.getCursorYPosition();
|
yPos = this.getCursorYPosition();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
targetModel = modelConverter.toModel(blockValue, false);
|
DisplayableElementModel targetModel = modelConverter.toModel(blockValue, false);
|
||||||
|
|
||||||
// Apply new model in place of cursor
|
// Apply new model in place of cursor
|
||||||
this.groundGrid[xPos + 1][yPos + 1] = targetModel;
|
this.groundGrid[xPos + 1][yPos + 1] = targetModel;
|
||||||
|
|
||||||
// Disable cursor (important)
|
// Disable cursor (important)
|
||||||
@ -344,7 +350,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
DisplayableElementModel elementModel = this.getDisplayableElement(x, y);
|
DisplayableElementModel elementModel = this.getDisplayableElement(x, y);
|
||||||
|
|
||||||
if(elementModel == null) {
|
if(elementModel == null) {
|
||||||
return new DirtModel().getSprite();
|
return DisplayableElementModel.newDirtModel().getSprite();
|
||||||
}
|
}
|
||||||
|
|
||||||
return elementModel.getSprite();
|
return elementModel.getSprite();
|
||||||
@ -358,7 +364,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
public BufferedImage getCursorImage() {
|
public BufferedImage getCursorImage() {
|
||||||
|
|
||||||
if (this.cursorModel == null) {
|
if (this.cursorModel == null) {
|
||||||
this.cursorModel = new CursorModel();
|
this.cursorModel = DisplayableElementModel.newCursorModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.cursorModel.getSprite();
|
return this.cursorModel.getSprite();
|
||||||
@ -481,7 +487,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
*/
|
*/
|
||||||
public void updateSprites(int x, int y) {
|
public void updateSprites(int x, int y) {
|
||||||
if(groundGrid[x][y] == null) {
|
if(groundGrid[x][y] == null) {
|
||||||
groundGrid[x][y] = new DirtModel();
|
groundGrid[x][y] = DisplayableElementModel.newDirtModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
groundGrid[x][y].update(System.currentTimeMillis());
|
groundGrid[x][y].update(System.currentTimeMillis());
|
||||||
@ -650,15 +656,15 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
* @param y Object vertical position
|
* @param y Object vertical position
|
||||||
*/
|
*/
|
||||||
public void exploseGround(int x, int y) {
|
public void exploseGround(int x, int y) {
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x + 1][y] = new EmptyModel();
|
this.groundGrid[x + 1][y] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x - 1][y] = new EmptyModel();
|
this.groundGrid[x - 1][y] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x][y + 1] = new EmptyModel();
|
this.groundGrid[x][y + 1] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x + 1][y + 1] = new EmptyModel();
|
this.groundGrid[x + 1][y + 1] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x - 1][y + 1] = new EmptyModel();
|
this.groundGrid[x - 1][y + 1] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x][y - 1] = new EmptyModel();
|
this.groundGrid[x][y - 1] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x + 1][y - 1] = new EmptyModel();
|
this.groundGrid[x + 1][y - 1] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x - 1][y - 1] = new EmptyModel();
|
this.groundGrid[x - 1][y - 1] = DisplayableElementModel.newEmptyModel();
|
||||||
this.rockford.setHasExplosed(true);
|
this.rockford.setHasExplosed(true);
|
||||||
|
|
||||||
// Again a sleep to notify the observers properly
|
// Again a sleep to notify the observers properly
|
||||||
@ -680,7 +686,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
public void makeThisDisplayableElementFall(int x, int y) {
|
public void makeThisDisplayableElementFall(int x, int y) {
|
||||||
this.groundGrid[x][y].setFalling(true);
|
this.groundGrid[x][y].setFalling(true);
|
||||||
this.groundGrid[x][y + 1] = this.groundGrid[x][y];
|
this.groundGrid[x][y + 1] = this.groundGrid[x][y];
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -692,7 +698,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
public void makeThisBoulderSlideLeft(int x, int y) {
|
public void makeThisBoulderSlideLeft(int x, int y) {
|
||||||
this.groundGrid[x][y].setFalling(true);
|
this.groundGrid[x][y].setFalling(true);
|
||||||
this.groundGrid[x - 1][y + 1] = this.groundGrid[x][y];
|
this.groundGrid[x - 1][y + 1] = this.groundGrid[x][y];
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -704,7 +710,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
public void makeThisBoulderSlideRight(int x, int y) {
|
public void makeThisBoulderSlideRight(int x, int y) {
|
||||||
this.groundGrid[x][y].setFalling(true);
|
this.groundGrid[x][y].setFalling(true);
|
||||||
this.groundGrid[x + 1][y + 1] = this.groundGrid[x][y];
|
this.groundGrid[x + 1][y + 1] = this.groundGrid[x][y];
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -714,8 +720,8 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
* @param y Object vertical position
|
* @param y Object vertical position
|
||||||
*/
|
*/
|
||||||
public void transformThisBoulderIntoADiamond(int x, int y) {
|
public void transformThisBoulderIntoADiamond(int x, int y) {
|
||||||
this.groundGrid[x][y + 2] = new DiamondModel();
|
this.groundGrid[x][y + 2] = DisplayableElementModel.newDiamondModel();
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -726,7 +732,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
*/
|
*/
|
||||||
public void moveThisBoulderToRight(int x, int y) {
|
public void moveThisBoulderToRight(int x, int y) {
|
||||||
this.groundGrid[x + 1][y] = this.groundGrid[x][y];
|
this.groundGrid[x + 1][y] = this.groundGrid[x][y];
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -737,7 +743,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
*/
|
*/
|
||||||
public void moveThisBoulderToLeft(int x, int y) {
|
public void moveThisBoulderToLeft(int x, int y) {
|
||||||
this.groundGrid[x - 1][y] = this.groundGrid[x][y];
|
this.groundGrid[x - 1][y] = this.groundGrid[x][y];
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -747,7 +753,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
* @param y Object vertical position
|
* @param y Object vertical position
|
||||||
*/
|
*/
|
||||||
public void deleteThisBoulder(int x, int y) {
|
public void deleteThisBoulder(int x, int y) {
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -766,8 +772,8 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
* @param y
|
* @param y
|
||||||
*/
|
*/
|
||||||
public void exploseThisBrickWall(int x, int y) {
|
public void exploseThisBrickWall(int x, int y) {
|
||||||
this.groundGrid[x][y] = new EmptyModel();
|
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
|
||||||
this.groundGrid[x][y + 1] = new EmptyModel();
|
this.groundGrid[x][y + 1] = DisplayableElementModel.newEmptyModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -777,7 +783,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
* @param y
|
* @param y
|
||||||
*/
|
*/
|
||||||
public void expandThisWallToLeft(int x, int y) {
|
public void expandThisWallToLeft(int x, int y) {
|
||||||
this.groundGrid[x - 1][y] = new ExpandingWallModel();
|
this.groundGrid[x - 1][y] = DisplayableElementModel.newExpandingWallModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -787,7 +793,7 @@ public class LevelModel extends Observable implements Runnable {
|
|||||||
* @param y
|
* @param y
|
||||||
*/
|
*/
|
||||||
public void expandThisWallToRight(int x, int y) {
|
public void expandThisWallToRight(int x, int y) {
|
||||||
this.groundGrid[x + 1][y] = new ExpandingWallModel();
|
this.groundGrid[x + 1][y] = DisplayableElementModel.newExpandingWallModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SteelWallModel
|
|
||||||
*
|
|
||||||
* Represents the steelWall
|
|
||||||
*
|
|
||||||
* @author Colin Leverger <me@colinleverger.fr>
|
|
||||||
* @since 2015-06-19
|
|
||||||
*/
|
|
||||||
public class SteelWallModel extends DisplayableElementModel {
|
|
||||||
private static String spriteName;
|
|
||||||
private static boolean isDestructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static boolean falling;
|
|
||||||
private static String collideSound;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static dataset
|
|
||||||
* Specifies the physical parameters of the object
|
|
||||||
*/
|
|
||||||
static {
|
|
||||||
spriteName = "steelwall";
|
|
||||||
isDestructible = false;
|
|
||||||
canMove = false;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = false;
|
|
||||||
priority = 3;
|
|
||||||
falling = false;
|
|
||||||
collideSound = "touch";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public SteelWallModel() {
|
|
||||||
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
|
|
||||||
this.loadSprite(spriteName);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,22 @@
|
|||||||
|
package fr.enssat.BoulderDash.models.displayableElement;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BoulderModel
|
||||||
|
*
|
||||||
|
* Represents the boulders.
|
||||||
|
*
|
||||||
|
* @author Colin Leverger <me@colinleverger.fr>
|
||||||
|
* @since 2015-06-19
|
||||||
|
*/
|
||||||
|
public class BoulderModel extends DisplayableElementModel {
|
||||||
|
BoulderModel(boolean convertible) {
|
||||||
|
super("boulder", false,true);
|
||||||
|
setPriority(2);
|
||||||
|
setAnimate(true);
|
||||||
|
setCollideSound("die");
|
||||||
|
setConvertibleValue(convertible);
|
||||||
|
|
||||||
|
loadSprite("boulder");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package fr.enssat.BoulderDash.models.displayableElement;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BrickWallModel
|
||||||
|
*
|
||||||
|
* Represents the brick wall in the game.
|
||||||
|
*
|
||||||
|
* @author Colin Leverger <me@colinleverger.fr>
|
||||||
|
* @since 2015-06-19
|
||||||
|
*/
|
||||||
|
public class BrickWallModel extends DisplayableElementModel {
|
||||||
|
BrickWallModel() {
|
||||||
|
super("brickwall", true, false);
|
||||||
|
setPriority(3);
|
||||||
|
setCollideSound("touch");
|
||||||
|
|
||||||
|
loadSprite("brickwall");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package fr.enssat.BoulderDash.models.displayableElement;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CursorModel
|
||||||
|
*
|
||||||
|
* Represents the field cursor pointer.
|
||||||
|
*
|
||||||
|
* @author Valerian Saliou <valerian@valeriansaliou.name>
|
||||||
|
* @since 2015-06-22
|
||||||
|
*/
|
||||||
|
public class CursorModel extends DisplayableElementModel {
|
||||||
|
CursorModel() {
|
||||||
|
super("cursor");
|
||||||
|
this.loadSprite("cursor");
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,8 @@
|
|||||||
package fr.enssat.BoulderDash.models;
|
package fr.enssat.BoulderDash.models.displayableElement;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DiamondModel
|
* DiamondModel
|
||||||
@ -15,13 +13,6 @@ import fr.enssat.BoulderDash.models.DisplayableElementModel;
|
|||||||
* @since 2015-06-19
|
* @since 2015-06-19
|
||||||
*/
|
*/
|
||||||
public class DiamondModel extends DisplayableElementModel {
|
public class DiamondModel extends DisplayableElementModel {
|
||||||
private static String spriteName;
|
|
||||||
private static boolean isDestructible;
|
|
||||||
private static boolean canMove;
|
|
||||||
private static boolean impactExplosive;
|
|
||||||
private static boolean animate;
|
|
||||||
private static int priority;
|
|
||||||
private static String collideSound;
|
|
||||||
private long previousTime;
|
private long previousTime;
|
||||||
private int currentFrame;
|
private int currentFrame;
|
||||||
|
|
||||||
@ -31,30 +22,15 @@ public class DiamondModel extends DisplayableElementModel {
|
|||||||
|
|
||||||
private ArrayList<BufferedImage> framesDiamond;
|
private ArrayList<BufferedImage> framesDiamond;
|
||||||
|
|
||||||
/**
|
DiamondModel() {
|
||||||
* Static dataset
|
super("diamond", true, true);
|
||||||
* Specifies the physical parameters of the object
|
setAnimate(true);
|
||||||
*/
|
setCollideSound("coin");
|
||||||
static {
|
|
||||||
spriteName = "diamond";
|
|
||||||
isDestructible = true;
|
|
||||||
canMove = true;
|
|
||||||
impactExplosive = false;
|
|
||||||
animate = true;
|
|
||||||
priority = 0;
|
|
||||||
collideSound = "coin";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
public DiamondModel() {
|
|
||||||
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, false, collideSound);
|
|
||||||
|
|
||||||
this.initSprites();
|
this.initSprites();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the sprite (animation loop)
|
* Updates the sprite (animation loop)
|
||||||
*
|
*
|
||||||
* @param time Current time
|
* @param time Current time
|
@ -0,0 +1,18 @@
|
|||||||
|
package fr.enssat.BoulderDash.models.displayableElement;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DirtModel
|
||||||
|
*
|
||||||
|
* Represents the dirt in the game.
|
||||||
|
*
|
||||||
|
* @author Colin Leverger <me@colinleverger.fr>
|
||||||
|
* @since 2015-06-19
|
||||||
|
*/
|
||||||
|
public class DirtModel extends DisplayableElementModel {
|
||||||
|
DirtModel() {
|
||||||
|
super("dirt", true, false);
|
||||||
|
|
||||||
|
this.loadSprite("dirt");
|
||||||
|
}
|
||||||
|
}
|