Ich würde sagen: Die moveButton-Funktion soll einen Button verschieben in Abhängigkeit der Richtung. Die Parameter von moveButton sollten daher sein: genau ein (Pointer auf) Button, die Richtung und die Entfernung (die 100 in deinem Code). Bislang nimmt die moveButton-Funktion die Richtung, ein Array von Buttons, x und y. Vor allem benutzt du die Richtung, um in das qbp-Array zu indexieren. Das erscheint völlig wirr. Die moveButton-Funktion braucht doch gar nicht zu wissen, wie viele Buttons es gibt. xx, yy und die width und height könnte man direkt aus dem existierenden Button ermitteln. Außerdem hast du in dem switch/case praktisch identischen Code - und einmal hat die for-Schleife die falsche Abbruchbedingung. Du könntest in dem switch einfach nur ein deltaX/deltaY berechnen und ansonsten dieselbe Schleife für alle Richtungen verwenden. Oder - und weil "int" für eine Richtung falsch und unflexibel erscheint, könntest du die deltaX und deltaY (vielleicht sogar als float) als Paramter einführen und stattdessen den direction-Parameter entfernen.