added scale-gate references to dungeon files and their parser
This commit is contained in:
		@@ -1,9 +1,35 @@
 | 
				
			|||||||
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;
 | 
				
			||||||
@@ -17,8 +43,9 @@ 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);
 | 
				
			||||||
 | 
					            int scalecount = 0;
 | 
				
			||||||
            for (int y = 0; y < height; ++y)
 | 
					            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
 | 
				
			||||||
@@ -59,19 +86,27 @@ 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)
 | 
				
			||||||
@@ -100,6 +135,11 @@ public class Dungeon {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return oneilllocation;
 | 
					
 | 
				
			||||||
 | 
					        Map<String, Tile> playermap = new HashMap<>();
 | 
				
			||||||
 | 
					        playermap.put("oneill", oneilllocation);
 | 
				
			||||||
 | 
					        playermap.put("jaffa", jaffalocation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return playermap;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,3 +5,5 @@ W O B S W
 | 
				
			|||||||
W W G W W
 | 
					W W G W W
 | 
				
			||||||
W F Z F W
 | 
					W F Z F W
 | 
				
			||||||
W W W W W
 | 
					W W W W W
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1-3-2-2-5
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user