/// <summary> /// Returns all available cell for a penguins from an origin cell /// </summary> /// <param name="board"></param> /// <param name="origin"></param> /// <param name="direction"></param> /// <returns></returns> public static IList<Cell> GetAvailableCells(this Cell[,] board, Cell origin, Direction direction) { var result = new List<Cell>(); Cell destination = null; int xDest = 0; switch (direction) { case Direction.Left: if (origin.X > 0) { destination = board[origin.X - 1, origin.Y]; } break; case Direction.Right: if (origin.X < 7) { destination = board[origin.X + 1, origin.Y]; } break; case Direction.TopLeft: xDest = (origin.Y % 2 == 0) ? origin.X - 1 : origin.X; if (xDest >= 0 && origin.Y > 0) { destination = board[xDest, origin.Y - 1]; } break; case Direction.TopRight: xDest = (origin.Y % 2 == 0) ? origin.X : origin.X + 1; if (xDest < 8 && origin.Y > 0) { destination = board[xDest, origin.Y - 1]; } break; case Direction.BottomLeft: xDest = (origin.Y % 2 == 0) ? origin.X - 1 : origin.X; if (xDest >= 0 && origin.Y < 7) { destination = board[xDest, origin.Y + 1]; } break; case Direction.BottomRight: xDest = (origin.Y % 2 == 0) ? origin.X : origin.X + 1; if (xDest < 8 && origin.Y < 7) { destination = board[xDest, origin.Y + 1]; } break; } if (destination != null && destination.CellType == CellType.Fish) { result.Add(destination); result.AddRange(board.GetAvailableCells(destination, direction)); } return result; }
/// <summary> /// /// </summary> /// <param name="board"></param> /// <param name="origin"></param> /// <returns></returns> public static IList<Cell> GetAvailableCells(this Cell[,] board, Cell origin) { var result = new List<Cell>(); for (int i = 0; i <= 5; i++) result.AddRange(board.GetAvailableCells(origin, (Direction)i)); return result; }
/// <summary> /// /// </summary> /// <param name="board"></param> /// <param name="origin"></param> /// <returns></returns> public static IList <Cell> GetNearCells(this Cell[,] board, Cell origin) { var result = new List <Cell>(); for (int i = 0; i <= 5; i++) { result.AddRange(board.GetAvailableCells(origin, (Direction)i, false)); } return(result); }