Java 在同一类的实例之间创建连接
我的任务是创建一个基于文本的游戏,在其中创建三个类。房间、物品和人员。在这里,人们可以在有物品的房间之间移动 我不完全明白我应该如何在房间之间建立连接 这是到目前为止我的代码,我也为个人和物品编写了类,但我决定将其删除,因为它与此无关Java 在同一类的实例之间创建连接,java,class,object,Java,Class,Object,我的任务是创建一个基于文本的游戏,在其中创建三个类。房间、物品和人员。在这里,人们可以在有物品的房间之间移动 我不完全明白我应该如何在房间之间建立连接 这是到目前为止我的代码,我也为个人和物品编写了类,但我决定将其删除,因为它与此无关 public class Game { public static void main(String[] args) { //I don't like this part of my code. Room roomA =
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
单元格将是玩家可以进入的房间
从概念上讲,你可以在一张纸上画一个网格,并在上面画出房间,这将为你提供矩阵的“可视”表示。然后,您可能需要将其转换为代码,可能需要使用一个2D房间数组,但我会将其包装在Map
类中,以使其更易于查询和管理,但这就是我
我想这取决于你想要多复杂…有一件事我认为可能是个问题,那就是你正在创建11个房间。我不确定这是否是您想要的,但是如果您只想创建4,那么这段代码将有问题。例如:
roomB = new Room(null,null,roomC,roomA);
...
roomA = new Room(null,roomD,roomB,null);
roomB = new Room(null,null,roomC,roomA);
roomB
将被设置为新对象。创建roomA
时,将对其进行设置,使其“东”出口指向您创建的roomB
。但是后来,当您再次说roomB=newroom(…)
时,您创建了另一个新对象,其“west”出口是roomA
。请注意,现在有一个“room B”对象,其西门指向“room a”,但同一个“room a”有一个东门指向一个不同的“room B”对象。基本上,网格上有两个(或更多)不同的对象占据相同的空间。我怀疑这不是你想要的
我认为,当你创建相互指向的新对象时,你不能仅用“新建”来完成。最好在Room
like中添加一个方法
setExit(Direction direction, Room destination)
其中,Direction
是一个enum
类型,具有类似的公共enum Direction{北、南、东、西}
。然后从构造函数中删除北
、南
、东
、西
参数。设置房间的代码如下所示
roomA = new Room();
...
roomD = new Room();
roomA.setExit(Direction.SOUTH, roomD);
roomA.setExit(Direction.EAST, roomB);
roomB.setExit(Direction.EAST, roomC);
roomB.setExit(Direction.WEST, roomA);
... and so on
现在你只有四个对象,它们的出口可以相互引用,我想这就是你想要的 到目前为止还不错,为什么这是个问题?如果你想让我的代码使用起来更简单,你可以使用方法链接……是的,我想让我的代码更简单,让那些要检查我的代码的人能够理解。方法链接是一个硬概念吗?它有点多余,因为您必须指定同一连接的两侧。您可以安排一个房间的二维矩阵,并让程序将其连接起来<代码>房间[][]房间=新房间[][{{roomA,roomB},{roomC,roomD}代码>在另一个类门/通道/连接中维护房间之间的连接如何?StackOverflow不是要求代码审查的地方。