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.");
}