サブルーチンの目的としては ・まとまった処理を別にまとめて書ける ・何度も呼ぶ処理をいちいち書かなくてすむ という感じ。 だにえるさんのコードの @SUB は @MAIN の中にそのまま書くこともできるけど、 @MAINの中身が長くなってしまって、@MAINは何をする処理なんだろうってわけわからなくなるので、 それを @SUBで分けると、@MAINがすっきりして見やすくなります。 そして、@SUBはボタンの入力で XとYを変更する処理なので、@MENUみたいな別の処理で使いたい場合、@SUBを呼び出せばまた同じコードを書かなくて済みます。 プログラムを作るときは「主人公の処理」「敵の処理」「メニューの処理」など、目的によって分けることが多いので、そういう処理をサブルーチンで分けると、プログラムが見やすくなって修正しやすくなります。