fixed parts of Dungeon.buildDungeon() fucked up by ericnerdo
This commit is contained in:
		| @@ -1,12 +1,40 @@ | |||||||
| package cicaprojekt; | package cicaprojekt; | ||||||
|  |  | ||||||
| import java.io.*; | import java.io.*; | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
| public class Dungeon { | public class Dungeon { | ||||||
|     cicaprojekt.Tile buildDungeon(File input) throws IOException { |     /* NOTE: this function assumes that the parameter input is a well-formatted dungeon file. | ||||||
|  |      * Such file looks like as follows: | ||||||
|  |      * | ||||||
|  |      * <map width>x<map height> | ||||||
|  |      * <empty line> | ||||||
|  |      * <map matrix line 1> | ||||||
|  |      * ... | ||||||
|  |      * ... | ||||||
|  |      * <map matrix line <map height>> | ||||||
|  |      * <empty line> | ||||||
|  |      * <scale y>-<scale x>-<gate y>-<gate x>-<scale trigger weight> | ||||||
|  |      * ... | ||||||
|  |      * ... | ||||||
|  |      * <scale y>-<scale x>-<gate y>-<gate x>-<scale trigger weight> | ||||||
|  |      * | ||||||
|  |      * where the map matrix is a matrix of the following chars: | ||||||
|  |      * W: Wall | ||||||
|  |      * F: Field | ||||||
|  |      * Z: Field with a ZMP | ||||||
|  |      * B: Field with a Box | ||||||
|  |      * O: Field with ONeill | ||||||
|  |      * J: Field with Jaffa | ||||||
|  |      * G: Gate | ||||||
|  |      * S: Scale                                                                                 */ | ||||||
|  |     Map<String, Tile> buildDungeon(File input) throws IOException | ||||||
|  |     { | ||||||
|         Tile oneilllocation = null; |         Tile oneilllocation = null; | ||||||
|         Tile jaffalocation = null; |         Tile jaffalocation = null; | ||||||
|         try (BufferedReader reader = new BufferedReader(new FileReader(input))) { |         try(BufferedReader reader = new BufferedReader(new FileReader(input))) | ||||||
|  |         { | ||||||
|             String[] sizedata = reader.readLine().split("x");   // read size data at beginning of file |             String[] sizedata = reader.readLine().split("x");   // read size data at beginning of file | ||||||
|             reader.readLine();                                  // throw empty line away |             reader.readLine();                                  // throw empty line away | ||||||
|             int width = Integer.parseInt(sizedata[0]); |             int width = Integer.parseInt(sizedata[0]); | ||||||
| @@ -15,11 +43,14 @@ public class Dungeon { | |||||||
|             Tile[][] dungeon = new Tile[width][height]; |             Tile[][] dungeon = new Tile[width][height]; | ||||||
|  |  | ||||||
|             String line = null; |             String line = null; | ||||||
|             Gate gate = new Gate(); |             Gate tempgate = new Gate(); | ||||||
|             Gate lastgate = gate; |             Scale tempscale = new Scale(tempgate, Integer.MAX_VALUE); | ||||||
|             for (int y = 0; y < height; ++y) { |             int scalecount = 0; | ||||||
|  |             for (int y = 0; y < height; ++y) | ||||||
|  |             { | ||||||
|                 line = reader.readLine().replaceAll("\\s","");  // read line and remove whitespaces |                 line = reader.readLine().replaceAll("\\s","");  // read line and remove whitespaces | ||||||
|                 for (int x = 0; x < width; ++x) { |                 for (int x = 0; x < width; ++x) | ||||||
|  |                 { | ||||||
|                     switch (line.charAt(x))                     // set the dungeon up |                     switch (line.charAt(x))                     // set the dungeon up | ||||||
|                     { |                     { | ||||||
|                         case 'W': |                         case 'W': | ||||||
| @@ -55,23 +86,33 @@ public class Dungeon { | |||||||
|                             break; |                             break; | ||||||
|  |  | ||||||
|                         case 'G': |                         case 'G': | ||||||
|                             dungeon[y][x] = gate; |                             dungeon[y][x] = tempgate; | ||||||
|                             lastgate = gate; |  | ||||||
|                             gate = new Gate(); |  | ||||||
|                             break; |                             break; | ||||||
|  |  | ||||||
|                         case 'S': |                         case 'S': | ||||||
|                             dungeon[y][x] = new Scale(lastgate, 5); |                             dungeon[y][x] = tempscale; | ||||||
|  |                             scalecount++; | ||||||
|                             break; |                             break; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             // NOTE: code seems to be correct till this point based on a debugger run-through |             reader.readLine();                                  // throw empty line away | ||||||
|  |  | ||||||
|  |             for (int i = 0; i < scalecount; ++i)    // set up scale-gate connections | ||||||
|  |             { | ||||||
|  |                 String[] scaledata = reader.readLine().split("-"); | ||||||
|  |  | ||||||
|  |                 dungeon[Integer.parseInt(scaledata[0])][Integer.parseInt(scaledata[1])] = | ||||||
|  |                         new Scale((Gate)dungeon[Integer.parseInt(scaledata[2])][Integer.parseInt(scaledata[3])], | ||||||
|  |                                 Integer.parseInt(scaledata[4])); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             /* setting up Tile cross references */ |             /* setting up Tile cross references */ | ||||||
|             for (int y = 0; y < height; ++y) { |             for (int y = 0; y < height; ++y) | ||||||
|                 for (int x = 0; x < width; ++x) { |             { | ||||||
|  |                 for (int x = 0; x < width; ++x) | ||||||
|  |                 { | ||||||
|                     if (x-1 >= 0)       // leftwards Tile reference |                     if (x-1 >= 0)       // leftwards Tile reference | ||||||
|                         dungeon[y][x].setAdajacentTile(dungeon[y][x-1], Direction.WEST); |                         dungeon[y][x].setAdajacentTile(dungeon[y][x-1], Direction.WEST); | ||||||
|                     else |                     else | ||||||
| @@ -94,6 +135,11 @@ public class Dungeon { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         return oneilllocation; |  | ||||||
|  |         Map<String, Tile> playermap = new HashMap<>(); | ||||||
|  |         playermap.put("oneill", oneilllocation); | ||||||
|  |         playermap.put("jaffa", jaffalocation); | ||||||
|  |  | ||||||
|  |         return playermap; | ||||||
|     } |     } | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user