C
Ich muss einen auf RMI basierenden Mini-MultiUserDungeon programmieren. Hab da
aber ein bisschen ein Problem! Ich habe alle Räume in einer Hashmap auf dem
Server gespeichert. Wenn eine Person/Spieler von einem raum in den nächsten
geht. Wird die Person aus dem alten Raum gelöscht und im neuen Raum zu einer
Arraylist "hinzugeaddet". Das funzt einwandfrei(abgesehen von der performance ;)), solange ich die räume von hand in der main-methode des Servers
zur HashMap hinzufüge. Wenn ich aber die Räume über die klasse WorldBuilder
hinzufügen lasse geht das nicht mehr. Hier ein stark abgespeckter Pseudocode...
class Server{
//member-variable
HashMap m_AllPlaces; //hashmap in der sich alle Räume befinden
public static void main(String[] args){
Server s = new Server("Java-Mud",Hostaddresse); //server starten
WorldBuilder wb = new WorldBuilder(s.getHashMap());
wb.initalizeWorld("c:\\..."); // räume initalisieren
//zusätzliche räume initaliesieren
MudPlace place1 = new MudPlace("RAUM1","das ist raum1",s.getHashMap());
place.addExit("sueden","raum2");
MudPlace place 2 = new MudPlace("RAUM2","das ist raum1",s.getHashMap());
place.addExit("norden","raum1");
}
}
class WorldBuilder{
HashMap m_AllPlaces;
public WorldBuilder(HashMap AllPlaces){
m_AllPlaces = Allplaces;
}
public void initalizeWorld(){
[...] // langwieriges Einlesen aller Räume und Daten aus Textdateien.
// für jeden raum dann:
MudPlace new_room = new MudPlace(name,description,m_AllPlaces);
m_AllPlaces.put(new_room.getName(),new_room) //füge raum zur HashMap dazu
new_room.addExit("norden","raum2"); // ausgang zu anderem raum setzen
}
//....
}
Ich kann mich jetzt einwandfrei von RAUM1 zu RAUM2 und umgekehrt bewegen. Von
RAUM1 zu einem aus dem WorldBuilder initalisierten raum kann ich mich auch
bewegen, aber ich komme dann nicht mehr von diesem(sagen wir das wär raum3)
zurück zu RAUM1 -> nullpointerexeption. Wenn ich in raum3 nach dem raum1 suche,
dann gibt die HashMap NULL zurück(??).
Der Klasse WorldBuilder wird die HashMap ja als Referenz übergeben. Das heisst wenn ich vom WorldBuilder aus einen Raum hinzufüge wird das ja der HashMap server.m_AllPlaces hinzugefügt. Oder?
[ Dieser Beitrag wurde am 04.02.2003 um 17:04 Uhr von cpt.oneeye editiert. ]
[ Dieser Beitrag wurde am 04.02.2003 um 17:04 Uhr von cpt.oneeye editiert. ]