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

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

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

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

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

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

Похожие вопросы