Вам не нужны никакие вспомогательные переменные.
posy[0] = posy[1];
posy[1] = posy[2];
posy[2] = 0;
Для движения в обратном направлении вам нужно будет сделать это в обратном порядке.
Другие улучшения невозможны.
Если бы у вас было много элементов (скажем, пять элементов), я бы порекомендовал вам заглянуть в класс ArrayDeque
. Это позволяет вставлять и удалять в обоих концах без смещения элементов. Вероятно, он реализован с индексом, указывающим на каждый конец, как @Jacob G. в комментарии, предложенном для этого. Всего три элемента вы можете считать излишним.