我的任务是创建一个基于文本的游戏,您可以在其中创建三个类。房间,物品和人员。人们可以在房间之间移动物品。
我不完全明白我应该如何在房间之间建立连接。
到目前为止,这是我的代码,我已经编写了人员和项目的类,但我决定将其删除,因为它不相关。
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;
}
}
这似乎非常复杂。有没有办法以不同的方式做到这一点?
答案 0 :(得分:2)
不要......
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
类。这个想法可能是创建一个房间的二维矩阵,Map
可以查找给定的房间并确定玩家可以移动的方向。null
单元格意味着它被阻挡,非null
单元格将是玩家可以进入的房间。
从概念上讲,你可以在一张纸上绘制一个网格并绘制出它上面的房间,这将为你提供矩阵的“视觉”表示。然后你需要将它转换成代码,可能使用2D数组的房间,但我会将它包装在Map
类中,以便更容易查询和管理,但那就是我......
我想这取决于你想要多少复杂性......
答案 1 :(得分:0)
我认为可能有问题的一件事是你创造了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 = new Room(...)
时,您会创建另一个“西”出口为roomA
的新对象。请注意,现在您有一个“房间B”对象,其西门通向“房间A”,但同样的“房间A”有一个东门,通向不同的“房间B”对象。基本上,您有两个(或更多)不同的对象占用网格上的相同空间。我怀疑这不是你想要的。
当你创建指向彼此的新对象时,我认为你无法单独使用“new”。更好的方法是将方法添加到Room
,如
setExit(Direction direction, Room destination)
其中Direction
是类似enum
的{{1}}类型。然后从构造函数中删除public enum Direction { NORTH, SOUTH, EAST, WEST, }
,north
,south
,east
参数。设置房间的代码看起来像
west
现在你只有四个具有可以相互引用的出口的对象,我认为这就是你想要的。