fixed parts of Dungeon.buildDungeon() fucked up by ericnerdo
This commit is contained in:
		| @@ -1,12 +1,40 @@ | ||||
| package cicaprojekt; | ||||
|  | ||||
| import java.io.*; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| 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 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 | ||||
|             reader.readLine();                                  // throw empty line away | ||||
|             int width = Integer.parseInt(sizedata[0]); | ||||
| @@ -15,11 +43,14 @@ public class Dungeon { | ||||
|             Tile[][] dungeon = new Tile[width][height]; | ||||
|  | ||||
|             String line = null; | ||||
|             Gate gate = new Gate(); | ||||
|             Gate lastgate = gate; | ||||
|             for (int y = 0; y < height; ++y) { | ||||
|             Gate tempgate = new Gate(); | ||||
|             Scale tempscale = new Scale(tempgate, Integer.MAX_VALUE); | ||||
|             int scalecount = 0; | ||||
|             for (int y = 0; y < height; ++y) | ||||
|             { | ||||
|                 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 | ||||
|                     { | ||||
|                         case 'W': | ||||
| @@ -55,23 +86,33 @@ public class Dungeon { | ||||
|                             break; | ||||
|  | ||||
|                         case 'G': | ||||
|                             dungeon[y][x] = gate; | ||||
|                             lastgate = gate; | ||||
|                             gate = new Gate(); | ||||
|                             dungeon[y][x] = tempgate; | ||||
|                             break; | ||||
|  | ||||
|                         case 'S': | ||||
|                             dungeon[y][x] = new Scale(lastgate, 5); | ||||
|                             dungeon[y][x] = tempscale; | ||||
|                             scalecount++; | ||||
|                             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 */ | ||||
|             for (int y = 0; y < height; ++y) { | ||||
|                 for (int x = 0; x < width; ++x) { | ||||
|             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 | ||||
| @@ -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