Придётся довольно глубоко менять вашу "Змейку", чтобы она плавно двигалась.
Для этого ваш тик перемещения нужно разбить на число подтиков, соответствующих числу пикселей вашей игровой ячейки. В вашем случае это 20.
То есть ваша змея должна отрисовываться в 20 раз чаще. При этом тело змеи будет по-прежнему дискретным, просто добавится ещё один вложенный счетчик.
Внешний счетчик как и сейчас будет считать шаги змеи, а внутренний будет считать шаги анимации перемещения внутри одного шага змеи. На протяжении анимации перемещения каждый сегмент змеи попиксельно перемещается от своих координат на предыдущем шаге к своим координатам на следующем. Ничего сложного.
Но ваш код уже плохо читается. Такой код называют спагетти-кодом.
Можно вынести структуру данных состояния змеи в отдельный класс и отрисовку реализовать отдельным методом, куда снаружи передавать шаг анимации.
Тогда у вас будет разделено логическое перемещение змеи по сегментом, и чисто декоративное по пикселям.