0. Puzmonとは
このページは、スッキリ分かるPython入門第2版に掲載されている「Puzmon」の続きです。ゲームの仕様や課題1~5は本書を確認してください。また、課題7のリンクはこちらです。課題7 コマンド入力に基づいた宝石移動の実装
1. 完成動作イメージ
2. 課題8のゴール
- 基本的には課題7の仕様を踏襲する。
- 宝石移動後、連続して3つ以上同じ属性の宝石が並んでいたら宝石を消滅させる。
- 宝石が消滅したスロットは「無」属性 (EMPTY) が存在するものとして扱う。
- 宝石が消滅した場合、do_attackによるダミー攻撃が発動する。
- 宝石が消滅した場合、空きスロットより右の宝石は1つずつ左にズレて空きを詰める。この処理は1コマずつ画面に表示される。
- 空き詰めが終了したら、右端にできた全ての空きスロットにランダムに宝石を発生させる。
- 宝石の左詰めや沸きにより、さらに消滅が発生する可能性(コンボ)については、現時点では考慮しなくて良い。
3. 課題8 突破ポイント
課題8で作成する関数
関数名 | 概要 |
check_banishable 関数 | 宝石の並びを調べて消去可能な箇所を検索して返す関数 |
banish_gems 関数 | 指定された消去可能な宝石の並び情報に基づき、スロット内の宝石を消滅させて効果を発動させる流れに責任を持つ関数 |
shift_gems 関数 |
空きスロットの右側に並ぶ宝石を左詰めする関数 |
spawn_gems 関数 |
空きスロットにランダムな宝石を生成する関数 |
必要に応じて既存関数を修正したり、表にない関数を新規作成しても構いません。
課題8 シーケンス図
課題8 突破のポイント
check_banishable 関数、shift_gems 関数 の2つについては、制御構文を活用してかなり複雑な処理が求められる高難度の課題となっています。いずれも力業による書き方からエレガントな書き方まで、開発者の腕が如実にコードに反映されるでしょう。シーケンス図では可能な限りシンプルな構成にしましたが必要に応じてオリジナルの関数を定義しても構いません。ただ、自分でもあまりに複雑すぎるコードになりそうと感じたときは、手を止めて、もっと良いやり方はないか、知恵を絞ってみるのをお勧めします。そのような思考と試行の時間がスキルの大幅な向上につながることも少なくありません。
課題 9 のリンク
次の課題9はこちらのリンクです。課題9 攻撃処理の実装