public Movement(Pos pos, int steps) { Pos = pos; Steps = steps; }
public Pos[] GetNewPositions(Pos pos, Pos target) { var newPos = new List <Pos>(); if (Open[pos.Y - 1][pos.X]) //up { int newY = pos.Y - 1; while (Open[newY][pos.X] && !target.Equals(new Pos(newY, pos.X)) && !(Open[newY][pos.X - 1] || Open[newY][pos.X + 1])) { newY--; } if (Open[newY][pos.X]) { newPos.Add(new Pos(newY, pos.X)); } } if (Open[pos.Y + 1][pos.X]) //down { int newY = pos.Y + 1; while (Open[newY][pos.X] && !target.Equals(new Pos(newY, pos.X)) && !(Open[newY][pos.X - 1] || Open[newY][pos.X + 1])) { newY++; } if (Open[newY][pos.X]) { newPos.Add(new Pos(newY, pos.X)); } } if (Open[pos.Y][pos.X - 1]) //left { int newX = pos.X - 1; while (Open[pos.Y][newX] && !target.Equals(new Pos(pos.Y, newX)) && !(Open[pos.Y - 1][newX] || Open[pos.Y + 1][newX])) { newX--; } if (Open[pos.Y][newX]) { newPos.Add(new Pos(pos.Y, newX)); } } if (Open[pos.Y][pos.X + 1]) //right { int newX = pos.X + 1; while (Open[pos.Y][newX] && !target.Equals(new Pos(pos.Y, newX)) && !(Open[pos.Y - 1][newX] || Open[pos.Y + 1][newX])) { newX++; } if (Open[pos.Y][newX]) { newPos.Add(new Pos(pos.Y, newX)); } } return(newPos.ToArray()); }