如何为基本的基于文​​本的游戏清单引用Java方法中的类实例?

时间:2018-07-17 01:52:21

标签: java inventory text-based

我正在尝试用Java制作基于文本的游戏。我提出了一个非常基本的文本清单,并提供了几种方法:一种是在找到新项目时添加新项目,一种是在使用时将其删除,以及一种打开清单本身的方法。我曾经将这些项目称为字符串,但是我还需要一个描述和一个“找到的”布尔值来触发一些选择,因此我决定将它们转换为对象。

对于上下文:我的库存是一个ArrayList,因为我需要一个动态解决方案来随时随地添加潜在物品。

我的问题:当我尝试引用“ item”的名称时,我得到的是我创建的最后一个Item的值,而不是我放入“ addItem()”方法中的那个的值。

//My class, for reference:

public class Item {

static String name;
static String description;
static boolean isOwned = false;

public Item(String name, String description, boolean isOwned) {
    this.name = name;
    this.description = description;
    this.isOwned = isOwned;
}

public static String getName() {
    return name;
}

public static String getDescription() {
    return description;
}

public static boolean isOwned(boolean owned) {
    if (owned) {
        isOwned = true;
    } else if (!owned) {
        isOwned = false;
    }
    return isOwned;
}

这是我为广告资源创建的方法:

public static void addItem(Item obj) {
    inventory.add(Item.name);
    if (!startScreen) { //This is to prevent the method from printing out an
//output in the start screen, while doing some background "addItem()" processes.

        System.out.println("-------------------------------------------");
        System.out.println("\n> You have a new item: " + Item.name + ".");
        Item.isOwned(true);
    }
}

public static void removeItem(Item obj) {
    inventory.remove(Item.name);
    System.out.println("-------------------------------------------\n");
    System.out.println("> " + Item.name + " used.");
}

public static void openInventory() {
    System.out.print("> Your inventory: |");
    for (String item : inventory) {
        System.out.print(" " + item + " | ");
    }
    System.out.println("-------------------------------------------\n");
    System.out.println("> To use an item, please type the exact name."
            + "\n> Type 'X' to close the inventory.");

    String interact = in.

        if (interact.equals("x")) {
            break;
        }
    }

}

现在,假设我创建了两个项目,但只想添加第一个项目:

static Item sealedLetter = new Item(
    "Sealed Letter", //name
    "A letter from a desperate man to his beloved. It holds many secrets.", //description
    false); //'Found' State

static Item musicSheet = new Item(
    "Music Sheet", //name
    "A music sheet holding a melancholic melody in D minor. Someone might appreciate its gloomy tune.", //description
    false); //'Found' State

addItem(sealedLetter);

由于某种原因,我的输出将是这样,并且仅与最后创建的项目有关:

  

“您有一个新项目:音乐单。”

正如您将看到的,我试图引用项目中的变量和方法中的单个对象,但这似乎不起作用。为库存中的每个物料创建一种方法显然既不实用也不有效,尽管可以解决此问题。我究竟做错了什么?我不是使用正确的参数来引用对象吗?

我敢肯定,我的这个问题可能会帮助一些希望实施比我的系统更好的系统的人-当然,如果我能使它工作!

0 个答案:

没有答案