https://habr.com/ru/post/334434/
Представте в голове или на бумаге какие объекты вам нужны для разработкии описывайте каждый в виде объекта в коде.
1 поле чаще всего хранится в виде матрицы, как мы можем записать матрицу в нашем ЯП, в виде простых массивов или векторных, если такие есть. в случаи змейки мы можем использовать просто холст размером 300 на 300 где каждый пиксиль это клетка в матрице.
(Матрица в виде массивов используется всегда в играх типах Match3 легче придумывать алгоритмы)
2 игрок, как мы можем записать игрока в ЯП в виде объекта с кучей параметров
speed: float
diriction: num 1..4 направление движения 1 верх 2 влево 3 вниз 4 вправо (тодо вынести в константы, нужно больше констант богу констант )
x: num
y: num
lv: num
score: num
высота: num
ширина: : num
3 еда тоже самое что и игрок.
speed: float - еда тоже может убегать
lv: num уровень еды, 1 одну клетку даем змейке 3 3 клетки даем змейке. (можно пофантазировать с параметром и придумать геймплей игры. например если у еды больше лв чем у змейки, кушать нельзя )
x: num позиция а холсте
y: num
высота: num размер клетки на холсте
ширина: num
если еды на поле много то нужен лимитированый массив для количества еды на поле.
Любая игра начинается с инициализации игрового поля и объектов.
1 Создаем поле
2 Создаем игрока
Запускаем таймер, который должен рисовать нам картинку, каждый кадр и выполнять след код ( на самом деле не обязательно, у каждого объекта может быть свой таймер, основной таймер делается для плавности и стабильного FPS, в js это достигается через requestAnimationFrame(callback)
Проверка на столкновения игрока с едой или препятствиями.
Проверка вышли ли мы за пределы поля ( мы знаем начало поле это 0 и знаем ширину поля 300 от 0 до 300 в лево и в право мы можем бегать, мы знаем верх 0 и знаем высоту поля 300, от нуля мы можем бегать до 300 верх вних. в
Любая игра начинается с глобального таймера =)
Ну а что бы эту муть не читать, которую я написал, можно почитать статью
https://habr.com/ru/post/334434/