はじめに
この記事は、以下の前提で進行しています。
- 35度以上のお湯が存在しない優しい世界です
- 猫を「食う」という表現は全て、猫を「吸う」という意味で捉えています
- 言葉を置き換えても良かったのですが、原作への敬意も込めてそのまま使わせて頂いてます
『文章題で身に付くプログラミング思考入門️』は、日常や文章問題からプログラミング思考を身に付けていく、簡単で身近で、あなたをちょっと輝かせてくれるシリーズです。
今回は、フローチャートについて考えていきます。
これまでのまとめ
対象者
- プログラミングの考え方を学びたい人
- プログラミングに挫折したことのある人
- 論理的思考を鍛えたい人
- 文系の人
- エンジニアの思考を理解したい人
概要
次の文章は、夏目漱石著『吾輩は猫である』の一節です。
この書生というのは時々我々を捕えて煮て食うという話である。
ということで、お風呂に入れたがり・猫吸いしたがりの書生(はじめに
を参照のこと)からネコチャンを逃がすゲームの流れを作ってみたいと思います。
さて、以下記事にて猫と書生の行動を洗い出しました。
こちらを利用して猫と書生のバトルを作っていきましょう。
【猫:データ】
名前:吾輩猫
一人称:吾輩
生まれ:見当がつかない場所
鳴き声:ニャーニャー
【猫:行動】
- 泣く
- 記憶する(泣いていた事)
- 見る(人間を)
- 聞く(書生という人間であった/書生は猫を食う)
- 思う(恐ろしいと)
【書生:データ】
名前:初エンカ書生
【書生:行動】
- 捕える(猫を)
- 煮る(猫を)
- 食う(猫を)
こうして見てみると、猫の行動があまりに無力ですね。
猫を強化していきましょう。
猫が鳴くと可愛いので破壊力があります。書生の心を破壊できそうです。「泣く」は攻撃として残し、それ以外は全て削除しましょう。
シンプルに考えるためです。
【猫:データ】
名前:吾輩猫
鳴き声:ニャーニャー
【猫:行動】
- 泣く
【書生:データ】
名前:初エンカ書生
【書生:行動】
- 捕える(猫を)
- 煮る(猫を)
- 食う(猫を)
これは書生と猫のバトルですから、ゲームのルールが必要です。
どんなルールにしましょうか?
そうですね、今回は
書生が「捕える」→「煮る」→「食う」と行動する中で、猫は「泣く」ことによって書生を攻撃して倒して逃げる
というルールにしましょう。
まず、書生の行動が大きな流れとなりますから、そこの部分を図にしてみます。
簡単なフローチャートです。
フローチャートとは、流れ図のことです。
さて、あまりに理不尽な流れ図ができました。
このままでは猫が抵抗できず、お風呂に入れられ、吸われてしまいます。
ということで、猫のターンを追加していきたいのですが、その前に、バトルのルールを整理しましょう。
猫の攻撃によって書生を倒すことができたらハッピーエンドとしましょうか。
猫は泣き声によって書生の心を破壊するので、書生の心の数値化が必要ですね。
書生にはMPを持たせましょう。
そして、バトルといえばターン制が一般的かなと思いますので、書生と猫は1回ずつ交代で行動するようにしましょうか。
整理します。
- バトル終了条件
- 猫が食われたら、書生の勝ち(デッドエンド)
- 書生のMPが0になったら、猫の勝ち(ハッピーエンド)
- バトル進行の流れ
- 書生と猫は交代で行動する
では、一つずつ要素を足していきましょう。
まずは、ハッピーエンドを作りましょうか。
次に、ハッピーエンドに到達する流れを作っていきましょう。
- 書生が行動したら、次は強制的に猫の行動に移ります。
- 猫は「泣く」ことだけできます。
こうなります。
そして、猫が泣くことによって、
- 書生のMPが0以下になったら、ハッピーエンドへ移る
- そうでなければ、次の書生の行動へ移る
わけですね。
ということは、猫が泣いた後は毎回、書生のMPが0以下になったかどうかをチェックする必要があります。条件分岐ですね。
これを図に追加すると、
こうなります。ちょっと見にくいですね。
見やすいように要素を移動してみましょうか。
ちょっと見やすくなりましたかね?
縦軸で見てみると、以下のように区分けできます。
- 書生は、「捕える」→「煮る」→「食う」とステータスが変わる
- ゲームマスターは書生のMPとステータスをチェックし、バトル終了を判断する
- 猫はひたすら泣く
と役割分担させることができますね。
もちろんこの流れ図が正解というわけではなく、もっと上手いやり方もあると思います。
どのようにしたらもっと良い仕組みになるでしょうか?
ぜひ試してみてください。
なお、この流れ図は miro を使って作成しました。
無料でも使える便利なツールなので、よかったら試してみてください。
ただし、無料だと非公開モードが選択できないなどのデメリットもあります。
ツールを利用する前にしっかり仕様を読み、メリットとデメリットを把握してから使うようにしましょう。
miroの料金プラン別仕様は こちら
発展
さらに、猫に「泣く」以外の行動を取らせることができたら、どのように流れ図が変化するでしょうか?
また、その際には、猫の行動を選択するための分岐が必要になります。
例えば、書生・ゲームマスター・猫以外に、プレイヤーという役割分担が発生し、プレイヤーが猫の行動を選択することになるかもしれませんね。
きっちり役割分担をし、独立した部品作りを心がけると、システムの拡張性は高まります。
次回は、デバッグ思考について考えていこうと思います。
まとめ
- 順を追って、少しずつ流れ図を作っていきました。
- きっちり役割分担をし、独立した部品作りを心がけると、システムの拡張性は高まります。
最後に
ここまで読んでくださってありがとうございます!
少しでも役に立ったら「いいね」をください。続ける励みになります。
原作の言葉をそのまま使おうとしてこの形になったのですが、いっそのこと「書生が猫をお風呂に入れる」「書生が猫を吸う」に変えちゃった方が良かったかもしれません。アドバイスください。