gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:23:52 24 4
gpt4 key购买 nike

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

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

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com