I'm using a Map in my application to store each location within a fictional game map. The current implementation allows me to get the start node, ie Tiberius
.
But I'm not sure how I can get to the next location
on the map relative to the current location the player is at. For example when I create the map I am at "Tiberius" by default, so I'm wondering how I can create a method that will iterate to the next location, which would be "Desert" while a subsequent call to move()
would bring the player to "Jerusalem".
The graph is wired up as shown below with each location having a child location.
From a quick search I see that a list can be iterated through by a field in the ID, like this get element by ID but in this implementation I need to get the next location relative to the current location.
Does anyone know how this method could be implemented?
This is how I've set up the map at the moment in my main class:
public class Main implements Commands{
public static void main(String[] args) {
//Boolean to signify game state
boolean gameNotOver = true;
//main game loop
while (gameNotOver) {
GameMap playerMap = new GameMap();
playerMap.getStartNode();
Main mainObj = new Main();
//Take in user commands here
//and parse commands
String input = Input.getInput();
if (input.equals("description")) {
System.out.println("Description: " );
} else if (input.equals("move")) {
System.out.println("Moving to the next location in map.. " );
mainObj.move();
}
//Game over
System.out.println("Game Over!");
System.exit(0);
}
//Game player commands inherited from GameCharacterInterface:
public String move() {
//want to create a method here that will call the next
//location based on the current location that the player is in.
// TODO Auto-generated method stub
return null;
}
}
This is the Location class used to model the locations:
public class Location {
private Location[] location;
private int id;
private String description;
private String weight;
private String name;
private Item item;
private Exit[] exit;
private boolean visited = false;
private boolean goalLocation;
private int approximateDistanceFromGoal = 0;
private Location parent;
private Map<Location, Integer> children = new HashMap<Location, Integer>();
public Location() {
super();
}
public Location(String name){
this.name = name;
}
public Location(String name, int goalDistance){
this.name = name;
this.approximateDistanceFromGoal = goalDistance;
}
public Location[] children(){
return (Location[]) children.keySet().toArray(new Location[children.size()]);
}
public int getDistance(Location loc){
if(children.get(loc) == null) System.out.println(this.name + ": " + loc.getName());
return children.get(loc);
}
public int getChildLocationCount(){
return children.size();
}
public void addChildLocation(Location child, int distance){
children.put(child, distance);
}
public boolean isLeaf(){
if (children.size() > 0){
return false;
}else{
return true;
}
}
public void removeChild(Location child){
children.remove(child);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescription ()
{
return description;
}
public void setDescription (String description)
{
this.description = description;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getName ()
{
return name;
}
public void setName (String name)
{
this.name = name;
}
public Exit[] getExit() {
return exit;
}
public void setExit(Exit[] exit) {
this.exit = exit;
}
public Location[] getLocation() {
return location;
}
public void setLocation(Location[] location) {
this.location = location;
}
public boolean isVisited() {
return visited;
}
public void setVisited(boolean visited) {
this.visited = visited;
}
public boolean isGoalLocation() {
return goalLocation;
}
public void setGoalLocation(boolean goalLocation) {
this.goalLocation = goalLocation;
}
public int getApproximateDistanceFromGoal() {
return approximateDistanceFromGoal;
}
public void setApproximateDistanceFromGoal(int approximateDistanceFromGoal) {
this.approximateDistanceFromGoal = approximateDistanceFromGoal;
}
public Location getParent() {
return parent;
}
public void setParent(Location parent) {
this.parent = parent;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
@Override
public String toString() {
return "Location [location=" + Arrays.toString(location) + ", id=" + id
+ ", description=" + description + ", name=" + name + ", item="
+ item + ", exit=" + Arrays.toString(exit) + "]";
}
}
And this is the GameMap showing each of the locations and the getStartNode():
public class GameMap {
private Location tiberius;
public GameMap() {
//Creating Locations
tiberius = new Location("Tiberius", 200);
tiberius.setDescription("You are in the city of Tiberius. There is a sword on the ground in front of you. You see a long street with high buildings and a castle.You see an exit to the south.");
Location desert = new Location("Desert", 170);
desert.setDescription("You are in hot dreary desert, surrounded by sand dunes and nothingness, you see an exit to the south.");
Location jerusalem = new Location("Jerusalem", 270);
jerusalem.setDescription("You are at battlefield of Jerusalem. You are in awe of your surroundings, you see an exit to the west.");
Location hattin = new Location("Hattin", 120);
hattin.setDescription("You are at battlefield of Hattin. You see the ruination of the battle and fallen comrades...You see an exit to the north.");
Location damascus = new Location("Damascus", 130);
damascus.setDescription("You are in Damascus. You see the some shady characters...you see an exit to the west.");
Location tripoli = new Location("Tripoli", 80);
tripoli.setDescription("You are in Tripoli. You see the some more shady characters...you see an exit to the north.");
Location antioch = new Location("Antioch", 60);
antioch.setDescription("You are in the city of Antioch. You see a long street with high buildings and a castle.. You see the some more shady characters...you see an exit to the north.");
Location sis = new Location("Sis", 100);
sis.setDescription("You are in the city of Sis....exit ahead in the west.");
Location tarsus = new Location("Tarsus", 20);
tarsus.setDescription("You are in the city of Tarsus. ...you see an exit to the south.");
Location cyprus = new Location("Cyprus", 0);
cyprus.setDescription("You have reached the Byzantine Empire, your quest has finished!");
cyprus.setGoalLocation(true);
//Adding child locations
tiberius.addChildLocation(desert, 105);
desert.addChildLocation(jerusalem, 105);
jerusalem.addChildLocation(hattin, 323);
hattin.addChildLocation(damascus, 121);
damascus.addChildLocation(tripoli, 121);
tripoli.addChildLocation(antioch, 220);
antioch.addChildLocation(sis, 126);
sis.addChildLocation(tarsus, 121);
tarsus.addChildLocation(cyprus, 126);
}
public Location getStartNode(){
System.out.println(tiberius.toString());
return tiberius;
}
}