Example #1
0
        /// <summary>
        /// Изменяет направление движения змейки
        /// </summary>
        /// <returns>0 - успешно, -1 ошибка</returns>
        public int ChangeSnakeDir(SnakeDirection newDirection)
        {
            if (newDirection.IsDirectionOk() && !newDirection.IsDirectionsContrary(_snakeHeadDirection))
            {
                _snakeHeadDirection = newDirection;
                return(0);
            }

            return(-1);
        }
Example #2
0
        /// <summary>
        /// Проверяет корретно ли задано направление
        /// </summary>
        public static bool IsDirectionOk(this SnakeDirection dir)
        {
            EnumDirection enumVal = dir.Direction;

            if (enumVal == EnumDirection.Left || enumVal == EnumDirection.Right ||
                enumVal == EnumDirection.Top || enumVal == EnumDirection.Bottom)
            {
                return(true);
            }

            return(false);
        }
Example #3
0
        /// <summary>
        /// Возвращает смещение по координате Y для текущего направления
        /// </summary>
        public static int GetDirectionDY(this SnakeDirection dir)
        {
            switch (dir.Direction)
            {
            case EnumDirection.Top:
                return(-1);

            case EnumDirection.Bottom:
                return(1);

            default:
                return(0);
            }
        }
Example #4
0
        /// <summary>
        /// Возвращает смещение по координате X для текущего направления
        /// </summary>
        public static int GetDirectionDX(this SnakeDirection dir)
        {
            switch (dir.Direction)
            {
            case EnumDirection.Left:
                return(-1);

            case EnumDirection.Right:
                return(1);

            default:
                return(0);
            }
        }
Example #5
0
        /// <summary>
        /// Инициализирует игру при старте
        /// </summary>
        private void StartGame()
        {
            Snake.Clear();
            Food.Clear();

            TurnNumber          = 0;
            _snakeHeadDirection = new SnakeDirection()
            {
                Direction = EnumDirection.Top
            };

            int centerX = GameBoardSize.Width / 2;
            int centerY = GameBoardSize.Height / 2;

            SpawnSnakeBodyCell(centerX, centerY);
            SpawnSnakeBodyCell(centerX, centerY + 1);

            SpawnNewFood();

            _timerManager.StartTimer();
        }
Example #6
0
        /// <summary>
        /// Проверяет обратное ли текущему переданное направление
        /// (лево/право) || (верх/низ)
        /// </summary>
        /// <returns>true, если обратное</returns>
        public static bool IsDirectionsContrary(this SnakeDirection dir, SnakeDirection dirToCheckWith)
        {
            int curDX   = dir.GetDirectionDX();
            int otherDX = dirToCheckWith.GetDirectionDX();
            int curDY   = dir.GetDirectionDY();
            int otherDY = dirToCheckWith.GetDirectionDY();

            if (curDX == otherDX && curDY == otherDY) // направление совпадает
            {
                return(false);
            }

            int sumX = otherDX + curDX;
            int sumY = otherDY + curDY;

            if (sumX == 0 || sumY == 0) // обратное
            {
                return(true);
            }

            return(false);
        }