Remove spanish class names
Implement restart Make sure all objectives are reachable Optimize code Signed-off-by: Chris Cromer <chris@cromer.cl>
This commit is contained in:
parent
9f6d6853ad
commit
f7adc8551e
@ -76,9 +76,13 @@ task createDocs {
|
||||
}
|
||||
|
||||
distributions {
|
||||
//noinspection GroovyAssignabilityCheck
|
||||
main {
|
||||
//noinspection GrUnresolvedAccess
|
||||
contents {
|
||||
//noinspection GrUnresolvedAccess
|
||||
from(createDocs) {
|
||||
//noinspection GrUnresolvedAccess
|
||||
into 'docs'
|
||||
}
|
||||
}
|
||||
|
@ -21,18 +21,41 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* The main class of the game
|
||||
*/
|
||||
public class Azaraka implements Constantes {
|
||||
public class Azaraka implements Constants {
|
||||
/**
|
||||
* The main window
|
||||
*/
|
||||
private MainWindow mainWindow;
|
||||
/**
|
||||
* The logger
|
||||
*/
|
||||
private final Logger logger;
|
||||
|
||||
/**
|
||||
* Initialize the main class
|
||||
* The main game class
|
||||
*/
|
||||
private Azaraka() {
|
||||
Logger logger = getLogger(this.getClass(), LogLevel.MAIN);
|
||||
logger = getLogger(this.getClass(), LogLevel.MAIN);
|
||||
start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Restart the game
|
||||
*/
|
||||
public void restart() {
|
||||
mainWindow.removeAll();
|
||||
mainWindow.dispose();
|
||||
start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the main game window to start
|
||||
*/
|
||||
private void start() {
|
||||
logger.info("Load main window");
|
||||
VentanaPrincipal ventanaPrincipal = new VentanaPrincipal();
|
||||
ventanaPrincipal.setVisible(true);
|
||||
ventanaPrincipal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
mainWindow = new MainWindow(this);
|
||||
mainWindow.setVisible(true);
|
||||
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -41,6 +64,15 @@ public class Azaraka implements Constantes {
|
||||
* @param args The arguments passed to the application
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
int validCells = (HORIZONTAL_CELLS - 2) * (VERTICAL_CELLS - 2);
|
||||
validCells = validCells - ENEMIES;
|
||||
validCells = validCells - (CHESTS * 2);
|
||||
validCells = validCells - OBSTACLES;
|
||||
if (validCells < 10) {
|
||||
// This is to prevent a possible infinite loop
|
||||
System.out.println("Not enough valid cells: " + validCells + "!");
|
||||
System.exit(0);
|
||||
}
|
||||
new Azaraka();
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,11 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* This class extends the canvas to make drawing and listening easier
|
||||
*/
|
||||
public class Lienzo extends Canvas implements Constantes {
|
||||
public class Canvas extends java.awt.Canvas implements Constants {
|
||||
/**
|
||||
* The main window
|
||||
*/
|
||||
private final Azaraka azaraka;
|
||||
/**
|
||||
* The current volume
|
||||
*/
|
||||
@ -94,7 +98,7 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
/**
|
||||
* The game scene
|
||||
*/
|
||||
private Escenario escenario;
|
||||
private Scene scene;
|
||||
/**
|
||||
* The sound played when a key is picked up
|
||||
*/
|
||||
@ -155,11 +159,13 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
/**
|
||||
* Initialize the canvas
|
||||
*
|
||||
* @param azaraka The main window
|
||||
* @param width The width to set the canvas
|
||||
* @param height The width to set the canvas
|
||||
*/
|
||||
public Lienzo(int width, int height) {
|
||||
public Canvas(Azaraka azaraka, int width, int height) {
|
||||
logger = getLogger(this.getClass(), LogLevel.LIENZO);
|
||||
this.azaraka = azaraka;
|
||||
|
||||
setSize(width, height);
|
||||
leftMargin = (width - CELL_PIXELS * HORIZONTAL_CELLS) / 2;
|
||||
@ -185,25 +191,25 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
gameOverAnimation = new Animation();
|
||||
gameOverAnimation.addImage(Animation.Direction.NONE, "/img/gameover/gameover.png");
|
||||
|
||||
escenario = new Escenario(this);
|
||||
scene = new Scene(this);
|
||||
|
||||
ArrayList<Object> objectList = escenario.generateRandomObjects();
|
||||
ArrayList<Object> objectList = scene.generateRandomObjects();
|
||||
while (objectList == null) {
|
||||
escenario = new Escenario(this);
|
||||
objectList = escenario.generateRandomObjects();
|
||||
scene = new Scene(this);
|
||||
objectList = scene.generateRandomObjects();
|
||||
}
|
||||
|
||||
escenario.setDoorSound(doorSound);
|
||||
scene.setDoorSound(doorSound);
|
||||
setBackground(Color.black);
|
||||
|
||||
Enemy.Direction enemyDirection = Enemy.Direction.DOWN;
|
||||
|
||||
// Create the gems and later place them in 2 of the chests
|
||||
ArrayList<Gem> gems = new ArrayList<>();
|
||||
Gem lifeGem = new Gem(escenario, new Celda(0, 0, 0, 0));
|
||||
Gem lifeGem = new Gem(scene, new Cell(0, 0, 0, 0));
|
||||
lifeGem.setSound(getGemSound);
|
||||
lifeGem.setType(Gem.Type.LIFE);
|
||||
Gem deathGem = new Gem(escenario, new Celda(0, 0, 0, 0));
|
||||
Gem deathGem = new Gem(scene, new Cell(0, 0, 0, 0));
|
||||
deathGem.setSound(getGemSound);
|
||||
deathGem.setType(Gem.Type.DEATH);
|
||||
gems.add(lifeGem);
|
||||
@ -211,12 +217,12 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
|
||||
for (Object object : objectList) {
|
||||
if (object instanceof Player) {
|
||||
object.getCelda().setObject(object);
|
||||
object.getCell().setObject(object);
|
||||
player = (Player) object;
|
||||
threads.put(object, new Thread(object));
|
||||
}
|
||||
else if (object instanceof Enemy) {
|
||||
object.getCelda().setObject(object);
|
||||
object.getCell().setObject(object);
|
||||
if (enemyDirection == Enemy.Direction.UP) {
|
||||
enemyDirection = Enemy.Direction.DOWN;
|
||||
}
|
||||
@ -235,12 +241,12 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
threads.put(object, new Thread(object));
|
||||
}
|
||||
else if (object instanceof Chest) {
|
||||
object.getCelda().setObject(object);
|
||||
object.getCell().setObject(object);
|
||||
((Chest) object).setSound(openChestSound);
|
||||
if (gems.size() > 0) {
|
||||
Gem gem = gems.get(0);
|
||||
// Place the gem in the cell above the chest, but don't add it to object2 until we are ready to draw it
|
||||
gem.setCelda(escenario.getCeldas()[object.getCelda().getX()][object.getCelda().getY() - 1]);
|
||||
gem.setCell(scene.getCells()[object.getCell().getX()][object.getCell().getY() - 1]);
|
||||
threads.put(gem, new Thread(gem));
|
||||
((Chest) object).setGem(gem);
|
||||
gems.remove(gem);
|
||||
@ -249,13 +255,13 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
threads.put(object, new Thread(object));
|
||||
}
|
||||
else if (object instanceof Key) {
|
||||
object.getCelda().setObjectOnBottom(object);
|
||||
object.getCell().setObjectOnBottom(object);
|
||||
((Key) object).setSound(getKeySound);
|
||||
keys.add((Key) object);
|
||||
threads.put(object, new Thread(object));
|
||||
}
|
||||
else if (object instanceof Portal) {
|
||||
object.getCelda().setObjectOnBottom(object);
|
||||
object.getCell().setObjectOnBottom(object);
|
||||
portal = (Portal) object;
|
||||
portal.setSound(portalSound);
|
||||
threads.put(object, new Thread(object));
|
||||
@ -293,11 +299,11 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
// Shuffle the chests so that the AI doesn't open the correct chests on the first go
|
||||
Collections.shuffle(chests, new Random(23));
|
||||
for (Chest chest : chests) {
|
||||
player.getAi().addDestination(new State(chest.getCelda().getX(), chest.getCelda().getY() + 1, State.Type.CHEST, null, 1));
|
||||
player.getAi().addDestination(new State(chest.getCell().getX(), chest.getCell().getY() + 1, State.Type.CHEST, null, 1));
|
||||
}
|
||||
|
||||
for (Key key : keys) {
|
||||
player.getAi().addDestination(new State(key.getCelda().getX(), key.getCelda().getY(), State.Type.KEY, null, 0));
|
||||
player.getAi().addDestination(new State(key.getCell().getX(), key.getCell().getY(), State.Type.KEY, null, 0));
|
||||
}
|
||||
|
||||
Thread thread = new Thread(player.getAi());
|
||||
@ -376,6 +382,16 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
|
||||
if (gameOver) {
|
||||
if (!gameOverRan) {
|
||||
addKeyListener(new KeyAdapter() {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent event) {
|
||||
super.keyPressed(event);
|
||||
if (event.getKeyCode() == KeyEvent.VK_ENTER) {
|
||||
azaraka.restart();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
stopBackgroundMusic();
|
||||
|
||||
try {
|
||||
@ -410,7 +426,7 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
}
|
||||
}
|
||||
else {
|
||||
escenario.paintComponent(graphicBuffer);
|
||||
scene.paintComponent(graphicBuffer);
|
||||
|
||||
if (won) {
|
||||
int alpha = (255 * 75) / 100; // 75% transparent
|
||||
@ -427,6 +443,16 @@ public class Lienzo extends Canvas implements Constantes {
|
||||
int x = rectangle.x + (rectangle.width - metrics.stringWidth(message)) / 2;
|
||||
int y = rectangle.y + ((rectangle.height - metrics.getHeight()) / 2) + metrics.getAscent();
|
||||
graphicBuffer.drawString(message, x, y);
|
||||
|
||||
addKeyListener(new KeyAdapter() {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent event) {
|
||||
super.keyPressed(event);
|
||||
if (event.getKeyCode() == KeyEvent.VK_ENTER) {
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ import java.util.Map;
|
||||
/**
|
||||
* This class is a cell that will contain a game element such as a player, enemy, prize, etc
|
||||
*/
|
||||
public class Celda extends JComponent implements Constantes {
|
||||
public class Cell extends JComponent implements Constants {
|
||||
/**
|
||||
* The x graphical coordinate of the cell
|
||||
*/
|
||||
@ -69,7 +69,7 @@ public class Celda extends JComponent implements Constantes {
|
||||
* @param x The x coordinate of the cell
|
||||
* @param y The y coordinate of the cell
|
||||
*/
|
||||
public Celda(int xPixels, int yPixels, int x, int y) {
|
||||
public Cell(int xPixels, int yPixels, int x, int y) {
|
||||
this.xPixels = xPixels;
|
||||
this.yPixels = yPixels;
|
||||
this.x = x;
|
@ -29,7 +29,7 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* Constants used in the game
|
||||
*/
|
||||
public interface Constantes {
|
||||
public interface Constants {
|
||||
/**
|
||||
* The name of the game
|
||||
*/
|
||||
@ -37,7 +37,7 @@ public interface Constantes {
|
||||
/**
|
||||
* Whether or not the player should be controlled by AI
|
||||
*/
|
||||
boolean PLAYER_AI = false;
|
||||
boolean PLAYER_AI = true;
|
||||
/**
|
||||
* Make logs
|
||||
*/
|
||||
@ -55,11 +55,11 @@ public interface Constantes {
|
||||
*/
|
||||
int CELL_PIXELS = 64;
|
||||
/**
|
||||
* The number of cells to draw horizontally, minimum 8
|
||||
* The number of cells to draw horizontally
|
||||
*/
|
||||
int HORIZONTAL_CELLS = 16;
|
||||
/**
|
||||
* The number of cells to draw vertically, minimum 8
|
||||
* The number of cells to draw vertically
|
||||
*/
|
||||
int VERTICAL_CELLS = 9;
|
||||
/**
|
@ -25,12 +25,14 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* The main window of the game
|
||||
*/
|
||||
public class VentanaPrincipal extends JFrame implements Constantes {
|
||||
public class MainWindow extends JFrame implements Constants {
|
||||
|
||||
/**
|
||||
* Initialize the main window
|
||||
*
|
||||
* @param azaraka The main game class
|
||||
*/
|
||||
public VentanaPrincipal() {
|
||||
public MainWindow(Azaraka azaraka) {
|
||||
Logger logger = getLogger(this.getClass(), LogLevel.VENTANA_PRINCIPAL);
|
||||
|
||||
logger.info("Create panels");
|
||||
@ -52,7 +54,7 @@ public class VentanaPrincipal extends JFrame implements Constantes {
|
||||
logger.warning(e.getMessage());
|
||||
}
|
||||
|
||||
Lienzo canvas = new Lienzo(screenSize.width, screenSize.height - 50);
|
||||
Canvas canvas = new Canvas(azaraka, screenSize.width, screenSize.height - 50);
|
||||
canvas.setFocusable(true);
|
||||
canvas.requestFocus();
|
||||
add(canvas);
|
@ -17,7 +17,6 @@ package cl.cromer.azaraka;
|
||||
|
||||
import cl.cromer.azaraka.ai.BreadthFirstSearch;
|
||||
import cl.cromer.azaraka.ai.State;
|
||||
import cl.cromer.azaraka.json.Cell;
|
||||
import cl.cromer.azaraka.json.Json;
|
||||
import cl.cromer.azaraka.object.Object;
|
||||
import cl.cromer.azaraka.object.*;
|
||||
@ -42,15 +41,15 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* The scene used for the game
|
||||
*/
|
||||
public class Escenario extends JComponent implements Constantes {
|
||||
public class Scene extends JComponent implements Constants {
|
||||
/**
|
||||
* The canvas
|
||||
*/
|
||||
private final Lienzo canvas;
|
||||
private final Canvas canvas;
|
||||
/**
|
||||
* The cells of the game
|
||||
*/
|
||||
private final Celda[][] celdas;
|
||||
private final Cell[][] cells;
|
||||
/**
|
||||
* The logger
|
||||
*/
|
||||
@ -67,22 +66,18 @@ public class Escenario extends JComponent implements Constantes {
|
||||
* The sound the door makes
|
||||
*/
|
||||
private Sound doorSound;
|
||||
/**
|
||||
* The amount of tries before giving up
|
||||
*/
|
||||
private int tries = 0;
|
||||
|
||||
/**
|
||||
* Initialize the scene
|
||||
*
|
||||
* @param canvas The canvas that this scene is in
|
||||
*/
|
||||
public Escenario(Lienzo canvas) {
|
||||
public Scene(Canvas canvas) {
|
||||
logger = getLogger(this.getClass(), LogLevel.ESCENARIO);
|
||||
this.canvas = canvas;
|
||||
loadTextures();
|
||||
|
||||
celdas = new Celda[HORIZONTAL_CELLS][VERTICAL_CELLS];
|
||||
cells = new Cell[HORIZONTAL_CELLS][VERTICAL_CELLS];
|
||||
|
||||
if (GENERATE_SCENE) {
|
||||
generateScene();
|
||||
@ -106,7 +101,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
|
||||
if (EXPORT_SCENE) {
|
||||
Json json = new Json();
|
||||
json.exportScene(celdas);
|
||||
json.exportScene(cells);
|
||||
}
|
||||
}
|
||||
|
||||
@ -118,37 +113,37 @@ public class Escenario extends JComponent implements Constantes {
|
||||
private void loadScene(String json) {
|
||||
GsonBuilder gsonBuilder = new GsonBuilder();
|
||||
Gson gson = gsonBuilder.create();
|
||||
Cell[][] cells = gson.fromJson(json, Cell[][].class);
|
||||
cl.cromer.azaraka.json.Cell[][] cells = gson.fromJson(json, cl.cromer.azaraka.json.Cell[][].class);
|
||||
|
||||
for (int x = 0; x < cells.length; x++) {
|
||||
for (int y = 0; y < cells[x].length; y++) {
|
||||
celdas[x][y] = new Celda((x * CELL_PIXELS) + canvas.getLeftMargin(), (y * CELL_PIXELS) + canvas.getTopMargin(), x, y);
|
||||
this.cells[x][y] = new Cell((x * CELL_PIXELS) + canvas.getLeftMargin(), (y * CELL_PIXELS) + canvas.getTopMargin(), x, y);
|
||||
|
||||
if (cells[x][y].type.equals(Player.class.getName())) {
|
||||
celdas[x][y].setObject(new Player(null, celdas[x][y]));
|
||||
this.cells[x][y].setObject(new Player(null, this.cells[x][y]));
|
||||
}
|
||||
else if (cells[x][y].type.equals(Enemy.class.getName())) {
|
||||
celdas[x][y].setObject(new Enemy(null, celdas[x][y], null));
|
||||
this.cells[x][y].setObject(new Enemy(null, this.cells[x][y], null));
|
||||
}
|
||||
else if (cells[x][y].type.equals(Chest.class.getName())) {
|
||||
celdas[x][y].setObject(new Chest(null, celdas[x][y]));
|
||||
this.cells[x][y].setObject(new Chest(null, this.cells[x][y]));
|
||||
}
|
||||
else if (cells[x][y].type.equals(Gem.class.getName())) {
|
||||
celdas[x][y].setObject(new Gem(null, celdas[x][y]));
|
||||
this.cells[x][y].setObject(new Gem(null, this.cells[x][y]));
|
||||
}
|
||||
else if (cells[x][y].type.equals(Key.class.getName())) {
|
||||
celdas[x][y].setObject(new Key(null, celdas[x][y]));
|
||||
this.cells[x][y].setObject(new Key(null, this.cells[x][y]));
|
||||
}
|
||||
else if (cells[x][y].type.equals(Obstacle.class.getName())) {
|
||||
celdas[x][y].setObject(new Obstacle(null, celdas[x][y]));
|
||||
this.cells[x][y].setObject(new Obstacle(null, this.cells[x][y]));
|
||||
}
|
||||
else if (cells[x][y].type.equals(Portal.class.getName())) {
|
||||
celdas[x][y].setObject(new Portal(null, celdas[x][y]));
|
||||
this.cells[x][y].setObject(new Portal(null, this.cells[x][y]));
|
||||
}
|
||||
|
||||
for (int k = 0; k < cells[x][y].textures.size(); k++) {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(cells[x][y].textures.get(k)), cells[x][y].textures.get(k));
|
||||
this.cells[x][y].addTexture(textureSheet.getTexture(cells[x][y].textures.get(k)), cells[x][y].textures.get(k));
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -168,17 +163,15 @@ public class Escenario extends JComponent implements Constantes {
|
||||
ArrayList<Object> objectArrayList = new ArrayList<>();
|
||||
|
||||
// The player has a fixed position
|
||||
celdas[2][1].setObject(new Player(this, celdas[2][1]));
|
||||
objectArrayList.add(celdas[2][1].getObject());
|
||||
cells[2][1].setObject(new Player(this, cells[2][1]));
|
||||
objectArrayList.add(cells[2][1].getObject());
|
||||
|
||||
for (int i = 0; i < OBSTACLES; i++) {
|
||||
random = randomCoordinates(false);
|
||||
if (random[0] == -1 || random[1] == -1) {
|
||||
return null;
|
||||
}
|
||||
celdas[random[0]][random[1]].setObject(new Obstacle(this, celdas[random[0]][random[1]]));
|
||||
random = randomCoordinates();
|
||||
cells[random[0]][random[1]].setObject(new Obstacle(this, cells[random[0]][random[1]]));
|
||||
objectArrayList.add(cells[random[0]][random[1]].getObject());
|
||||
try {
|
||||
celdas[random[0]][random[1]].addTexture(textureSheet.getTexture(30), 30);
|
||||
cells[random[0]][random[1]].addTexture(textureSheet.getTexture(30), 30);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -187,105 +180,90 @@ public class Escenario extends JComponent implements Constantes {
|
||||
|
||||
final Lock lock = new ReentrantLock(true);
|
||||
for (int i = 0; i < ENEMIES; i++) {
|
||||
random = randomCoordinates(true);
|
||||
if (random[0] == -1 || random[1] == -1) {
|
||||
return null;
|
||||
}
|
||||
celdas[random[0]][random[1]].setObject(new Enemy(this, celdas[random[0]][random[1]], lock));
|
||||
objectArrayList.add(celdas[random[0]][random[1]].getObject());
|
||||
random = randomCoordinates();
|
||||
cells[random[0]][random[1]].setObject(new Enemy(this, cells[random[0]][random[1]], lock));
|
||||
objectArrayList.add(cells[random[0]][random[1]].getObject());
|
||||
}
|
||||
|
||||
random = randomCoordinates(true);
|
||||
if (random[0] == -1 || random[1] == -1) {
|
||||
return null;
|
||||
}
|
||||
celdas[random[0]][random[1]].setObjectOnBottom(new Portal(this, celdas[random[0]][random[1]]));
|
||||
objectArrayList.add(celdas[random[0]][random[1]].getObjectOnBottom());
|
||||
random = randomCoordinates();
|
||||
cells[random[0]][random[1]].setObjectOnBottom(new Portal(this, cells[random[0]][random[1]]));
|
||||
objectArrayList.add(cells[random[0]][random[1]].getObjectOnBottom());
|
||||
|
||||
// Generate enough keys for the chests that will exist
|
||||
for (int i = 0; i < CHESTS; i++) {
|
||||
random = randomCoordinates(true);
|
||||
if (random[0] == -1 || random[1] == -1) {
|
||||
return null;
|
||||
}
|
||||
celdas[random[0]][random[1]].setObjectOnBottom(new Key(this, celdas[random[0]][random[1]]));
|
||||
objectArrayList.add(celdas[random[0]][random[1]].getObjectOnBottom());
|
||||
random = randomCoordinates();
|
||||
cells[random[0]][random[1]].setObjectOnBottom(new Key(this, cells[random[0]][random[1]]));
|
||||
objectArrayList.add(cells[random[0]][random[1]].getObjectOnBottom());
|
||||
}
|
||||
|
||||
// Chests need to be last to make sure they are openable
|
||||
for (int i = 0; i < CHESTS; i++) {
|
||||
tries = 0;
|
||||
int random_x = random(0, HORIZONTAL_CELLS - 1);
|
||||
int random_y = random(0, VERTICAL_CELLS - 1);
|
||||
// Don't put a chest if it can't be opened
|
||||
while (random_y + 1 == VERTICAL_CELLS ||
|
||||
celdas[random_x][random_y].containsObject() ||
|
||||
celdas[random_x][random_y + 1].containsObject() ||
|
||||
celdas[random_x][random_y - 1].containsObject() ||
|
||||
checkBreadthFirst(random_x, random_y + 1)) {
|
||||
cells[random_x][random_y].containsObject() ||
|
||||
cells[random_x][random_y + 1].containsObject()) {
|
||||
random_x = random(0, HORIZONTAL_CELLS - 1);
|
||||
random_y = random(0, VERTICAL_CELLS - 1);
|
||||
tries++;
|
||||
if (tries == HORIZONTAL_CELLS) {
|
||||
random[0] = -1;
|
||||
random[1] = -1;
|
||||
break;
|
||||
}
|
||||
cells[random_x][random_y].setObject(new Chest(this, cells[random_x][random_y]));
|
||||
objectArrayList.add(cells[random_x][random_y].getObject());
|
||||
}
|
||||
|
||||
for (Object object : objectArrayList) {
|
||||
if (object instanceof Chest) {
|
||||
int x = object.getCell().getX();
|
||||
int y = object.getCell().getY();
|
||||
if (pathInvalid(x, y + 1)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (random[0] == -1 || random[1] == -1) {
|
||||
return null;
|
||||
else if (object instanceof Portal || object instanceof Key) {
|
||||
int x = object.getCell().getX();
|
||||
int y = object.getCell().getY();
|
||||
if (pathInvalid(x, y)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
celdas[random_x][random_y].setObjectOnBottom(new Chest(this, celdas[random_x][random_y]));
|
||||
objectArrayList.add(celdas[random_x][random_y].getObjectOnBottom());
|
||||
}
|
||||
|
||||
return objectArrayList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the path to the objective is valid
|
||||
*
|
||||
* @param x The x coordinate of the objective
|
||||
* @param y The y coordinate of the objective
|
||||
* @return Returns true if valid or false otherwise
|
||||
*/
|
||||
private boolean pathInvalid(int x, int y) {
|
||||
BreadthFirstSearch breadthFirstSearch = new BreadthFirstSearch(this);
|
||||
State playerState = new State(2, 1, State.Type.START, null, 0);
|
||||
State objectiveState = new State(x, y, State.Type.EXIT, null, 0);
|
||||
return !breadthFirstSearch.search(playerState, objectiveState);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get random x and y coordinates
|
||||
*
|
||||
* @param checkPath Check if the path can be reached using AI
|
||||
* @return Returns an array with the coordinates
|
||||
*/
|
||||
private int[] randomCoordinates(boolean checkPath) {
|
||||
tries = 0;
|
||||
private int[] randomCoordinates() {
|
||||
int[] random = new int[2];
|
||||
random[0] = random(0, HORIZONTAL_CELLS - 1);
|
||||
random[1] = random(0, VERTICAL_CELLS - 1);
|
||||
// If the cell is not empty look for another
|
||||
// If the cell is not reachable by the player look for another
|
||||
// If the player can't reach the bottom right corner look for another
|
||||
while (celdas[random[0]][random[1]].containsObject() || (checkPath && checkBreadthFirst(random[0], random[1]))) {
|
||||
while (cells[random[0]][random[1]].containsObject()) {
|
||||
random[0] = random(0, HORIZONTAL_CELLS - 1);
|
||||
random[1] = random(0, VERTICAL_CELLS - 1);
|
||||
tries++;
|
||||
if (tries == VERTICAL_CELLS) {
|
||||
random[0] = -1;
|
||||
random[1] = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return random;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the path using BreadFirst-Search
|
||||
*
|
||||
* @param x The x position to check
|
||||
* @param y The y position to check
|
||||
* @return Returns true if the object is reachable or false otherwise
|
||||
*/
|
||||
private boolean checkBreadthFirst(int x, int y) {
|
||||
BreadthFirstSearch breadthFirstSearch = new BreadthFirstSearch(this);
|
||||
return (!breadthFirstSearch.search(
|
||||
new State(2, 1, State.Type.START, null, 0),
|
||||
new State(x, y, State.Type.EXIT, null, 0)) ||
|
||||
!breadthFirstSearch.search(
|
||||
new State(2, 1, State.Type.START, null, 0),
|
||||
new State(HORIZONTAL_CELLS - 2, VERTICAL_CELLS - 2, State.Type.EXIT, null, 0)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the scene manually without the JSON file
|
||||
*/
|
||||
@ -293,9 +271,9 @@ public class Escenario extends JComponent implements Constantes {
|
||||
for (int x = 0; x < HORIZONTAL_CELLS; x++) {
|
||||
for (int y = 0; y < VERTICAL_CELLS; y++) {
|
||||
logger.info("Generate cell x: " + x + " y: " + y + " manually");
|
||||
celdas[x][y] = new Celda((x * CELL_PIXELS) + canvas.getLeftMargin(), (y * CELL_PIXELS) + canvas.getTopMargin(), x, y);
|
||||
cells[x][y] = new Cell((x * CELL_PIXELS) + canvas.getLeftMargin(), (y * CELL_PIXELS) + canvas.getTopMargin(), x, y);
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(0), 0);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(0), 0);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -303,9 +281,9 @@ public class Escenario extends JComponent implements Constantes {
|
||||
|
||||
if (x == 0 && y == 0) {
|
||||
// Top left corner
|
||||
celdas[x][y].setObject(new Obstacle(this, celdas[x][y]));
|
||||
cells[x][y].setObject(new Obstacle(this, cells[x][y]));
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(33), 33);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(33), 33);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -313,9 +291,9 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else if (x == HORIZONTAL_CELLS - 1 && y == 0) {
|
||||
// Top right corner
|
||||
celdas[x][y].setObject(new Obstacle(this, celdas[x][y]));
|
||||
cells[x][y].setObject(new Obstacle(this, cells[x][y]));
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(37), 37);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(37), 37);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -323,9 +301,9 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else if (x == 0 && y == VERTICAL_CELLS - 1) {
|
||||
// Bottom left corner
|
||||
celdas[x][y].setObject(new Obstacle(this, celdas[x][y]));
|
||||
cells[x][y].setObject(new Obstacle(this, cells[x][y]));
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(97), 97);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(97), 97);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -333,9 +311,9 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else if (x == HORIZONTAL_CELLS - 1 && y == VERTICAL_CELLS - 1) {
|
||||
// Bottom right corner
|
||||
celdas[x][y].setObject(new Obstacle(this, celdas[x][y]));
|
||||
cells[x][y].setObject(new Obstacle(this, cells[x][y]));
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(101), 101);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(101), 101);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -343,12 +321,12 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else if (y == 0) {
|
||||
// Top wall
|
||||
celdas[x][y].setObject(new Obstacle(this, celdas[x][y]));
|
||||
cells[x][y].setObject(new Obstacle(this, cells[x][y]));
|
||||
if (x == 1) {
|
||||
// Left door frame
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(144), 144);
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(192), 192);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(144), 144);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(192), 192);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -357,7 +335,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
else if (x == 2) {
|
||||
// Door
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(145), 145);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(145), 145);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -366,8 +344,8 @@ public class Escenario extends JComponent implements Constantes {
|
||||
else if (x == 3) {
|
||||
// Right door frame
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(146), 146);
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(194), 194);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(146), 146);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(194), 194);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -376,7 +354,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
else if (x == 8) {
|
||||
// Broken wall piece
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(105), 105);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(105), 105);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -384,8 +362,8 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else if (x % 2 == 0) {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(34), 34);
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(222), 222);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(34), 34);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(222), 222);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -393,7 +371,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(35), 35);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(35), 35);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -402,11 +380,11 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else if (x == 0) {
|
||||
// Left wall
|
||||
celdas[x][y].setObject(new Obstacle(this, celdas[x][y]));
|
||||
cells[x][y].setObject(new Obstacle(this, cells[x][y]));
|
||||
if (y % 2 == 0) {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(49), 49);
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(255), 255);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(49), 49);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(255), 255);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -414,7 +392,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(65), 65);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(65), 65);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -423,11 +401,11 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else if (x == HORIZONTAL_CELLS - 1) {
|
||||
// Right wall
|
||||
celdas[x][y].setObject(new Obstacle(this, celdas[x][y]));
|
||||
cells[x][y].setObject(new Obstacle(this, cells[x][y]));
|
||||
if (y % 2 == 0) {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(53), 53);
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(238), 238);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(53), 53);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(238), 238);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -435,7 +413,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(69), 69);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(69), 69);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -444,11 +422,11 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else if (y == VERTICAL_CELLS - 1) {
|
||||
// Bottom wall
|
||||
celdas[x][y].setObject(new Obstacle(this, celdas[x][y]));
|
||||
cells[x][y].setObject(new Obstacle(this, cells[x][y]));
|
||||
if (x % 2 == 0) {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(98), 98);
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(207), 207);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(98), 98);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(207), 207);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -456,7 +434,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
}
|
||||
else {
|
||||
try {
|
||||
celdas[x][y].addTexture(textureSheet.getTexture(99), 99);
|
||||
cells[x][y].addTexture(textureSheet.getTexture(99), 99);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -484,8 +462,8 @@ public class Escenario extends JComponent implements Constantes {
|
||||
*
|
||||
* @return Returns a matrix of the cells of the game
|
||||
*/
|
||||
public Celda[][] getCeldas() {
|
||||
return celdas;
|
||||
public Cell[][] getCells() {
|
||||
return cells;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -507,7 +485,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
public void update(Graphics g) {
|
||||
for (int i = 0; i < HORIZONTAL_CELLS; i++) {
|
||||
for (int j = 0; j < VERTICAL_CELLS; j++) {
|
||||
celdas[i][j].paintComponent(g);
|
||||
cells[i][j].paintComponent(g);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -517,7 +495,7 @@ public class Escenario extends JComponent implements Constantes {
|
||||
*
|
||||
* @return Returns the parent canvas
|
||||
*/
|
||||
public Lienzo getCanvas() {
|
||||
public Canvas getCanvas() {
|
||||
return canvas;
|
||||
}
|
||||
|
||||
@ -559,9 +537,9 @@ public class Escenario extends JComponent implements Constantes {
|
||||
*/
|
||||
public void openDoor(boolean doorOpen) {
|
||||
if (!doorOpen && isDoorOpen()) {
|
||||
celdas[2][0].setObject(new Obstacle(this, celdas[2][0]));
|
||||
cells[2][0].setObject(new Obstacle(this, cells[2][0]));
|
||||
try {
|
||||
celdas[2][0].addTexture(textureSheet.getTexture(193), 193);
|
||||
cells[2][0].addTexture(textureSheet.getTexture(193), 193);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
logger.warning(e.getMessage());
|
||||
@ -570,8 +548,8 @@ public class Escenario extends JComponent implements Constantes {
|
||||
playDoorSound();
|
||||
}
|
||||
else if (doorOpen && !isDoorOpen()) {
|
||||
celdas[2][0].removeTexture(193);
|
||||
celdas[2][0].setObject(null);
|
||||
cells[2][0].removeTexture(193);
|
||||
cells[2][0].setObject(null);
|
||||
this.doorOpen = true;
|
||||
playDoorSound();
|
||||
}
|
@ -15,7 +15,7 @@
|
||||
|
||||
package cl.cromer.azaraka.ai;
|
||||
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@ -26,7 +26,7 @@ public class AI implements Runnable {
|
||||
/**
|
||||
* The scene of the game
|
||||
*/
|
||||
private final Escenario escenario;
|
||||
private final Scene scene;
|
||||
/**
|
||||
* The logger
|
||||
*/
|
||||
@ -39,10 +39,10 @@ public class AI implements Runnable {
|
||||
/**
|
||||
* Initialize the AI
|
||||
*
|
||||
* @param escenario The scene of the game
|
||||
* @param scene The scene of the game
|
||||
*/
|
||||
protected AI(Escenario escenario) {
|
||||
this.escenario = escenario;
|
||||
protected AI(Scene scene) {
|
||||
this.scene = scene;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -50,8 +50,8 @@ public class AI implements Runnable {
|
||||
*
|
||||
* @return Returns the scene
|
||||
*/
|
||||
protected Escenario getEscenario() {
|
||||
return escenario;
|
||||
protected Scene getScene() {
|
||||
return scene;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -15,8 +15,8 @@
|
||||
|
||||
package cl.cromer.azaraka.ai;
|
||||
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
import java.util.ArrayList;
|
||||
@ -24,7 +24,7 @@ import java.util.ArrayList;
|
||||
/**
|
||||
* This is an implementation of the Breadth-First search algorithm with multiple objectives
|
||||
*/
|
||||
public class BreadthFirstSearch extends AI implements Constantes {
|
||||
public class BreadthFirstSearch extends AI implements Constants {
|
||||
/**
|
||||
* The queued states to check
|
||||
*/
|
||||
@ -57,10 +57,10 @@ public class BreadthFirstSearch extends AI implements Constantes {
|
||||
/**
|
||||
* Initialize the algorithm
|
||||
*
|
||||
* @param escenario The scene the AI is in
|
||||
* @param scene The scene the AI is in
|
||||
*/
|
||||
public BreadthFirstSearch(Escenario escenario) {
|
||||
super(escenario);
|
||||
public BreadthFirstSearch(Scene scene) {
|
||||
super(scene);
|
||||
setLogger(getLogger(this.getClass(), LogLevel.AI));
|
||||
}
|
||||
|
||||
@ -99,6 +99,8 @@ public class BreadthFirstSearch extends AI implements Constantes {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: remove escenario from the algorithm
|
||||
|
||||
/**
|
||||
* Move up if possible
|
||||
*
|
||||
@ -106,7 +108,7 @@ public class BreadthFirstSearch extends AI implements Constantes {
|
||||
*/
|
||||
private void moveUp(State state) {
|
||||
if (state.getY() > 0) {
|
||||
if (getEscenario().getCeldas()[state.getX()][state.getY() - 1].getObject() == null) {
|
||||
if (getScene().getCells()[state.getX()][state.getY() - 1].getObject() == null) {
|
||||
State up = new State(state.getX(), state.getY() - 1, State.Type.UP, state, state.getImportance());
|
||||
if (!history.contains(up)) {
|
||||
queuedStates.add(up);
|
||||
@ -128,7 +130,7 @@ public class BreadthFirstSearch extends AI implements Constantes {
|
||||
*/
|
||||
private void moveDown(State state) {
|
||||
if (state.getY() < VERTICAL_CELLS - 1) {
|
||||
if (getEscenario().getCeldas()[state.getX()][state.getY() + 1].getObject() == null) {
|
||||
if (getScene().getCells()[state.getX()][state.getY() + 1].getObject() == null) {
|
||||
State down = new State(state.getX(), state.getY() + 1, State.Type.DOWN, state, state.getImportance());
|
||||
if (!history.contains(down)) {
|
||||
queuedStates.add(down);
|
||||
@ -150,7 +152,7 @@ public class BreadthFirstSearch extends AI implements Constantes {
|
||||
*/
|
||||
private void moveLeft(State state) {
|
||||
if (state.getX() > 0) {
|
||||
if (getEscenario().getCeldas()[state.getX() - 1][state.getY()].getObject() == null) {
|
||||
if (getScene().getCells()[state.getX() - 1][state.getY()].getObject() == null) {
|
||||
State left = new State(state.getX() - 1, state.getY(), State.Type.LEFT, state, state.getImportance());
|
||||
if (!history.contains(left)) {
|
||||
queuedStates.add(left);
|
||||
@ -172,7 +174,7 @@ public class BreadthFirstSearch extends AI implements Constantes {
|
||||
*/
|
||||
private void moveRight(State state) {
|
||||
if (state.getX() < HORIZONTAL_CELLS - 1) {
|
||||
if (getEscenario().getCeldas()[state.getX() + 1][state.getY()].getObject() == null) {
|
||||
if (getScene().getCells()[state.getX() + 1][state.getY()].getObject() == null) {
|
||||
State right = new State(state.getX() + 1, state.getY(), State.Type.RIGHT, state, state.getImportance());
|
||||
if (!history.contains(right)) {
|
||||
queuedStates.add(right);
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
package cl.cromer.azaraka.ai;
|
||||
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
import cl.cromer.azaraka.object.Player;
|
||||
import cl.cromer.azaraka.object.Portal;
|
||||
import cl.cromer.azaraka.sprite.Animation;
|
||||
@ -34,11 +34,11 @@ public class PlayerAI extends BreadthFirstSearch {
|
||||
/**
|
||||
* Initialize the algorithm
|
||||
*
|
||||
* @param escenario The scene the AI is in
|
||||
* @param scene The scene the AI is in
|
||||
* @param player The player controlled by the AI
|
||||
*/
|
||||
public PlayerAI(Escenario escenario, Player player) {
|
||||
super(escenario);
|
||||
public PlayerAI(Scene scene, Player player) {
|
||||
super(scene);
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@ -57,9 +57,9 @@ public class PlayerAI extends BreadthFirstSearch {
|
||||
player.keyPressed(KeyEvent.VK_UP);
|
||||
}
|
||||
player.interact();
|
||||
Portal portal = getEscenario().getCanvas().getPortal();
|
||||
Portal portal = getScene().getCanvas().getPortal();
|
||||
if (portal.getState() == Portal.State.ACTIVE) {
|
||||
addDestination(new State(portal.getCelda().getX(), portal.getCelda().getY(), State.Type.PORTAL, null, 2));
|
||||
addDestination(new State(portal.getCell().getX(), portal.getCell().getY(), State.Type.PORTAL, null, 2));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -70,7 +70,7 @@ public class PlayerAI extends BreadthFirstSearch {
|
||||
case KEY:
|
||||
return true;
|
||||
case PORTAL:
|
||||
if (player.hasTaintedGem() && getEscenario().getCanvas().getPortal().getState() == Portal.State.ACTIVE) {
|
||||
if (player.hasTaintedGem() && getScene().getCanvas().getPortal().getState() == Portal.State.ACTIVE) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
@ -101,13 +101,13 @@ public class PlayerAI extends BreadthFirstSearch {
|
||||
break;
|
||||
case PORTAL:
|
||||
// If the portal is active head towards it
|
||||
if (player.hasTaintedGem() && getEscenario().getCanvas().getPortal().getState() == Portal.State.ACTIVE) {
|
||||
if (player.hasTaintedGem() && getScene().getCanvas().getPortal().getState() == Portal.State.ACTIVE) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case EXIT:
|
||||
// If the door is open head to it
|
||||
if (getEscenario().isDoorOpen()) {
|
||||
if (getScene().isDoorOpen()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
@ -137,7 +137,7 @@ public class PlayerAI extends BreadthFirstSearch {
|
||||
}
|
||||
}
|
||||
|
||||
getEscenario().getCanvas().repaint();
|
||||
getScene().getCanvas().repaint();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -145,6 +145,6 @@ public class PlayerAI extends BreadthFirstSearch {
|
||||
*/
|
||||
@Override
|
||||
public void getNewInitial() {
|
||||
setInitial(new State(player.getCelda().getX(), player.getCelda().getY(), State.Type.START, null, 0));
|
||||
setInitial(new State(player.getCell().getX(), player.getCell().getY(), State.Type.START, null, 0));
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class State {
|
||||
/**
|
||||
* The importance of the objective, higher is more important
|
||||
*/
|
||||
private int importance;
|
||||
private final int importance;
|
||||
|
||||
/**
|
||||
* Initialize the state
|
||||
|
@ -15,8 +15,8 @@
|
||||
|
||||
package cl.cromer.azaraka.json;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
@ -28,7 +28,7 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* This class handles reading and writing of JSON objects
|
||||
*/
|
||||
public class Json implements Constantes {
|
||||
public class Json implements Constants {
|
||||
/**
|
||||
* The logger
|
||||
*/
|
||||
@ -46,11 +46,11 @@ public class Json implements Constantes {
|
||||
*
|
||||
* @param celdas The cells of the scene to export
|
||||
*/
|
||||
public void exportScene(Celda[][] celdas) {
|
||||
Cell[][] cells = new Cell[celdas.length][celdas[0].length];
|
||||
public void exportScene(Cell[][] celdas) {
|
||||
cl.cromer.azaraka.json.Cell[][] cells = new cl.cromer.azaraka.json.Cell[celdas.length][celdas[0].length];
|
||||
for (int x = 0; x < celdas.length; x++) {
|
||||
for (int y = 0; y < celdas[x].length; y++) {
|
||||
cells[x][y] = new Cell();
|
||||
cells[x][y] = new cl.cromer.azaraka.json.Cell();
|
||||
if (celdas[x][y].getObject() != null) {
|
||||
cells[x][y].type = celdas[x][y].getObject().getClass().getName();
|
||||
}
|
||||
@ -68,7 +68,7 @@ public class Json implements Constantes {
|
||||
*
|
||||
* @param cells The JSON cells object
|
||||
*/
|
||||
private void writeScene(Cell[][] cells) {
|
||||
private void writeScene(cl.cromer.azaraka.json.Cell[][] cells) {
|
||||
GsonBuilder gsonBuilder;
|
||||
if (PRETTY_JSON) {
|
||||
gsonBuilder = new GsonBuilder().setPrettyPrinting();
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
package cl.cromer.azaraka.object;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
import cl.cromer.azaraka.sound.Sound;
|
||||
import cl.cromer.azaraka.sound.SoundException;
|
||||
import cl.cromer.azaraka.sprite.Animation;
|
||||
@ -28,7 +28,7 @@ import cl.cromer.azaraka.sprite.SheetException;
|
||||
/**
|
||||
* This class handles the chests
|
||||
*/
|
||||
public class Chest extends Object implements Constantes {
|
||||
public class Chest extends Object implements Constants {
|
||||
/**
|
||||
* The current state of the chest
|
||||
*/
|
||||
@ -49,11 +49,11 @@ public class Chest extends Object implements Constantes {
|
||||
/**
|
||||
* Initialize the chest
|
||||
*
|
||||
* @param escenario The scene the chest is in
|
||||
* @param celda The cell that contains the chest
|
||||
* @param scene The scene the chest is in
|
||||
* @param cell The cell that contains the chest
|
||||
*/
|
||||
public Chest(Escenario escenario, Celda celda) {
|
||||
super(escenario, celda);
|
||||
public Chest(Scene scene, Cell cell) {
|
||||
super(scene, cell);
|
||||
setLogger(getLogger(this.getClass(), LogLevel.CHEST));
|
||||
|
||||
loadChestAnimation();
|
||||
@ -109,7 +109,7 @@ public class Chest extends Object implements Constantes {
|
||||
catch (AnimationException e) {
|
||||
getLogger().warning(e.getMessage());
|
||||
}
|
||||
getEscenario().getCanvas().repaint();
|
||||
getScene().getCanvas().repaint();
|
||||
}
|
||||
}
|
||||
|
||||
@ -136,7 +136,7 @@ public class Chest extends Object implements Constantes {
|
||||
*/
|
||||
private void playChestOpenSound() {
|
||||
try {
|
||||
sound.setVolume(getEscenario().getCanvas().getVolume());
|
||||
sound.setVolume(getScene().getCanvas().getVolume());
|
||||
sound.play();
|
||||
}
|
||||
catch (SoundException e) {
|
||||
@ -188,19 +188,19 @@ public class Chest extends Object implements Constantes {
|
||||
gemLoops--;
|
||||
}
|
||||
else if (gemLoops == 0) {
|
||||
gem.getCelda().setObjectOnTop(null);
|
||||
gem.getCell().setObjectOnTop(null);
|
||||
gem.setYScale(24);
|
||||
gem.setXScale(24);
|
||||
gem.setUseOffset(false);
|
||||
getEscenario().getCanvas().getPlayer().addInventory(gem);
|
||||
getEscenario().getCanvas().getPortal().setState(Portal.State.ACTIVE);
|
||||
getScene().getCanvas().getPlayer().addInventory(gem);
|
||||
getScene().getCanvas().getPortal().setState(Portal.State.ACTIVE);
|
||||
gemLoops--;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (state == State.OPENING) {
|
||||
animate();
|
||||
getEscenario().getCanvas().repaint();
|
||||
getScene().getCanvas().repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
package cl.cromer.azaraka.object;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
import cl.cromer.azaraka.sound.Sound;
|
||||
import cl.cromer.azaraka.sound.SoundException;
|
||||
import cl.cromer.azaraka.sprite.Animation;
|
||||
@ -29,7 +29,7 @@ import java.util.concurrent.locks.Lock;
|
||||
/**
|
||||
* This class handles the enemy object
|
||||
*/
|
||||
public class Enemy extends Object implements Constantes {
|
||||
public class Enemy extends Object implements Constants {
|
||||
/**
|
||||
* The lock helps prevent race conditions when checking positioning
|
||||
*/
|
||||
@ -46,12 +46,12 @@ public class Enemy extends Object implements Constantes {
|
||||
/**
|
||||
* Initialize the enemy
|
||||
*
|
||||
* @param escenario The scene the enemy is in
|
||||
* @param celda The cell this enemy is in
|
||||
* @param scene The scene the enemy is in
|
||||
* @param cell The cell this enemy is in
|
||||
* @param lock The lock used to prevent the threads from conflicting
|
||||
*/
|
||||
public Enemy(Escenario escenario, Celda celda, Lock lock) {
|
||||
super(escenario, celda);
|
||||
public Enemy(Scene scene, Cell cell, Lock lock) {
|
||||
super(scene, cell);
|
||||
setLogger(getLogger(this.getClass(), LogLevel.ENEMY));
|
||||
this.lock = lock;
|
||||
loadEnemyAnimation();
|
||||
@ -78,7 +78,7 @@ public class Enemy extends Object implements Constantes {
|
||||
*/
|
||||
private void playAttackSound() {
|
||||
try {
|
||||
sound.setVolume(getEscenario().getCanvas().getVolume());
|
||||
sound.setVolume(getScene().getCanvas().getVolume());
|
||||
sound.play();
|
||||
}
|
||||
catch (SoundException e) {
|
||||
@ -114,10 +114,10 @@ public class Enemy extends Object implements Constantes {
|
||||
int x = getX();
|
||||
int y = getY();
|
||||
if (direction == Direction.LEFT) {
|
||||
if (x > 0 && getEscenario().getCeldas()[x - 1][y].getObject() == null) {
|
||||
getCelda().setObject(null);
|
||||
setCelda(getEscenario().getCeldas()[x - 1][y]);
|
||||
getCelda().setObject(this);
|
||||
if (x > 0 && getScene().getCells()[x - 1][y].getObject() == null) {
|
||||
getCell().setObject(null);
|
||||
setCell(getScene().getCells()[x - 1][y]);
|
||||
getCell().setObject(this);
|
||||
|
||||
try {
|
||||
getAnimation().getNextFrame();
|
||||
@ -128,7 +128,7 @@ public class Enemy extends Object implements Constantes {
|
||||
setX(getX() - 1);
|
||||
getLogger().info("Move left to x: " + x + " y: " + y);
|
||||
}
|
||||
else if (x > 0 && getEscenario().getCeldas()[x - 1][y].getObject() instanceof Player) {
|
||||
else if (x > 0 && getScene().getCells()[x - 1][y].getObject() instanceof Player) {
|
||||
attackPlayer(x - 1, y);
|
||||
}
|
||||
else {
|
||||
@ -138,10 +138,10 @@ public class Enemy extends Object implements Constantes {
|
||||
}
|
||||
}
|
||||
else if (direction == Direction.RIGHT) {
|
||||
if (x < (HORIZONTAL_CELLS - 1) && getEscenario().getCeldas()[x + 1][y].getObject() == null) {
|
||||
getCelda().setObject(null);
|
||||
setCelda(getEscenario().getCeldas()[x + 1][y]);
|
||||
getCelda().setObject(this);
|
||||
if (x < (HORIZONTAL_CELLS - 1) && getScene().getCells()[x + 1][y].getObject() == null) {
|
||||
getCell().setObject(null);
|
||||
setCell(getScene().getCells()[x + 1][y]);
|
||||
getCell().setObject(this);
|
||||
|
||||
try {
|
||||
getAnimation().getNextFrame();
|
||||
@ -152,7 +152,7 @@ public class Enemy extends Object implements Constantes {
|
||||
setX(getX() + 1);
|
||||
getLogger().info("Move right to x: " + x + " y: " + y);
|
||||
}
|
||||
else if (x < (HORIZONTAL_CELLS - 1) && getEscenario().getCeldas()[x + 1][y].getObject() instanceof Player) {
|
||||
else if (x < (HORIZONTAL_CELLS - 1) && getScene().getCells()[x + 1][y].getObject() instanceof Player) {
|
||||
attackPlayer(x + 1, y);
|
||||
}
|
||||
else {
|
||||
@ -162,10 +162,10 @@ public class Enemy extends Object implements Constantes {
|
||||
}
|
||||
}
|
||||
else if (direction == Direction.DOWN) {
|
||||
if (y < (VERTICAL_CELLS) - 1 && getEscenario().getCeldas()[x][y + 1].getObject() == null) {
|
||||
getCelda().setObject(null);
|
||||
setCelda(getEscenario().getCeldas()[x][y + 1]);
|
||||
getCelda().setObject(this);
|
||||
if (y < (VERTICAL_CELLS) - 1 && getScene().getCells()[x][y + 1].getObject() == null) {
|
||||
getCell().setObject(null);
|
||||
setCell(getScene().getCells()[x][y + 1]);
|
||||
getCell().setObject(this);
|
||||
|
||||
try {
|
||||
getAnimation().getNextFrame();
|
||||
@ -176,7 +176,7 @@ public class Enemy extends Object implements Constantes {
|
||||
setY(getY() + 1);
|
||||
getLogger().info("Move down to x: " + x + " y: " + y);
|
||||
}
|
||||
else if (y < (VERTICAL_CELLS - 1) && getEscenario().getCeldas()[x][y + 1].getObject() instanceof Player) {
|
||||
else if (y < (VERTICAL_CELLS - 1) && getScene().getCells()[x][y + 1].getObject() instanceof Player) {
|
||||
attackPlayer(x, y + 1);
|
||||
}
|
||||
else {
|
||||
@ -186,10 +186,10 @@ public class Enemy extends Object implements Constantes {
|
||||
}
|
||||
}
|
||||
else if (direction == Direction.UP) {
|
||||
if (y > 0 && getEscenario().getCeldas()[x][y - 1].getObject() == null) {
|
||||
getCelda().setObject(null);
|
||||
setCelda(getEscenario().getCeldas()[x][y - 1]);
|
||||
getCelda().setObject(this);
|
||||
if (y > 0 && getScene().getCells()[x][y - 1].getObject() == null) {
|
||||
getCell().setObject(null);
|
||||
setCell(getScene().getCells()[x][y - 1]);
|
||||
getCell().setObject(this);
|
||||
|
||||
try {
|
||||
getAnimation().getNextFrame();
|
||||
@ -200,7 +200,7 @@ public class Enemy extends Object implements Constantes {
|
||||
setY(getY() - 1);
|
||||
getLogger().info("Move up to x: " + x + " y: " + y);
|
||||
}
|
||||
else if (y > 0 && getEscenario().getCeldas()[x][y - 1].getObject() instanceof Player) {
|
||||
else if (y > 0 && getScene().getCells()[x][y - 1].getObject() instanceof Player) {
|
||||
attackPlayer(x, y - 1);
|
||||
}
|
||||
else {
|
||||
@ -218,20 +218,20 @@ public class Enemy extends Object implements Constantes {
|
||||
* @param y The y position of the player
|
||||
*/
|
||||
private void attackPlayer(int x, int y) {
|
||||
if (getEscenario().getCanvas().getPlayer().getHealth() > 0) {
|
||||
if (getScene().getCanvas().getPlayer().getHealth() > 0) {
|
||||
|
||||
getLogger().info("Attacked player at x: " + x + " y: " + y);
|
||||
|
||||
playAttackSound();
|
||||
|
||||
getEscenario().getCanvas().getPlayer().loseHealth(2);
|
||||
getScene().getCanvas().getPlayer().loseHealth(2);
|
||||
try {
|
||||
getEscenario().getCeldas()[x][y].addTexture(getEscenario().getTextureSheet().getTexture(12), 12);
|
||||
getScene().getCells()[x][y].addTexture(getScene().getTextureSheet().getTexture(12), 12);
|
||||
}
|
||||
catch (SheetException e) {
|
||||
getLogger().warning(e.getMessage());
|
||||
}
|
||||
getEscenario().getCanvas().getPlayer().attacked();
|
||||
getScene().getCanvas().getPlayer().attacked();
|
||||
|
||||
if (direction == Direction.UP) {
|
||||
getAnimation().setCurrentDirection(Animation.Direction.LEFT);
|
||||
@ -267,7 +267,7 @@ public class Enemy extends Object implements Constantes {
|
||||
synchronized (this) {
|
||||
lock.lock();
|
||||
move();
|
||||
getEscenario().getCanvas().repaint();
|
||||
getScene().getCanvas().repaint();
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
@ -15,8 +15,8 @@
|
||||
|
||||
package cl.cromer.azaraka.object;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
import cl.cromer.azaraka.sound.Sound;
|
||||
import cl.cromer.azaraka.sound.SoundException;
|
||||
import cl.cromer.azaraka.sprite.Animation;
|
||||
@ -46,11 +46,11 @@ public class Gem extends Object {
|
||||
/**
|
||||
* Initialize the gem object
|
||||
*
|
||||
* @param escenario The scene the gem is in
|
||||
* @param celda The cell the gem is in
|
||||
* @param scene The scene the gem is in
|
||||
* @param cell The cell the gem is in
|
||||
*/
|
||||
public Gem(Escenario escenario, Celda celda) {
|
||||
super(escenario, celda);
|
||||
public Gem(Scene scene, Cell cell) {
|
||||
super(scene, cell);
|
||||
setLogger(getLogger(this.getClass(), LogLevel.GEM));
|
||||
loadGemAnimation(null);
|
||||
setAnimation(taintedAnimation);
|
||||
@ -119,7 +119,7 @@ public class Gem extends Object {
|
||||
*/
|
||||
public void playGemSound() {
|
||||
try {
|
||||
sound.setVolume(getEscenario().getCanvas().getVolume());
|
||||
sound.setVolume(getScene().getCanvas().getVolume());
|
||||
sound.play();
|
||||
}
|
||||
catch (SoundException e) {
|
||||
@ -201,7 +201,7 @@ public class Gem extends Object {
|
||||
}
|
||||
synchronized (this) {
|
||||
animate();
|
||||
getEscenario().getCanvas().repaint();
|
||||
getScene().getCanvas().repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
package cl.cromer.azaraka.object;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
import cl.cromer.azaraka.sound.Sound;
|
||||
import cl.cromer.azaraka.sound.SoundException;
|
||||
import cl.cromer.azaraka.sprite.Animation;
|
||||
@ -28,7 +28,7 @@ import cl.cromer.azaraka.sprite.SheetException;
|
||||
/**
|
||||
* This class contains the key
|
||||
*/
|
||||
public class Key extends Object implements Constantes {
|
||||
public class Key extends Object implements Constants {
|
||||
/**
|
||||
* The current state of the key
|
||||
*/
|
||||
@ -41,11 +41,11 @@ public class Key extends Object implements Constantes {
|
||||
/**
|
||||
* Initialize the key
|
||||
*
|
||||
* @param escenario The scene the key is in
|
||||
* @param celda The cell the key is in
|
||||
* @param scene The scene the key is in
|
||||
* @param cell The cell the key is in
|
||||
*/
|
||||
public Key(Escenario escenario, Celda celda) {
|
||||
super(escenario, celda);
|
||||
public Key(Scene scene, Cell cell) {
|
||||
super(scene, cell);
|
||||
setLogger(getLogger(this.getClass(), LogLevel.KEY));
|
||||
loadKeyAnimation();
|
||||
}
|
||||
@ -92,7 +92,7 @@ public class Key extends Object implements Constantes {
|
||||
*/
|
||||
public void playGetKeySound() {
|
||||
try {
|
||||
sound.setVolume(getEscenario().getCanvas().getVolume());
|
||||
sound.setVolume(getScene().getCanvas().getVolume());
|
||||
sound.play();
|
||||
}
|
||||
catch (SoundException e) {
|
||||
@ -114,7 +114,7 @@ public class Key extends Object implements Constantes {
|
||||
*/
|
||||
public void getKey() {
|
||||
// Remove the key from the cell
|
||||
getCelda().setObjectOnBottom(null);
|
||||
getCell().setObjectOnBottom(null);
|
||||
setState(State.HELD);
|
||||
}
|
||||
|
||||
@ -169,7 +169,7 @@ public class Key extends Object implements Constantes {
|
||||
}
|
||||
synchronized (this) {
|
||||
animate();
|
||||
getEscenario().getCanvas().repaint();
|
||||
getScene().getCanvas().repaint();
|
||||
}
|
||||
}
|
||||
// The thread was killed, set the animation to frame 4
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
package cl.cromer.azaraka.object;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
import cl.cromer.azaraka.sprite.Animation;
|
||||
import cl.cromer.azaraka.sprite.AnimationException;
|
||||
import cl.cromer.azaraka.sprite.Sheet;
|
||||
@ -30,11 +30,11 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* All game objects extend this class
|
||||
*/
|
||||
public class Object implements Runnable, Constantes {
|
||||
public class Object implements Runnable, Constants {
|
||||
/**
|
||||
* The scene the object is in
|
||||
*/
|
||||
private final Escenario escenario;
|
||||
private final Scene scene;
|
||||
/**
|
||||
* The current x position of the object
|
||||
*/
|
||||
@ -46,7 +46,7 @@ public class Object implements Runnable, Constantes {
|
||||
/**
|
||||
* The cell the object is in
|
||||
*/
|
||||
private Celda celda;
|
||||
private Cell cell;
|
||||
/**
|
||||
* The animation of the object
|
||||
*/
|
||||
@ -75,14 +75,14 @@ public class Object implements Runnable, Constantes {
|
||||
/**
|
||||
* Initialize the object
|
||||
*
|
||||
* @param escenario The scene the object is in
|
||||
* @param celda The cell the object is in
|
||||
* @param scene The scene the object is in
|
||||
* @param cell The cell the object is in
|
||||
*/
|
||||
protected Object(Escenario escenario, Celda celda) {
|
||||
this.escenario = escenario;
|
||||
this.celda = celda;
|
||||
this.x = celda.getX();
|
||||
this.y = celda.getY();
|
||||
protected Object(Scene scene, Cell cell) {
|
||||
this.scene = scene;
|
||||
this.cell = cell;
|
||||
this.x = cell.getX();
|
||||
this.y = cell.getY();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -144,8 +144,8 @@ public class Object implements Runnable, Constantes {
|
||||
*
|
||||
* @return Returns the scene
|
||||
*/
|
||||
protected Escenario getEscenario() {
|
||||
return escenario;
|
||||
protected Scene getScene() {
|
||||
return scene;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -153,17 +153,17 @@ public class Object implements Runnable, Constantes {
|
||||
*
|
||||
* @return Returns the cell
|
||||
*/
|
||||
public Celda getCelda() {
|
||||
return celda;
|
||||
public Cell getCell() {
|
||||
return cell;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the cell the object is in
|
||||
*
|
||||
* @param celda The cell
|
||||
* @param cell The cell
|
||||
*/
|
||||
public void setCelda(Celda celda) {
|
||||
this.celda = celda;
|
||||
public void setCell(Cell cell) {
|
||||
this.cell = cell;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -15,8 +15,8 @@
|
||||
|
||||
package cl.cromer.azaraka.object;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
|
||||
/**
|
||||
* This class handles the obstacles
|
||||
@ -25,10 +25,10 @@ public class Obstacle extends Object {
|
||||
/**
|
||||
* Initialize the obstacle
|
||||
*
|
||||
* @param escenario The scene the object is in
|
||||
* @param celda The cell the object is in
|
||||
* @param scene The scene the object is in
|
||||
* @param cell The cell the object is in
|
||||
*/
|
||||
public Obstacle(Escenario escenario, Celda celda) {
|
||||
super(escenario, celda);
|
||||
public Obstacle(Scene scene, Cell cell) {
|
||||
super(scene, cell);
|
||||
}
|
||||
}
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
package cl.cromer.azaraka.object;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
import cl.cromer.azaraka.ai.PlayerAI;
|
||||
import cl.cromer.azaraka.sprite.Animation;
|
||||
import cl.cromer.azaraka.sprite.AnimationException;
|
||||
@ -28,7 +28,7 @@ import java.util.ArrayList;
|
||||
/**
|
||||
* This class contains the player
|
||||
*/
|
||||
public class Player extends Object implements Constantes {
|
||||
public class Player extends Object implements Constants {
|
||||
/**
|
||||
* The maximum health of the player
|
||||
*/
|
||||
@ -49,14 +49,14 @@ public class Player extends Object implements Constantes {
|
||||
/**
|
||||
* Initialize the player
|
||||
*
|
||||
* @param escenario The scene the player is in
|
||||
* @param celda The cell the player is in
|
||||
* @param scene The scene the player is in
|
||||
* @param cell The cell the player is in
|
||||
*/
|
||||
public Player(Escenario escenario, Celda celda) {
|
||||
super(escenario, celda);
|
||||
public Player(Scene scene, Cell cell) {
|
||||
super(scene, cell);
|
||||
setLogger(getLogger(this.getClass(), LogLevel.PLAYER));
|
||||
loadPlayerAnimation();
|
||||
ai = new PlayerAI(escenario, this);
|
||||
ai = new PlayerAI(scene, this);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -81,15 +81,15 @@ public class Player extends Object implements Constantes {
|
||||
* @param keyCode The key code to handle
|
||||
*/
|
||||
public void keyPressed(int keyCode) {
|
||||
if (getEscenario().isDoorOpen()) {
|
||||
if (getScene().isDoorOpen()) {
|
||||
ArrayList<Gem> gems = getInventoryGems();
|
||||
if (gems.size() < 2) {
|
||||
getEscenario().openDoor(false);
|
||||
getScene().openDoor(false);
|
||||
}
|
||||
else {
|
||||
for (Gem gem : gems) {
|
||||
if (gem.getState() == Gem.State.TAINTED) {
|
||||
getEscenario().openDoor(false);
|
||||
getScene().openDoor(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -125,14 +125,14 @@ public class Player extends Object implements Constantes {
|
||||
int y = getY();
|
||||
getLogger().info("Up key pressed");
|
||||
if (x == 2 && y == 0) {
|
||||
getEscenario().getCanvas().win();
|
||||
getScene().getCanvas().win();
|
||||
}
|
||||
else if (y > 0) {
|
||||
Object type = getEscenario().getCeldas()[x][y - 1].getObject();
|
||||
Object type = getScene().getCells()[x][y - 1].getObject();
|
||||
if (type == null) {
|
||||
Object typeBottom = getEscenario().getCeldas()[x][y - 1].getObjectOnBottom();
|
||||
Object typeBottom = getScene().getCells()[x][y - 1].getObjectOnBottom();
|
||||
if (typeBottom instanceof Key) {
|
||||
for (Key key : getEscenario().getCanvas().getKeys()) {
|
||||
for (Key key : getScene().getCanvas().getKeys()) {
|
||||
if (key.checkPosition(x, y - 1)) {
|
||||
// Get the key
|
||||
getKey(key);
|
||||
@ -141,12 +141,12 @@ public class Player extends Object implements Constantes {
|
||||
}
|
||||
}
|
||||
else if (typeBottom instanceof Portal) {
|
||||
getEscenario().getCanvas().getPortal().purifyGems();
|
||||
getScene().getCanvas().getPortal().purifyGems();
|
||||
}
|
||||
|
||||
getCelda().setObject(null);
|
||||
setCelda(getEscenario().getCeldas()[x][y - 1]);
|
||||
getCelda().setObject(this);
|
||||
getCell().setObject(null);
|
||||
setCell(getScene().getCells()[x][y - 1]);
|
||||
getCell().setObject(this);
|
||||
|
||||
if (changeDirection(Animation.Direction.UP)) {
|
||||
try {
|
||||
@ -190,11 +190,11 @@ public class Player extends Object implements Constantes {
|
||||
int y = getY();
|
||||
getLogger().info("Down key pressed");
|
||||
if (y < (VERTICAL_CELLS - 1)) {
|
||||
Object type = getEscenario().getCeldas()[x][y + 1].getObject();
|
||||
Object type = getScene().getCells()[x][y + 1].getObject();
|
||||
if (type == null) {
|
||||
Object typeBottom = getEscenario().getCeldas()[x][y + 1].getObjectOnBottom();
|
||||
Object typeBottom = getScene().getCells()[x][y + 1].getObjectOnBottom();
|
||||
if (typeBottom instanceof Key) {
|
||||
for (Key key : getEscenario().getCanvas().getKeys()) {
|
||||
for (Key key : getScene().getCanvas().getKeys()) {
|
||||
if (key.checkPosition(x, y + 1)) {
|
||||
// Get the key
|
||||
getKey(key);
|
||||
@ -203,12 +203,12 @@ public class Player extends Object implements Constantes {
|
||||
}
|
||||
}
|
||||
else if (typeBottom instanceof Portal) {
|
||||
getEscenario().getCanvas().getPortal().purifyGems();
|
||||
getScene().getCanvas().getPortal().purifyGems();
|
||||
}
|
||||
|
||||
getCelda().setObject(null);
|
||||
setCelda(getEscenario().getCeldas()[x][y + 1]);
|
||||
getCelda().setObject(this);
|
||||
getCell().setObject(null);
|
||||
setCell(getScene().getCells()[x][y + 1]);
|
||||
getCell().setObject(this);
|
||||
|
||||
if (changeDirection(Animation.Direction.DOWN)) {
|
||||
try {
|
||||
@ -252,11 +252,11 @@ public class Player extends Object implements Constantes {
|
||||
int y = getY();
|
||||
getLogger().info("Left key pressed");
|
||||
if (x > 0) {
|
||||
Object type = getEscenario().getCeldas()[x - 1][y].getObject();
|
||||
Object type = getScene().getCells()[x - 1][y].getObject();
|
||||
if (type == null) {
|
||||
Object typeBottom = getEscenario().getCeldas()[x - 1][y].getObjectOnBottom();
|
||||
Object typeBottom = getScene().getCells()[x - 1][y].getObjectOnBottom();
|
||||
if (typeBottom instanceof Key) {
|
||||
for (Key key : getEscenario().getCanvas().getKeys()) {
|
||||
for (Key key : getScene().getCanvas().getKeys()) {
|
||||
if (key.checkPosition(x - 1, y)) {
|
||||
// Get the key
|
||||
getKey(key);
|
||||
@ -265,12 +265,12 @@ public class Player extends Object implements Constantes {
|
||||
}
|
||||
}
|
||||
else if (typeBottom instanceof Portal) {
|
||||
getEscenario().getCanvas().getPortal().purifyGems();
|
||||
getScene().getCanvas().getPortal().purifyGems();
|
||||
}
|
||||
|
||||
getCelda().setObject(null);
|
||||
setCelda(getEscenario().getCeldas()[x - 1][y]);
|
||||
getCelda().setObject(this);
|
||||
getCell().setObject(null);
|
||||
setCell(getScene().getCells()[x - 1][y]);
|
||||
getCell().setObject(this);
|
||||
|
||||
if (changeDirection(Animation.Direction.LEFT)) {
|
||||
try {
|
||||
@ -314,11 +314,11 @@ public class Player extends Object implements Constantes {
|
||||
int y = getY();
|
||||
getLogger().info("Right key pressed");
|
||||
if (x < (HORIZONTAL_CELLS - 1)) {
|
||||
Object type = getEscenario().getCeldas()[x + 1][y].getObject();
|
||||
Object type = getScene().getCells()[x + 1][y].getObject();
|
||||
if (type == null) {
|
||||
Object typeBottom = getEscenario().getCeldas()[x + 1][y].getObjectOnBottom();
|
||||
Object typeBottom = getScene().getCells()[x + 1][y].getObjectOnBottom();
|
||||
if (typeBottom instanceof Key) {
|
||||
for (Key key : getEscenario().getCanvas().getKeys()) {
|
||||
for (Key key : getScene().getCanvas().getKeys()) {
|
||||
if (key.checkPosition(x + 1, y)) {
|
||||
// Get the key
|
||||
getKey(key);
|
||||
@ -327,12 +327,12 @@ public class Player extends Object implements Constantes {
|
||||
}
|
||||
}
|
||||
else if (typeBottom instanceof Portal) {
|
||||
getEscenario().getCanvas().getPortal().purifyGems();
|
||||
getScene().getCanvas().getPortal().purifyGems();
|
||||
}
|
||||
|
||||
getCelda().setObject(null);
|
||||
setCelda(getEscenario().getCeldas()[x + 1][y]);
|
||||
getCelda().setObject(this);
|
||||
getCell().setObject(null);
|
||||
setCell(getScene().getCells()[x + 1][y]);
|
||||
getCell().setObject(this);
|
||||
|
||||
if (changeDirection(Animation.Direction.RIGHT)) {
|
||||
try {
|
||||
@ -407,21 +407,21 @@ public class Player extends Object implements Constantes {
|
||||
int y = getY();
|
||||
getLogger().info("Space bar pressed");
|
||||
if (getAnimation().getCurrentDirection() == Animation.Direction.UP) {
|
||||
if (getEscenario().getCeldas()[x][y - 1].getObject() instanceof Chest) {
|
||||
if (getScene().getCells()[x][y - 1].getObject() instanceof Chest) {
|
||||
if (hasKey()) {
|
||||
getLogger().info("Player opened chest");
|
||||
|
||||
gainHealth(2);
|
||||
|
||||
for (Chest chest : getEscenario().getCanvas().getChests()) {
|
||||
for (Chest chest : getScene().getCanvas().getChests()) {
|
||||
if (chest.checkPosition(x, y - 1)) {
|
||||
if (chest.getState() == Chest.State.CLOSED) {
|
||||
chest.setState(Chest.State.OPENING);
|
||||
Gem gem = chest.getGem();
|
||||
if (gem != null) {
|
||||
gem.playGemSound();
|
||||
gem.getCelda().setObjectOnTop(gem);
|
||||
getEscenario().getCanvas().getPortal().setState(Portal.State.ACTIVE);
|
||||
gem.getCell().setObjectOnTop(gem);
|
||||
getScene().getCanvas().getPortal().setState(Portal.State.ACTIVE);
|
||||
}
|
||||
useKey();
|
||||
break;
|
||||
@ -591,7 +591,7 @@ public class Player extends Object implements Constantes {
|
||||
synchronized (this) {
|
||||
if (health > 0) {
|
||||
loseHealth(1);
|
||||
getEscenario().getCanvas().repaint();
|
||||
getScene().getCanvas().repaint();
|
||||
}
|
||||
else {
|
||||
setActive(false);
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
package cl.cromer.azaraka.object;
|
||||
|
||||
import cl.cromer.azaraka.Celda;
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Escenario;
|
||||
import cl.cromer.azaraka.Cell;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
import cl.cromer.azaraka.Scene;
|
||||
import cl.cromer.azaraka.sound.Sound;
|
||||
import cl.cromer.azaraka.sound.SoundException;
|
||||
import cl.cromer.azaraka.sprite.Animation;
|
||||
@ -28,7 +28,7 @@ import java.util.ArrayList;
|
||||
/**
|
||||
* This class handles the portal functionality
|
||||
*/
|
||||
public class Portal extends Object implements Constantes {
|
||||
public class Portal extends Object implements Constants {
|
||||
/**
|
||||
* The current state of the portal
|
||||
*/
|
||||
@ -49,11 +49,11 @@ public class Portal extends Object implements Constantes {
|
||||
/**
|
||||
* Initialize the portal
|
||||
*
|
||||
* @param escenario The scene that contains the portal
|
||||
* @param celda The cell the portal is in
|
||||
* @param scene The scene that contains the portal
|
||||
* @param cell The cell the portal is in
|
||||
*/
|
||||
public Portal(Escenario escenario, Celda celda) {
|
||||
super(escenario, celda);
|
||||
public Portal(Scene scene, Cell cell) {
|
||||
super(scene, cell);
|
||||
setLogger(getLogger(this.getClass(), LogLevel.PORTAL));
|
||||
loadPortalAnimations();
|
||||
}
|
||||
@ -92,17 +92,17 @@ public class Portal extends Object implements Constantes {
|
||||
*/
|
||||
public void purifyGems() {
|
||||
if (state == State.ACTIVE) {
|
||||
ArrayList<Gem> gems = getEscenario().getCanvas().getPlayer().getInventoryGems();
|
||||
ArrayList<Gem> gems = getScene().getCanvas().getPlayer().getInventoryGems();
|
||||
for (Gem gem : gems) {
|
||||
if (gem.getState() == Gem.State.TAINTED) {
|
||||
gem.setState(Gem.State.PURIFIED);
|
||||
getEscenario().getCanvas().getPlayer().gainHealth(2);
|
||||
getScene().getCanvas().getPlayer().gainHealth(2);
|
||||
}
|
||||
}
|
||||
setState(State.INACTIVE);
|
||||
playPortalSound();
|
||||
if (gems.size() == 2) {
|
||||
getEscenario().openDoor(true);
|
||||
getScene().openDoor(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -121,7 +121,7 @@ public class Portal extends Object implements Constantes {
|
||||
*/
|
||||
private void playPortalSound() {
|
||||
try {
|
||||
sound.setVolume(getEscenario().getCanvas().getVolume());
|
||||
sound.setVolume(getScene().getCanvas().getVolume());
|
||||
sound.play();
|
||||
}
|
||||
catch (SoundException e) {
|
||||
@ -203,7 +203,7 @@ public class Portal extends Object implements Constantes {
|
||||
}
|
||||
synchronized (this) {
|
||||
animate();
|
||||
getEscenario().getCanvas().repaint();
|
||||
getScene().getCanvas().repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
package cl.cromer.azaraka.sound;
|
||||
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
|
||||
import javax.sound.sampled.*;
|
||||
import java.io.BufferedInputStream;
|
||||
@ -26,7 +26,7 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* This class handles sound
|
||||
*/
|
||||
public class Sound implements Constantes {
|
||||
public class Sound implements Constants {
|
||||
/**
|
||||
* The path to the sound
|
||||
*/
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
package cl.cromer.azaraka.sprite;
|
||||
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
@ -28,7 +28,7 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* This class handles loading the images and animating the sprite
|
||||
*/
|
||||
public class Animation implements Cloneable, Constantes {
|
||||
public class Animation implements Cloneable, Constants {
|
||||
/**
|
||||
* The collection of all the images that make up the object
|
||||
*/
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
package cl.cromer.azaraka.sprite;
|
||||
|
||||
import cl.cromer.azaraka.Constantes;
|
||||
import cl.cromer.azaraka.Constants;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
@ -26,7 +26,7 @@ import java.util.logging.Logger;
|
||||
/**
|
||||
* This class handles loading the images and sub-images
|
||||
*/
|
||||
public class Sheet implements Constantes {
|
||||
public class Sheet implements Constants {
|
||||
/**
|
||||
* A list of all the textures in the collection
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user