Extrem schwierig, den Code zu lesen, wenn die Klammern nicht richtig eingeschoben sind. So wie ich es verstehe, wird in der main while(1) Schleife
geschaut, ob key_a und key_d = 0 (NICHT GEDRüCKT) sind, worauf move(0)ausgeführt wird.
In der Function move wird der code ab "if (heldenblickrichtung == 6)" ausgeführt, und da steht "hero.pos_x -= 2;", womit der Player bewegt wird.
Warum hast du in der Function move() nochmals while(1) Schleifen? Ein mal eine Taste gedrückt und dein Hero bewegt sich immer weiter, auch wenn die Taste losgelassen wird.
Hoffe das hilft, Gruss aus der verschneiten Schweiz...