и меня осенило

Суть принципа заключается в том, что сама змейка поэлементно записана в массиве Snake. Далее каждый тик программы в массив Array записываются значения (2 - голова змейки, 1 - тело) из массива Snake, а также элементы визуализируются с помощью объектов Sprite. Логика получилась довольно сложной (вернее сама по себе логика довольно проста, но понять ее - это проблема, особенно по моему коду

Тайминг подвязан на dt и на размер змейки, таким образом, чем больше змейка, тем быстрее она двигается.
Проверка столкновения со своим хвостом осуществляется в цикле (проверка одинаковых координат в массиве головы и хвоста), проверка границ окна - координаты в массиве головы меньше нуля или больше заданных значений... здесь все просто.
В принципе, сложностей больше возникнуть не должно.
Из багов: на телефоне у меня фпс=8 (( так что сразу можно сказать, что этот код не оптимален и есть более простые пути решения поставленной задачи
Управление:
стрелки клавиатуры - управление
Esc/P/ЛКМ по значку паузы - пауза
Кстати мой рекорд - 33



Не успели меня еще закидать плюсами, как я уже обновление выкладываю



Добавил, собственно, "мягкие" границы (похоже на warp-поведение) и раздельный подсчет/запоминание очков
Здесь мой рекорд 41 в easy-mode
Добавил стенки на уровне HARD