如何为游戏制作不同对象的2D数组

时间:2017-06-24 04:24:05

标签: java arrays

我对Java很新,我试图为我的一个班级制作一个基于文本的游戏。 我所知道的是,当你制作一个二维数组时,它的内容必须是它的日期类型。比如,Int [] [] array = new int [3] [3]。有了这个,我只能在这个2D数组中存储整数。但是,我想为我的游戏制作瓷砖/地图。我想生成不同类型的对象并将它们存储在2D数组中,以便我可以拥有我的游戏地图。例如,我想在第1行第8列中存储Cat对象,然后,我想在第1行第2列等中存储Food对象......

我试过这样做, 为简单起见,它只是一个伪代码。

Object[][] objectlist = new Object[6][10];
objectlist[0][8] = new Cat("Black");
objectlist[0][2] = new Food("Tuna");

然后每当我调用类方法时都会这样。

System.out.println(objectlist[0][8].getColor());
System.out.println(objectlist[0][2].getFood());

所以是的,请原谅我,如果这太基础,但就像我说的,我是java的新手。 无论如何,最初这是我想到的,如果我制作地图/瓷砖。 如果有任何其他方法来处理这个或另一个替代方案,我很乐意听到你的声音。

3 个答案:

答案 0 :(得分:1)

由于您需要为此2D数组中表示的每个实体使用泛型类型的对象,因此您可以像使用一样使用Object。但这意味着,你必须在每次需要时为你的班级特定属性投射。

我宁愿说如果对象存储在同一个数组中,如果它们有一些共同的行为,为什么不使用接口。

public interface Entity {
    public String behavior();
}

public class Cat implements Entity{
    public String getColor() {
    // something to do
    }

    public String behavior() {
        getColor();
    }
}

public class Food implements Entity{
    public String getFood() {
    // something to do
    }

    public String behavior() {
        getFood();
    }
}

然后您可以将数组定义为

Entity entities[][] = new Entity[6][10];
entities[0][2] = new Food();
entities[0][8] = new Cat();

然后将其打印出来

System.out.println(entities[0][2].behavior());
System.out.println(entities[0][8].behavior());

不需要强制转换,也无需知道需要为每个对象调用哪种方法。

答案 1 :(得分:0)

getColor()getFood()方法不属于Object类,因此您需要向下转发

根据您的对象和使用方法进行投射

System.out.println(((Cat)objectlist[0][8]).getColor());
System.out.println(((Food)objectlist[0][2]).getFood());

您可以使用instanceof运算符来测试对象是否是指定类型的实例(类或子类或接口)。

答案 2 :(得分:0)

需要转换为正确的类对象。最好在演员之前检查对象是否是该类的实例。

if (objectlist[0][8] instanceof Cat) {
    System.out.println(((Cat)objectlist[0][8]).getColor());
}