Hulp nodig bij items in HashMap

Status
Niet open voor verdere reacties.
Ik bedoelde dat je die regel ( player.pickUp(currentRoom.getItem(); ) aan moet roepen waar je dus iets oppakt uit een kamer. Ik dacht dat jullie daar een soort van command pattern voor gebruikt hadden. ver moet je wel de instanties aangemaakt hebben, is player wel geinitialiseerd ? staat er wel item in de room ? dat soort dingen moet je wel nog even afvangen.
 
Even nog erbij... Als ik de naam van het item wil oproepen ingame doet ie dat wel;) Dus enkel in de inventory zetten gaat het goed mis.
 
Lijkt mij een goed oplosbaar probleem :P als je er echt niet uitkomt dan zal ik er wel even naar kijken
 
Kan je een hint geven? Ik heb geprobeerd om van de methode add niet meer uit player te halen maar uit inventory maar dat helpt ook niks, zou ik dan een andere opzet moeten zoeken en niet jou gegegeben opzet gebruiken?
 
Ok heb er even naar gekeken maar je had een hoop dingen verkeerd gedaan. Er zat een infiniti loop in ( Player had een inventory (die niet geinitialiseerd was) en Inventory maakte in de constructor ook een nieuwe Player aan ). Verder heb ik wat dingen aangepast aangezien er per room maar 1 item is hoef je ook geen lijst bij te houden. quit werkt nu ook btw

http://dl.dropbox.com/u/3380837/game.rar
 
Oke thanks maar er kan enkel nu niet meer door de kamers gelopen omdat die nu een nullpointerexception geeft als je bv "go south" doet;)
 
dat komt omdat de room die south ligt van de currentRoom, geen item in de kamer heeft. vervolgens wordt de description opgevraagt welke null kan zijn.

je kan het oplossen door in de room class, de getLongDescription aan te passen naar het volgende :

[cpp]
public String getLongDescription()
{
String roomItemDescription = "nothing";
if (roomItem != null){
roomItemDescription = roomItem.getItemDescription();
}
return "You are " + description + ".\n" + getExitString() + ".\n" + "There is a " + roomItemDescription + " in the room";

}
[/cpp]
 
Oke nog vraagje, als ik items uit de arraylist van inventory wil verwijderen hoe zal ik dat dan moeten gaan doen? Ik wil ook dat je dan de naam van het item moet invoeren wat je wil gaan verwijderen.
 
dat zou je dan prima met een hashmap kunnen doen. dan koppel je namelijk een naam aan het object
 
Oke ik heb dat gedaan maar nu loop ik echt tegen een probleem waar ik een beetje gek van wordt;P
Ik heb namelijk een object golden_apple en die moet ik kunnen eten en health erbij geeft als ik die oppak en in mijn inventory heb, het leuke is nou: wat is de name van golden_apple? Tis al laat en ik snap er niks meer van op het moment...:(
 
dat is toch gewoon de name die in Item staat ?

je zou dan bijv via de commandline kunnen opvragen welke items je in je inventory hebt, op basis daarvan kan de gebruiker dan zeggen: gebruik [itemname]. dan kan jij op basis van die naam, het object uit de hashmap halen en health er bij doen
 
Ik heb nu dit in de game klasse:

Code:
/** 
     * Try to take an item from the current room. If the item is there,
     * pick it up, if not print an error message.
     */
    private void eat(Command command) 
    {
        if(!command.hasSecondWord()) {
            // if there is no second word, we don't know what to eat...
            System.out.println("What do you want to eat?");
            return;
        }
        String name = command.getSecondWord();
        Item item = p.eat(name);
        if(item == null) {
            System.out.println("Could not eat " + currentRoom.name);            
        } 
    }

en dit in de player klasse

Code:
    /**
     * Eats the item if possible.
     */
    public Item eat(String name) {
        if(name.equals("golden_apple")) {
            //First see if we have a cookie in our inventory
            Item golden_apple   = inv.getItemInInventory(golden_apple);
            if(golden_apple != null) {
                maxWeight += 1;
                return golden_apple;    
            }
        }
        return null;
    }

Enkel nu geeft ie sommige foutmeldingen,,

Bij de methode uit game : name has private in Room
Bij de methode uit player: method getItemInInventory in class Inventory cannot be applied to given types; required no arguments found: Item reason: actual and formal argument lists differ in length

Hoe kan ik dit oplossen?

Ook nog een opmerking:
Je had deze methode gemaakt, maar die geeft itemDescroption terug, het liefst wil ik daar enkel de name terug krijgen
Code:
 public String getLongDescription()
    {
        String roomItemDescription = "nothing";
        if (roomItem != null){
            roomItemDescription = roomItem.getItemDescription();
        }
        return "You are " + description + ".\n" + getExitString() + ".\n" + "There is a " + roomItemDescription + " in the room";
    
    }

EN

Code:
 public String getItemInInventory(){
        String returnValue = "";
        for (Item value : inv){
            returnValue += " "+ value.getItemDescription();
        }
        return returnValue;
    }
 
Laatst bewerkt:
de bovenste methode van getLongDescription heb ik alleen aangepast van de bestaande code die er al was, als je enkel de roomItem wil returnen kan je een nieuwe methode aanmaken die alleen maar roomItem.getItemDescription() retruned. De 2e methode heb ik een typo gemaakt. die wilde ik eignelijk getItemsInInventory noemen, zodat de speler weet welke items die allemaal in z`n inventory heeft.

Betreft je foutmeldingen:

in de player class mag je dit niet doen: Item golden_apple = inv.getItemInInventory(golden_apple); Ik weet niet of je al een nieuwe methode in de inventory class had maar de bestaande methode accepteerd geen parameters.
Verder ben je denk ik de " " vergeten bij inv.getItemInInvetory("golden_apple");
 
Betreft je foutmeldingen:

in de player class mag je dit niet doen: Item golden_apple = inv.getItemInInventory(golden_apple); Ik weet niet of je al een nieuwe methode in de inventory class had maar de bestaande methode accepteerd geen parameters.
Verder ben je denk ik de " " vergeten bij inv.getItemInInvetory("golden_apple");

Ik heb er weer naar gekeken en geprobeerd maar in de player class moet ik toch vergelijk of er wel een "golden_apple" in mijn inv zit. Dit doe je( lijkt mij) door
Code:
if(name.equals("golden_apple")) {
              //First see if we have a golden_apple in our inventory
              Item golden_apple   = inv.addApple("golden_apple");
             if(golden_apple != null) {
                regenHealth();
                return golden_apple;    
             }
         }
         return null;
        }

Enkel welke methode zou ik dan in inventory moeten gebruiken?
 
dat klopt ja maar er zit een groot verschil tussen de volgende regels:

//parameter = String
Item golden_apple = inv.addApple("golden_apple");
//parameter = Object (Item)
Item golden_apple = inv.addApple(golden_apple);

je zult een nieuwe methode moeten maken in je inventory die op basis van een string, een object terug haalt (hashmap)
 
dat maakt uit ja aangezien je niet door middel van een string een object uit de arraylist kan halen. makkelijkste is om daar een hasmap voor te gebruiken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan