Создайте классическую игру-змейку в SwiftUI без сетки
Перечисление и переменные
Мы собираемся определять направление движения и заставлять змею постоянно двигаться в этом направлении, пока направление не изменится. Давайте сначала создадим перечисление для направлений:
У нас будет таймер, чтобы контролировать скорость змеи. Чтобы сделать змею медленнее или быстрее, мы можем изменить интервалы таймера. Вместо сетки используется размер змейки. Это поможет нам контролировать положение змеи и ее пищи. В нашей игре нам потребуются следующие переменные:
Элементы представления змейки
Внутри нашего тела добавьте ZStack
. Внутри вы можете добавить цвет для своего фона. Нам понадобится еще ZStack
для нашего прямоугольника змейки и прямоугольника еды. Чтобы создать тело змеи, мы собираемся перебрать массив, содержащий положение тела змеи. Задайте обоим прямоугольникам ширину и высоту нашей переменной snakeSize
. Последний элемент внутри нашего представления - это текстовое представление, которое появляется при включении нашей переменной gameOver
:
Функции
Создайте функцию, которая определяет положение наших прямоугольников. Чтобы разместить змею и еду в невидимой сетке, нам нужно использовать размер змеи, чтобы определить, сколько строк и столбцов мы можем иметь внутри нашего представления:
К одному из наших ZStacks
мы можем добавить .onAppear
, чтобы установить позицию для нашей змейки и еды, используя функцию, которую мы создали выше:
Создайте функцию, которая проверяет, находится ли змея внутри или за пределами границ экрана, проверяет направление движения пользователя, а затем перемещает змею в этом направлении:
Мы можем определить, в каком направлении пользователь смахнул, с помощью следующего кода, который использует DragGesture
для получения начальной и конечной позиции смахивания, а затем вычисляет разницу между координатами x и y для определения направления смахивания. Добавьте следующую функцию к нашему первому ZStack
:
Все, что нам нужно добавить к нашему ZStack
, чтобы завершить игру, - это .onReceieve
функция, которая берет наш таймер и обновляет положение змейки и еды. Когда змея окажется на корме, добавьте новую позицию к нашему массиву положений тела змеи, чтобы змея стала длиннее:
Все сделано! Спасибо за прочтение.