Beispiel #1
0
 /// <summary>
 ///     Находится ли голова змейки в пределах поля?
 /// </summary>
 /// <param name="head">Голова змейки</param>
 public static bool ГоловаВПределахПоля(SnakeCell head)
 {
     // Проверить, что x головы находится в пределах 1..ширина
     if (head.X < 1 || head.X > Ширина)
     {
         return(false);
     }
     // Проверить, что y головы находится в пределах 1..высота
     if (head.Y < 1 || head.Y > Высота)
     {
         return(false);
     }
     return(true);
 }
Beispiel #2
0
        /// <summary>
        ///     Одно движение змейки
        /// </summary>
        public void Move()
        {
            int lastCell = Cells.Count - 1;

            // Реализуем рост змеи (добавляем в конец копию последней клетки)
            if (_grownUp > 0)
            {
                SnakeCell tail = Cells[lastCell];
                Cells.Add(new SnakeCell(tail.X, tail.Y));

                _grownUp--;
            }

            // Двигаем все остальные ячейки
            for (int i = lastCell; i > 0; i--)
            {
                Cells[i].X = Cells[i - 1].X;
                Cells[i].Y = Cells[i - 1].Y;
                Cells[i].UpdatePictureLocation();
            }
            // Двигаем голову
            SnakeCell head = Cells[0];

            switch (Direction)
            {
            case Direction.Up:
                head.Y--;
                break;

            case Direction.Down:
                head.Y++;
                break;

            case Direction.Left:
                head.X--;
                break;

            case Direction.Right:
                head.X++;
                break;
            }
            head.UpdatePictureLocation();

            // Проверяем на самопересечения
            // Если голова совпала по координатам с другой клеткой, то закачиваем игру
            for (int i = 1; i < Cells.Count; i++)
            {
                if (Cells[i].SamePlace(head))
                {
                    _snakeEvents.GameOver("Змейка пересеклась сама с собой!");
                    _snakeEvents.StartGame();
                    return;
                }
            }

            if (Поле.ГоловаВПределахПоля(head))
            {
                return;
            }

            _snakeEvents.GameOver("За пределами поля!");
            _snakeEvents.StartGame();
        }