Похоже, вы кладете предметы на фиксированную сетку. Продукты питания перемещаются? Ваша еда не движется, а ваша змея (или что-либо сталкивается с едой) делает это, вы можете значительно оптимизировать обнаружение столкновений, выясняя, какой квадрат (ы) сетки занимает движущийся объект и проверяя только еду в этой локальной области.
Вообще говоря, когда вам нужно выполнить обнаружение столкновений между многими объектами, вы делаете это за несколько проходов. Первый проход будет состоять из наименее затратных в вычислительном отношении проверок для отбраковки вещей, которые не могут сталкиваться друг с другом, таких как объекты, которые находятся очень далеко друг от друга, отходят друг от друга и т. Д. Ваш следующий проход может быть чем-то вроде простого граничного прямоугольника или кругового теста , Наконец, когда вы дошли до нескольких предметов, которые проходят все дешевые тесты, вы можете использовать более дорогие и точные тесты попаданий, такие как попиксельные, между масками попаданий.