java - 在同一类的实例之间创建连接

标签 java class object

我的任务是创建一个基于文本的游戏,在其中创建三个类。房间、元素和人员。人们可以在其中包含元素的房间之间移动。

我不完全明白应该如何在房间之间创建连接。

这是到目前为止我的代码,我也为人员和项目编写了类,但我决定将其省略,因为它不相关。

public class Game {

    public static void main(String[] args) {

        //I don't like this part of my code.
        Room roomA = new Room();
        Room roomB = new Room();
        Room roomC = new Room();
        Room roomD = new Room();
        roomA = new Room(null,roomD,roomB,null);
        roomB = new Room(null,null,roomC,roomA);
        roomC = new Room(null,null,null,roomB);
        roomD = new Room(roomA,null,null,null);
        roomA = new Room(null,roomD,roomB,null);
        roomB = new Room(null,null,roomC,roomA);
        roomC = new Room(null,null,null,roomB);
    }
}

class Room {
    Room[] exit = new Room[4];

    public Room() {

    }
    public Room(Room north, Room south, Room east, Room west) {
        exit[0] = north;
        exit[1] = south;
        exit[2] = east;
        exit[3] = west;
    }
}

这对于它应该做的事情来说似乎非常复杂。有什么方法可以以不同的方式做到这一点吗?

最佳答案

不要这样做...

Room roomA = new Room();
Room roomB = new Room();
Room roomC = new Room();
Room roomD = new Room();
roomA = new Room(null,roomD,roomB,null);
//...

您正在重新分配房间,这将破坏它们的引用并使其无法导航。

如果你想更容易使用,你可以考虑使用方法链...

roomA.southExit(roomD).eastExit(roomB);

这可能看起来像......

class Room {
    Room[] exit = new Room[4];

    public Room() {

    }

    public Room southExit(Room room) {
        exit[1] = room;
        return this;
    }

    public Room eastExit(Room room) {
        exit[2] = room;
        return this;
    }

    //...
}

另一种方法可能是创建管理导航的Map类。这个想法可能是创建一个房间的 2D 矩阵,Map 可以查找给定的房间并确定玩家可以移动的方向。null单元格表示它已被阻止,非 null 单元格将是玩家可以进入的房间。

从概念上讲,您可以在一张纸上绘制一个网格并绘制出其上的房间,这将为您提供矩阵的“视觉”表示。然后,您需要将其转换为代码,可能使用房间的二维数组,但我会将其包装在 Map 类中,以便更容易查询和管理,但这就是我......

我想这取决于您想要多少复杂性......

关于java - 在同一类的实例之间创建连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247579/

相关文章:

java - 一堆树

python - __new__ = 类型错误 : object() takes no parameters

java - 如何更改 Java 中的特定变量?

java - 尝试创建一个我可以进一步操作的学生数据库

java - 子类中的构造函数参数

java - 如何初始化 react 器 HttpClient 的基本身份验证 header ?

java - 如何使用 Selenium WebDriver 处理身份验证窗口时在 URL 中传递域名

javascript - 删除类 onclick ... angular js

Python类递归

c# - 如何从对象 {System.Collections.Generic.KeyValuePair<string, object> 中提取值?