Вам нужен список позиций змей.Положение каждого элемента змеи является элементом списка:
snakepos = [[startX, startY]]
Если змея должна быть выращена, то последняя часть змеи должна быть скопирована и добавлена к хвостуsnake:
snakepos.append(snakepos[-1][:])
Чтобы заставить вашего змею двигаться, каждая часть змеи получает позицию своего предшественника в списке частей.Голова змеи получает новую позицию.Пройдите змею в обратном порядке и скопируйте позиции.
for i in range(len(snakepos)-1, 0, -1):
snakepos[i] = snakepos[i-1][:]
snakepos[0][0] += moveX
snakepos[0][1] += moveY
В качестве альтернативы вы можете добавить новый элемент в начало списка и удалить последний элемент списка:
snakepos.insert(0, [snakepos[0]+moveX, snakepos[1]+moveY])
del snakepos[-1]
Рекомендую разделить обновление позиции и чертеж:
for i in range(1, len(snakepos)):
pygame.draw.rect(screen, yellow, [snakepos[i], (width, height)])
snake = pygame.draw.rect(screen, white, [snakepos[0], (width, height)])