Inventory

Põhimõte

Inventory on tavaliselt kogum, kus mängija saab hoida teatud ressursse või esemeid (item), nagu näiteks toitu, varustust ja/või relvi. Inventory võime implementeerida klassina, mis salvestab mängija esemeid massiivis. Samuti loome eraldi klassi Item.

Item

Esmalt implementeerime Item klassi. See võiks sisaldada eseme kirjeldust või omadusi, nagu näiteks nimi, tugevus, vastupidavus, tähendus jms., olenevalt mis tüüpi esemeid Sa planeerid oma mängus kasutada.

public class Item {
    private final String name;

    public Item(String name) {
        this.name = name;
        // Siia võib lisada rohkem omadusi
    }

    public String getName() {
        return name;
    }
}

Inheritance

Item klass võib olla baasiks erinevatele esemetele, nagu Weapon ja Food, mis laiendavad selle funktsionaalsust. Inheritance ehk päriluse abil saame luua uusi klasse, mis põhinevad olemasolevatel. Näiteks on allpool Weapon klass, mis on laiendus Item klassist. Kõik Item omadused on ka Weapon klassil, kuid see saab lisada ka oma omadusi, nagu damage.

public class Weapon extends Item {
     private final int damage;

     public Weapon(String name, int damage) {
         super(name);
         this.damage = damage;
     }

     public int getDamage() {
         return damage;
     }
 }

Selle loogikaga saab ka teha stackable asju ehk asju, mida on ühe inventory koha peal mitu. Näiteks inventory hoiab viite õuna ühe koha peal.

public class StackableItem extends Item {
private int quantity;

public StackableItem(String name, int quantity) {
    super(name);
    this.quantity = quantity;
}

public int getQuantity() {
    return quantity;
}

public void addQuantity(int amount) {
    this.quantity += amount;
}

}

Inventory

Kui Item klass on defineeritud, saame luua Inventory klassi. Selle jaoks kasutame massiivi, kus hoida Item objekte ning võime defineerida, kui suur see on.

public class Inventory {
    private final ArrayList<Item> items;
    private final int maxCapacity;

    public Inventory(int maxCapacity) {
        this.maxCapacity = maxCapacity;
        this.items = new ArrayList<>();
    }

    public boolean addItem(Item item) {
        if (items.size() < maxCapacity) {
            items.add(item);
            return true;
        }
        return false;
    }

    public void removeItem(Item item) {
        items.remove(item);
    }

    public ArrayList<Item> getItems() {
        return items;
    }

    public int getMaxCapacity() {
        return maxCapacity;
    }
}

Näide Inventory kasutamisest

Inventory inventory = new Inventory(10); // Loome uue inventari, kus on maksimaalselt 10 eset

Item key = new Item("Key"); // Loome uue eseme nimega Key
Weapon sword = new Weapon("Sword", 15); // Loome uue eseme nimega Sword, damage=15

inventory.addItem(key); // Lisame eseme inventari
inventory.removeItem(key); // Eemaldame eseme inventarist

Tihti on vaja kahe erineva inventory vahel asju liigutada. Näiteks teise mängijaga asju vahetada või asju kasti tõsta. Selleks on mõistlik luua inventory klassi abimeetod transferItemTo().

public boolean transferItemTo(Item item, Inventory targetInventory) {

    if (this.items.contains(item) && targetInventory.addItem(item)) { // Kui selles inventaris on asi ja teise inventaari lisame asja

        this.removeItem(item); // Võtame algsest inventaarist asja ära
        return true;
    }
    return false;
}

Nüüd saame asjad ümber tõsta.

Inventory playerInventory = new Inventory(5);
Inventory chestInventory = new Inventory(10);

Item apple = new Item("Apple");

playerInventory.addItem(apple);

boolean success = playerInventory.transferItemTo(apple, chestInventory); // Tõstame õuna mängijalt kirstu

if (success) {
    System.out.println("Apple transferred successfully!");
} else {
    System.out.println("Transfer failed.");
}

Lisaks abistavaid blogisid, tutoriale