1.) Bissel dürftig, das Codebeispiel, aber falls du Windows verwendest, so gibt das Attribut Window#active an, ob der Cursor blinkt oder nicht, und das Attribut Window#cursor_rect gibt an wo sich der Cursor befindet und wie groß er ist. Bsp:
Siehe auch: Rubykurs: Windows
2.) Eigentlich hat das nichts in der Game_Player Klasse zu tun. Ich würde den Code in die Scene_Map Klasse packen. Wenn der Spieler sich nicht mehr bewegen soll, lässt du einfach die $game_player.update Methode raus, oder (wenn du wirklich NUR die Bewegung unterbinden willst) du fügst eine neue Bedingung in die unless moving? or $game_system.map_interpreter.running? or ... Bedingung in Game_player#update Methode ein.
Ah, und dein Code scheint generell etwas eigenartig auszusehen. Globale Variablen (beginnend mit einem $-Zeichen) solltest du möglichst vermeiden. Und zum umsetzen von Variablenwerten musst du schon einen Zuweisungsoperator verwenden.