protected List <Droid> visitNeighbors(Droid droid) { var neighbors = new List <Droid>(); var north = new Point(droid.loc.x, droid.loc.y + 1); var south = new Point(droid.loc.x, droid.loc.y - 1); var east = new Point(droid.loc.x + 1, droid.loc.y); var west = new Point(droid.loc.x - 1, droid.loc.y); visit(neighbors, droid, north, Direction.North); visit(neighbors, droid, south, Direction.South); visit(neighbors, droid, east, Direction.East); visit(neighbors, droid, west, Direction.West); return(neighbors); }
protected void visit(List <Droid> neighbors, Droid droid, Point point, Direction dir) { if (visited.ContainsKey(point)) { return; } var copy = new Droid(droid); var result = copy.move(dir); visited[point] = result; if (result == Status.System) { oxygenSystem = point; } if (result == Status.Empty) { neighbors.Add(copy); } }
public Droid(Droid copy) { this.machine = new Machine(copy.machine, this); this.loc = new Point(copy.loc.x, copy.loc.y); }