ACLSやCLS命令を実行すると画面をCHR$(0)で埋め尽くします。 47行目のCHR$(XC)!=" "が成立するためMXには移動前のX座標が 代入されるためキャラクターは移動しません。 画面の消去を LOCATE 0,0:PRINT " "*50*30; として画面上を" "で埋め尽くすか、キャラクターの消去を PRINT CHR$(0);に変更して、IF命令での判別を IF XC!=0 THEN MX=XX とCHR$(0)を検出できなかったときに移動前の座標に 戻すようにしたらいいかと思います。 Y座標も同様です。