9. Создание игры змейка

Задача
Змейка состоит из
головы и нескольких секций
тела, постоянно движется и
меняет направление
движения при нажатии
клавиш-стрелок.
При нажатии на пробел останавливается.
Проблемы:
1) как хранить данные о змейке?
2) как двигать её в нужную сторону?
Змейка = массив из звеньев-квадратов
snake = [obj0, obj1, obj2, obj3, obj4]
snake = []
penColor("yellow")
brushColor("yellow")
for i in range(N):
--obj = rectangle(x+i*a, y, x+i*a+a, y+a)
--snake.append( obj )
--brushColor("green")

Движение змейки происходит по перемещению квадрата на место предыдущего
newCoord = coords(snake[k-1])
moveObjectTo(snake[k], newCoord[0], newCoord[1])

Функция передвижение змейки
def moveSnake(xNew, yNew):
--global x, y
--for k in range(len(snake)-1,0,-1):
----newCoord = coords(snake[k-1])
----moveObjectTo(snake[k], newCoord[0], newCoord[1])
--moveObjectTo(snake[0], xNew, yNew)
--x = xNew
--y = yNew

Функция Управления змейки
def keyPressed(event):
-- global dx, dy
--if event.keycode == VK_LEFT:
----dx=-1
----dy=0
--elifevent.keycode == VK_RIGHT:
...
--elifevent.keycode == VK_UP:
...
--elifevent.keycode == VK_DOWN:
...

Функция остановки змейки
d
ef update():
--if dx or dy: # если значения равны 0 движение не нужно
----moveSnake( x + dx*a , y + dy*a )


Задачи
Собрать и запустить программу.
Змейка не может выйти за пределы синего квадрата (останавливается у стенки).
Змейка при столкновении с границей поля начинает ползти вдоль этой границы.
Если змейка пересекает сама себя, игра заканчивается.