Multi User Dungeon



  • 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. ]


Anmelden zum Antworten