Prev / Next / カメ太の日記

「1時間で学ぶソフトウェアの仕組み」の拡張例[dolittle][infoedu]

2009-01-29

1時間で学ぶソフトウェアの仕組みのプログラムを、宝物を全部拾ったら
終了するように拡張したい」という質問をいただきましたので、サンプル
を書いておきます。1/12のプログラムの応用です。

1つ目は、画面に宝物の数を表示して、拾うたびに減らしていく方法です。
まず、残りの数を表示する「得点」というフィールドを作り、宝物の数を
入れておきます。宝物の数を変えたときは、この数字も変えてください。

得点=フィールド!作る 3 書く。

そして、自分の値を1減らす「カウント」というメソッドを定義します。こ
の中で、値が0になったときは「おめでとう!」というメッセージを表示し
て、タイマー(時計)を中断するようにしておきます。

得点:カウント=「自分!((自分!読む)−1)書く。「(得点!読む)<=0」!なら「ラベル!"クリア!"作る。時計!中断」実行」。

そして、カメ太の「衝突」のメソッドを、衝突したときに相手を消すこと
に加えて、得点をカウントダウンするように修正します。

かめた:衝突=「|相手| 相手!消える。得点!カウント」。

プログラムをまとめると、次のようになります。最後の3行が修正と追加を
した部分です。

かめた=タートル!作る。
左ボタン=ボタン!"左" 作る。
左ボタン:動作=「かめた!30 左回り」。
右ボタン=ボタン!"右" 作る。
右ボタン:動作=「かめた!30 右回り」。
時計=タイマー!作る。
時計!「かめた!10 歩く」実行。
タートル!作る "tulip.png" 変身する ペンなし 100 100 位置。
タートル!作る "tulip.png" 変身する ペンなし 100 -100 位置。
タートル!作る "tulip.png" 変身する ペンなし -100 100 位置。
かめた:衝突=「|相手| 相手!消える。得点!カウント」。

得点=フィールド!作る 3 書く。
得点:カウント=「自分!((自分!読む)−1)書く。「(得点!読む)<=0」!なら「ラベル!"クリア!"作る。時計!中断」実行」。





別解としては、宝物を配列に入れておき、衝突するたびに配列から削除し
て、配列が空になったら「おめでとう!」というメッセージを表示して、
タイマー(時計)を中断する方法もあります。宝物の数を設定しなくても
済む利点はありますが、プログラムはわかりにくいかもしれません。あと、
画面に宝物の数が表示されません。

まず、配列を作ります。

宝物たち=配列!作る。

続いて、宝物を作り、配列に入れます。

宝物たち!(タートル!作る "tulip.png" 変身する ペンなし 100 100 位置)書く。
宝物たち!(タートル!作る "tulip.png" 変身する ペンなし 100 -100 位置)書く。
宝物たち!(タートル!作る "tulip.png" 変身する ペンなし -100 100 位置)書く。

そして、衝突したときに配列から削除して、配列が空になったときの処理
を記述します。

かめた:衝突=「|相手| 相手!消える。宝物たち!(相手)消す。「(宝物たち!要素数?)<=0」!なら「ラベル!"クリア!"作る。時計!中断」実行」。

プログラムをまとめると、次のようになります。最後の5行が修正した部分
です。

かめた=タートル!作る。
左ボタン=ボタン!"左" "LEFT"作る。
左ボタン:動作=「かめた!30 左回り」。
右ボタン=ボタン!"右" "RIGHT"作る。
右ボタン:動作=「かめた!30 右回り」。
時計=タイマー!作る。
時計!「かめた!10 歩く」実行。
宝物たち=配列!作る。
宝物たち!(タートル!作る "tulip.png" 変身する ペンなし 100 100 位置)書く。
宝物たち!(タートル!作る "tulip.png" 変身する ペンなし 100 -100 位置)書く。
宝物たち!(タートル!作る "tulip.png" 変身する ペンなし -100 100 位置)書く。
かめた:衝突=「|相手| 相手!消える。宝物たち!(相手)消す。「(宝物たち!要素数?)<=0」!なら「ラベル!"クリア!"作る。時計!中断」実行」。


permlink