我目前正在开发一个地牢游戏项目,该项目由多个相互连接的房间组成。
根据您所在的房间,您可以通过选择方向(北
、南
、东
、 西
)。
我已经用 Enum
类表示方向,我正在寻找一种方法来实现 North
与 South
相反>,East
为 West
(依此类推...),以便在游戏的最终形式中创建所有房间的布局。
这是我的 Enum
类:
public enum Direction {
NORTH,
EAST,
SOUTH,
WEST;
public Direction getOppositeDirection() {
return Direction.values()[(this.ordinal()+2)%4];
}
}
问题是目前该方法不是很安全,方向声明顺序的任何改变都会破坏该方法,关于如何以更好的方式做到这一点有什么建议吗?
您可以使方法抽象
,并为每个常量实现它。
enum Direction {
NORTH() {
public Direction getOppositeDirection() {
return SOUTH;
}
},
EAST() {
public Direction getOppositeDirection() {
return WEST;
}
},
SOUTH() {
public Direction getOppositeDirection() {
return NORTH;
}
},
WEST() {
public Direction getOppositeDirection() {
return EAST;
}
};
public abstract Direction getOppositeDirection();
}
虽然有点啰嗦。
下一个方法更短但更难阅读。
enum Direction {
NORTH, EAST, SOUTH, WEST;
static {
(SOUTH.oppositeDirection = NORTH).oppositeDirection = SOUTH;
(WEST.oppositeDirection = EAST).oppositeDirection = WEST;
}
private Direction oppositeDirection;
public Direction getOppositeDirection() {
return oppositeDirection;
}
}