我的任务是创建一个基于文本的游戏,在其中创建三个类。房间、元素和人员。人们可以在其中包含元素的房间之间移动。
我不完全明白应该如何在房间之间创建连接。
这是到目前为止我的代码,我也为人员和项目编写了类,但我决定将其省略,因为它不相关。
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/