示例#1
0
        /// <summary>
        /// Обновляет игру при наступлении следующего хода
        /// </summary>
        private void UpdateGameBoard(object o)
        {
            TurnNumber++;
            int nextHeadX = Snake[0].X + _snakeHeadDirection.GetDirectionDX();
            int nextHeadY = Snake[0].Y + _snakeHeadDirection.GetDirectionDY();

            // Змейка врезалась в стенку
            if (nextHeadX == -1 || nextHeadX == GameBoardSize.Width ||
                nextHeadY == -1 || nextHeadY == GameBoardSize.Height)
            {
                StartGame();
                _timerManager.StartTimer();
                return;
            }

            Snake.Insert(0, new Coordinate(nextHeadX, nextHeadY)); // голова подвинулась

            int indexOfFood = IndexInCoords(Food, nextHeadX, nextHeadY);

            if (indexOfFood != -1) // змейка съела еду
            {
                Food.RemoveAt(indexOfFood);
                SpawnNewFood();
            }
            else // обычное перемещение змейки
            {
                Snake.RemoveAt(Snake.Count - 1);
            }

            _timerManager.ResetStopwatch();
        }
示例#2
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);
        }