diff --git a/cicaprojekt/Dungeon.java b/cicaprojekt/Dungeon.java index bf2a67e..3590fa7 100644 --- a/cicaprojekt/Dungeon.java +++ b/cicaprojekt/Dungeon.java @@ -5,82 +5,107 @@ import java.io.*; public class Dungeon { cicaprojekt.Tile buildDungeon(File input) throws IOException { - Menu.addTab(); - System.out.println(">" + "[" + ":" + this.getClass().getSimpleName() + "]" + Menu.tabulator + "Dungeon.buildDungeon(" + input + ")"); + Menu.addTab(); + System.out.println(">" + "[" + ":" + this.getClass().getSimpleName() + "]" + Menu.tabulator + "Dungeon.buildDungeon(" + input + ")"); - try(BufferedReader reader = new BufferedReader(new FileReader(input))) - { - String[] sizedata = reader.readLine().split("x"); // read size data at beginning of file - reader.readLine(); // throw empty line away - int width = Integer.parseInt(sizedata[0]); - int height = Integer.parseInt(sizedata[1]); - - Tile[][] dungeon = new Tile[width][height]; - - String line = null; Tile oneilllocation = null; Tile jaffalocation = null; - Gate gate = new Gate(); - Gate lastgate = gate; - for (int y = 0; y < height; ++y) + try(BufferedReader reader = new BufferedReader(new FileReader(input))) { - line = reader.readLine().replaceAll("\\s",""); // read line and remove whitespaces - for (int x = 0; x < width; ++x) + String[] sizedata = reader.readLine().split("x"); // read size data at beginning of file + reader.readLine(); // throw empty line away + int width = Integer.parseInt(sizedata[0]); + int height = Integer.parseInt(sizedata[1]); + + Tile[][] dungeon = new Tile[width][height]; + + String line = null; + Gate gate = new Gate(); + Gate lastgate = gate; + for (int y = 0; y < height; ++y) { - switch (line.charAt(x)) // set the dungeon up + line = reader.readLine().replaceAll("\\s",""); // read line and remove whitespaces + for (int x = 0; x < width; ++x) { - case 'W': - dungeon[y][x] = new Wall(); - break; + switch (line.charAt(x)) // set the dungeon up + { + case 'W': + dungeon[y][x] = new Wall(); + break; - case 'F': - dungeon[y][x] = new Field(); - break; + case 'F': + dungeon[y][x] = new Field(); + break; - case 'Z': - Field zpmfield = new Field(); - zpmfield.setItemOnTile(new ZPM()); - dungeon[y][x] = zpmfield; - break; + case 'Z': + Field zpmfield = new Field(); + zpmfield.setItemOnTile(new ZPM()); + dungeon[y][x] = zpmfield; + break; - case 'B': - Field boxfield = new Field(); - boxfield.setItemOnTile(new Box()); - dungeon[y][x] = boxfield; - break; + case 'B': + Field boxfield = new Field(); + boxfield.setItemOnTile(new Box()); + dungeon[y][x] = boxfield; + break; - case 'O': - Field oneillfield = new Field(); - dungeon[y][x] = oneillfield; - oneilllocation = oneillfield; - break; + case 'O': + Field oneillfield = new Field(); + dungeon[y][x] = oneillfield; + oneilllocation = oneillfield; + break; - case 'J': - Field jaffafield = new Field(); - dungeon[y][x] = jaffafield; - jaffalocation = jaffafield; - break; + case 'J': + Field jaffafield = new Field(); + dungeon[y][x] = jaffafield; + jaffalocation = jaffafield; + break; - case 'G': - dungeon[y][x] = gate; - lastgate = gate; - gate = new Gate(); - break; + case 'G': + dungeon[y][x] = gate; + lastgate = gate; + gate = new Gate(); + break; - case 'S': - dungeon[y][x] = new Scale(lastgate, 5); - break; + case 'S': + dungeon[y][x] = new Scale(lastgate, 5); + break; + } + } + } + + // NOTE: code seems to be correct till this point based on a debugger run-through + + /* setting up Tile cross references */ + for (int y = 0; y < height; ++y) + { + for (int x = 0; x < width; ++x) + { + if (x-1 >= 0) // leftwards Tile reference + dungeon[y][x].setAdajacentTile(dungeon[y][x-1], Direction.WEST); + else + dungeon[y][x].setAdajacentTile(null, Direction.WEST); + + if (x+1 < width) // rightwards Tile reference + dungeon[y][x].setAdajacentTile(dungeon[y][x+1], Direction.EAST); + else + dungeon[y][x].setAdajacentTile(null, Direction.EAST); + + if (y+1 < height) // upwards Tile reference + dungeon[y][x].setAdajacentTile(dungeon[y+1][x], Direction.NORTH); + else + dungeon[y][x].setAdajacentTile(null, Direction.NORTH); + + if (y-1 >= 0) // downwards Tile reference + dungeon[y][x].setAdajacentTile(dungeon[y-1][x], Direction.SOUTH); + else + dungeon[y][x].setAdajacentTile(null, Direction.SOUTH); } } } - // TODO: set up cross references in dungeon matrix - // NOTE: code seems to be correct til this point based on a debugger run-through - - } - - System.out.println("<" + "[" + ":" + this.getClass().getSimpleName() + "]" + Menu.tabulator + "Dungeon.buildDungeon()"); - Menu.removeTab(); - return new cicaprojekt.Field(); /*csak hogy ne sírjon*/ + System.out.println("<" + "[" + ":" + this.getClass().getSimpleName() + "]" + Menu.tabulator + "Dungeon.buildDungeon()"); + Menu.removeTab(); + return oneilllocation; } }