スッキリわかるPython入門 第2版

【スッキリ分かるPython入門 第2版: Puzmon】課題7 コマンド入力に基づいた宝石移動の実装

0. Puzmonとは

このページは、スッキリ分かるPython入門第2版に掲載されている「Puzmon」の続きです。ゲームの仕様や課題1~5は本書を確認してください。また、課題6のリンクはこちらです。課題6 バトルフィールドの実装

1.  完成動作イメージ

 

2. 課題7のゴール

  1.  基本的には課題6の仕様を踏襲する。
  2.  2文字のコマンドが移動指示として正しくない場合、再入力を求める。
  3.  コマンドが正しいならば、指示通り宝石が移動する。この時、宝石が1つずつ隣に入れ替わっていく様子を1行ずつ画面表示する。
  4.  宝石の移動が完了したら、「宝石スロットの評価処理」を実行する。この処理は本来同じ種類で連続した宝石の並びがあるかなどを検証し、あれば宝石の消滅やモンスターの攻撃を起動するものであるが、現時点では単に「do_attack関数を呼び出してダミー攻撃を発動させる」だけの単純な動作で良い。

3. 課題7 突破ポイント

課題7で作成する関数

関数名 概要
check_valid_command 関数 与えられたコマンドが適切かどうかをチェックする関数
move_gem 関数 指定位置の宝石を別の位置へ移動させるユーティリティ関数。移動の過程も画面表示する。
swap_gem 関数

指定位置の宝石を指定した方向の隣の宝石と入れ替えるユーティリティ関数

必要に応じて既存関数を修正したり、表にない関数を新規作成しても構いません。

 

課題7 シーケンス図

 

課題7 突破のポイント

  • check_valid_command 関数 
    この関数がチェックすべきポイントは「2文字か?」,「同じ文字ではないか?」, 「AからNまでの大文字か?」の3つです。
  • move_gem 関数
    例えば、「BE」と入力された時、「BCの宝石」、「CDの宝石」、「DEの宝石」の計3回の移動が行われます。人の目で見れば3回の移動であることは自明ですが、プログラムではどのように移動回数を求めたら良いでしょうか?ヒントは次のコードです。

    tmp = list("ABEDEF")
    print(tmp)
    
    b_index = tmp.index("B")
    e_index = tmp.index("E")
    
    print(b_index, e_index)

    また、宝石の移動は隣り合うもの同士が1つずつ行うのでBE」と「EB」は違う挙動になる点には注意してください。

課題 8 のリンク

課題8はこちらのリンクです。課題8 宝石消滅判定の実装

 

-スッキリわかるPython入門 第2版
-,