我正在设计一个基于文本的冒险游戏学校进步.我将每个“级别”设置为一个类,并将每个可探索区域(节点)作为适当类中的方法.
令人困惑的是从一个节点移动到另一个节点的代码.因为每个节点连接到最多四个其他节点,所以我必须在每个方法中重复一个非常相似的代码块.
public static void zero() { ... adjacentNodes[] = {one(),two(),three(),four()}; }
然后将该数组发送到通用方法,并将其发送到正确的节点:
public static void move(...[] adjacentNodes,int index) { adjacentNodes[index]; }
我简化了我的代码,但这是一般的想法.这可能吗?
解决方法
每当你想到指针到功能时,你都可以通过使用适配器模式(或变体)来转换为Java.这将是这样的:
public class Node { ... public void goNorth() { ... } public void goSouth() { ... } public void goEast() { ... } public void goWest() { ... } interface MoveAction { void move(); } private MoveAction[] moveActions = new MoveAction[] { new MoveAction() { public void move() { goNorth(); } },new MoveAction() { public void move() { goSouth(); } },new MoveAction() { public void move() { goEast(); } },new MoveAction() { public void move() { goWest(); } },}; public void move(int index) { moveActions[i].move(); } }