У меня такое ощущение, что ваш вопрос является более общим, чем простая обработка массива.
Похоже, вы пытаетесь использовать много логики взаимодействия спрайтов в своем классе змей.
Вероятно, лучшей идеей было бы переместить ввод пользователя в другое место и заставить игровое поле сообщать об изменениях состояния различным спрайтам (змея, еда, стена и т. Д.), Включая обнаружение столкновений.Если игровое поле обнаружит столкновение между змеей и едой, оно переместит спрайт с едой на следующую позицию и вызовет Eat () на объекте змеи в игре.Если он обнаружит столкновение между змеей и самой собой, игра закончится.
Было бы неразумно позволить змее нарисовать себя на доске * или, по крайней мере, сохранить свою информацию для отображения на доске.справиться.Объект змеи может иметь массив (или, еще лучше, ArrayList), в котором хранятся координаты блоков, из которых состоит змея.Когда змея движется, вы можете просто увеличивать массив и изменять точки, чтобы учитывать направление движения и расстояние.Если бы я реализовывал это, я бы использовал массив точек поворота, которые бы указывали змее, как поворачивать кусочки змеи, когда она пересекает доску.Когда точка опоры больше не действительна (у змеи больше нет частей, которые пересекают опору), я удаляю ее из массива.
Просто мое предложение.Я не зарабатываю игры на жизнь, поэтому я уверен, что есть еще лучшие способы сделать это.
* Вы можете найти пример того, как первый из них используется в приложении, подобном InDesign, в Design Patterns отGang of Four, если вам нужна дополнительная информация о том, как это настроить.