第12回/第13回/第14回

第13回「再帰」

再帰のしくみを知る

1.再帰とは

再帰とは、手順の中で再びその手順を呼び出すことです。つまり、手順をむげんに繰り返す状態にできます。しかし、これを使って失敗すると、「無限ループ」などといわれる状態になり、止まらなくなります。具体的には、手順の最後にその手順の名前を入れます。そのとき、条件をつけるとよいでしょう。

再帰の利用

手順は ゲームスタート
タイマーのリセット
かめ移動
おわり

手順は かめ移動
かめ1、 まえへ 3 みぎへ 2
かめ2、 まえへ 5 みぎへ 3
かめ3、 まえへ -8 みぎへ 5
まつ 1
もしどちらかを タイマー > 100 「ゲーム終了」「かめ移動」
おわり

まつを入れる

ここで、「まつ」というのが入っています。繰り返す場合は、これを入れてやらないと、かめがとてつもない速さで動いてしまい、オーバーフローを起こしてしまうかもしれません。

2.再帰の応用

この方法が本当に便利なのかはわかりませんが、ここではRPGを例にして説明します。例えば、「道具」という手順を作ったとします。この「道具」という手順は、名前の通りアイテムを使ったりしますが、このときプログラムの流れで言うと、ダンジョンにいて、ダンジョンの手順が流れていたが、アイテムの手順に切り替わったということになります。すると、アイテムを使い終わったときは、ダンジョンの手順に戻す必要があります。この戻すものは、フィールドならフィールド、町なら町と変化します。それにどう対応するか。ここでは、「再帰」と言えるのかはわかりませんが、そのやり方を説明します。

ターン手順

たとえば、町を「1」、ダンジョンを「2」、フィールドを「3」…と決めます。

手順は ターン
もし :ターン = 1 「町」
もし :ターン = 2 「ダンジョン」
もし :ターン = 3 「フィールド」
もし :ターン = 4 「戦闘」
おわり

そして、この「ターン」という手順を戦闘の終了や宿屋に入れておきます。もちろん、宿屋に行く前や戦闘前に、この変数を設定しておく必要があります。

手順は 町
なまえは "ターン 1
かく "|1・洞窟へ 2・宿屋へ 3・フィールドへ 4・道具|
受けたキー
もし :キー = 49 「なまえは "ターン 2 ダンジョン」
もし :キー = 50 「宿屋 120」
もし :キー = 51 「なまえは "ターン 3 フィールド」
もし :キー = 52 「道具」
ターン
おわり

町に入ると、ターンが「1」に設定されます。すると、宿屋に行っても、道具を使っても、

手順は 宿屋 :価格
テキスト1、 じをけす
かく "ここは宿屋です。一晩 つづける かく :価格 つづける かく "ゴールドですがお泊りになりますか?
かく "|1・はい 2・いいえ| 受けたキー

もし :受けたキー = 49 「なまえは "ゴールド :ゴールド - 1 なまえは "HP :最大HP」

ターン
おわり

宿屋の手順を作るときの注意

宿屋では、「価格」という引数をとることで、値段を自在に変えることができます。また、ここには含まれていませんが、お金が足りなくて泊まれないという判定も必要です。

手順は ダンジョン
かく "ダンジョンです。
かく "|1・進む 2・町へ戻る| 受けたキー
もし :キー = 1 「かく "進みました。▼ ターン」
もし :キー = 2 「町」
おわり

これが町の基本的な構造です。町からどこへ行っても、町に戻ってきます。また、ターン手順は、ほかの使い道があります。まず、デバッグで使えます。途中で手順を止めて、ターンで続けることもできます。あと、間違えて違うキーを押してしまった時、町の手順に戻るので、プログラムが止まることがありません。

3.「むげんに」の利用



「むげんに」を利用する

「再帰」のほかに、「むげんに」を使って繰り返させることもできます。

むげんに 「かめ1、 いちは マウスの位置」

こうすると、かめ1はいつまでもマウスと同じように動きます。

「むげんに」を止める

やめる時は

とりけす 「かめ1、 いちは マウスの位置」

先ほどの「かめ移動」に適用

むげんに 「かめ1、 まえへ 3 みぎへ 2 かめ2、 まえへ 5 みぎへ 3 かめ3、 まえへ -8 みぎへ 5 まつ 1」

第14回へ進む