Zuul Remake в выпуске Java HashMap - PullRequest
0 голосов
/ 28 марта 2012

Я делаю часть курсовой работы на Java, используя BlueJ.Нам нужно добавить новые функции в текстовую игру Zuul.Я решил начать работать над системой инвентаря и предметов.У меня проблемы с разработкой наилучшего способа сделать это, поэтому я просто ошеломил это.Вот мой кодИзвините, я еще не успел все прокомментировать.Игра компилируется, но я получаю исключение в консоли при запуске игры.

Ошибка:

java.lang.NullPointerException
    at Game.createPlayer(Game.java:15)
    at Game.<init>(Game.java:7)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at bluej.runtime.ExecServer$3.run(ExecServer.java:740)

Game Class (Это эквивалент основного класса в Java, здесьигра запускается из):

import java.util.*;

public class Game
{
    public Game()
    {
        createPlayer();
        createItems();
    }

    private Entity localPlayer;

    public void createPlayer(){
        Player localPlayer = new Player("Player Name", 0, 0, 0, 0, 0);
        localPlayer.equipArmour("Helm", armourDB.get("Helm")); // This is where I think I have gone wrong
    }

    // Create global hashmap variables
    private HashMap<String, Weapon> weaponsDB;
    private HashMap<String, Armour> armourDB;
    private HashMap<String, Supplement> supplementDB;

    public void createItems(){
        // Create weapons
        weaponsDB = new HashMap<String, Weapon>();

        Weapon weaponFists = new Weapon("Fists", "Weapon", 0, 0, 0, 0, 0, "Melee");
        Weapon weaponSword = new Weapon("Sword", "Weapon", 0, 0, 0, 0, 0, "Melee");
        Weapon weaponBow = new Weapon("Bow", "Weapon", 0, 0, 0, 0, 0, "Ranged");
        Weapon weaponDagger = new Weapon("Dagger", "Weapon", 0, 0, 0, 0, 0, "Melee");

        weaponsDB.put("Fists", weaponFists);
        weaponsDB.put("Sword", weaponSword);
        weaponsDB.put("Bow", weaponBow);
        weaponsDB.put("Dagger", weaponDagger);

        // Create armour
        armourDB = new HashMap<String, Armour>();

        Armour armourBreastplate = new Armour("Breatplate", "Chest", 0, 0, 0, 0, 0);
        Armour armourHelm = new Armour("Helm", "Head", 0, 0, 0, 0, 0);

        armourDB.put("Breastplate", armourBreastplate);
        armourDB.put("Helm", armourHelm);

        // Create supplements
        supplementDB = new HashMap<String, Supplement>();

        Supplement supplementHealthPotion = new Supplement("Health Potion", 0, 0);
        Supplement supplementPowerPotion = new Supplement("Power Potion", 0, 0);

        supplementDB.put("Health Potion", supplementHealthPotion);
        supplementDB.put("Power Potion", supplementPowerPotion);
    }
}

Entity Class (Строительство для класса игрока и класса врага):

import java.util.*;

public class Entity
{
    private boolean entityStatus;

    private String entityName;
    private int entityHealth;
    private int entityPower;
    private int entityHealthRegen;
    private int entityPowerRegen;
    private int entityAttackPower;

    private HashMap<String, Armour> entityEquipment;
    private ArrayList<Item> entityInventory;    

    public Entity(
        String paramEntityName,
        int paramEntityHealth,
        int paramEntityPower,
        int paramEntityHealthRegen,
        int paramEntityPowerRegen,
        int paramEntityAttackPower)
    {
        entityStatus = true;

        entityName = paramEntityName;
        entityHealth = paramEntityHealth;
        entityPower = paramEntityPower;
        entityHealthRegen = paramEntityHealthRegen;
        entityPowerRegen = paramEntityPowerRegen;
        entityAttackPower = paramEntityAttackPower;

        entityEquipment = new HashMap<String, Armour>(); // Set all possible equipment slots to null on initial run
        entityEquipment.put("Head", null);
        entityEquipment.put("Shoulders", null);
        entityEquipment.put("Chest", null);
        entityEquipment.put("Hands", null);
        entityEquipment.put("Legs", null);
        entityEquipment.put("Feet", null);
        entityEquipment.put("Weapon", null);

        entityInventory = new ArrayList<Item>();
    }

    public boolean getEntityStatus(){
        return entityStatus;
    }

    public String getEntityName(){
        return entityName;
    }

    public int getEntityHealth(){
        return entityHealth;
    }

    public int getEntityPower(){
        return entityPower;
    }

    public int getEntityHealthRegen(){
        return entityHealthRegen;
    }

    public int getEntityPowerRegen(){
        return entityPowerRegen;
    }

    public int getEntityAttackPower(){
        return entityAttackPower;
    }

    // Equips the player with an item into the equipment slot
    public void equipArmour(String paramEquipmentSlot, Armour paramArmourName){
        entityEquipment.put(paramEquipmentSlot, paramArmourName);
    }

    public void printInventory(){
        System.out.println("Something");
    }
}

Я думаю, что главная проблема в том, что я не могу обернуть головувокруг использования хэштегов мне нужно увидеть живой пример, чтобы увидеть, как это работает.Кто-нибудь может помочь?Если тебе понадобится что-нибудь еще от меня, дай мне знать.

1 Ответ

1 голос
/ 28 марта 2012

Ну, это проблема:

armourDB.get("Helm")

Вы не инициализировали armourDB на тот момент.Если вы позвоните createItems() до createPlayer(), это будет нормально для этой конкретной линии.Но вы все равно не будете инициализировать переменную isntance с именем localPlayer.Вы будете присваивать значение только переменной local , объявленной в createPlayer.

Если честно, не совсем понятно, чего вы пытаетесь достичь, но это первоедве проблемы ...

...