Example #1
0
        /// <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;
        }
Example #2
0
        /// <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;
        }
Example #3
0
        /// <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);
        }