@ignat2009
14 лет, изучаю C#

Как сделать так чтоб хвост змейки двигался по направлению головы winforms C#?

Здравствуйте, у меня пявилась проблема с хвостом змейки, как сделать так чтоб хвост двигался за головой?
подумал создать 2 таймер для хвоста, но хвост будет двигаться параллельно головы!Помогите пожалуйста.
Заранеее благодарю.
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
@rPman
Если у тебя змейка максимально примитивная, где поле клетка одного цвета (фон) и змея - клетка другого цвета (речь не о цвете а о том что клетки змеи неразличимы), то алгоритм сводится к тому чтобы как то хранить все квадраты змеи для того чтобы знать, в каком порядке их удалять.

Способов хранения миллион, самый тупой - массив пар x,y, но не массивом а списком (чтобы эффективно удалять хвост и добавлять новую голову), с каждым шагом ты добавляешь (конец списка) точку головы и тут же удаляешь точку хвоста (начало списка)... при удалении рисуешь квадрат на экране фоном, а при добавлении - цветом змеи.
Этот алгоритм не требует перерисовку змеи полностью да и вообще весь экран... даже не нужно хранить информацию о клетках где то дополнительно, так как чтобы положить яблоко будет достаточно хранить в другом массиве список координат яблок.

Но возможны другие варианты, например хранение всей матрицы поля, в каждой ячейке можно хранить информацию о наличии в ней яблока, змеи, а для змеи еще и направление ее движения... тогда достаточно хранить координаты головы и хвоста, при добавлении головы, в старое место помечать куда она направилась, а при удалении - делать шаг в направлении, сохраненном в ячейке.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Сделай отдельный массив игрового поля с хранением маршрута. Голова будет запись добавлять, а кончик хвоста запись удалять. При этом массив сделай unsigned int32 и значение каждой новой записи должно быть на единицу больше предыдущей. 0 - нет маршрута.
Если вокруг позиции блока тела змеи окажется несколько записей, значит маршрут туда, где минимальное значение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы