Wenn der Spieler bei einer bestimmten Taste die Kiste anfasst, dann ist der Teil schonmal einfach.
Ich weiß ja nicht wie weit Du Dich auskennst, aber hier ein Pseudocode, der zeigt, in welcher Art das laufen würde:
in die whlie-Schleife des Spielers kommt ein:
if(Taste soundso gedrückt)
dann
{
scan_id = soundso
c_scan(Umkreis und Richtung so, dass die Kiste erfasst wird, wenn der Spieler vor ihr steht.)
VOR der Spieleraktion muss aber seine event-Funktion etwas wie folgt bekommen:
if(scan_id == soundso)&&(you.id == id_kiste)
dann
{
spielerzustand = spieler_zustand_kiste_schieb
in der if-Bedingung der Taste sollte dann stehen
if(spieler_zustand_kiste_schieb)
dann
{
richte Spielerposition nach Position der Kiste aus und bewege Kiste und Spieler parallel
DAMIT der Spieler aufhört die Kiste zu schieben, wenn die Taste losgelassen hat kommt hinter die Klammer der if(Taste Soundso)-Bedingung
ein
else
{
spielerzustand = spieler_freibeweg
}
Entschuldige, meinen komischen Stil!