Python(ニンジャゲーム)

python

今回は受講生(M氏)からのお題をコーディングしてみよう。ルールをよく理解してからとりかかろう。

問題

戦士4人がそれぞれ、乱数生成で分身したニンジャ1〜4と戦う。
実体を持つニンジャの番号を推測し、それを1〜4いずれかの半角数字で入力する。
入力は、戦士4までなので、4回入力する。
推測が当たった数の分だけ、「n体にダメージを与えた!」と表示し、全て推測を当てて「4体にダメージを与えた!」ならば、「ニンジャの討伐に成功した!!」と表示しクリアとなる。
なお、ニンジャの番号要素だけ一致するが、対する戦士が一致しない場合は、「n体の気配を感じる」と表示する。

ルール

戦士それぞれの予想に対する結果は以下のルールに基づく。

1.自分の実体の番号を当てた->1ダメージ
2.自分の実体の番号を当てられなかったがその番号が他に存在する->1気配
3.その番号は存在していない->0ダメージ、0気配

つまり、4人分入力した際、ダメージと気配の合計は0-4の範囲に収まる。

例:
正解がニンジャ3,ニンジャ3,ニンジャ3,ニンジャ1のときに以下を入力した場合は、
戦士1の攻撃は?:ニンジャ(1~4)>>2
戦士2の攻撃は?:ニンジャ(1~4)>>3 ->自分の実体を当てたので1ダメージ
戦士3の攻撃は?:ニンジャ(1~4)>>4
戦士4の攻撃は?:ニンジャ(1~4)>>2
「1体ダメージを与えた!0体の気配を感じる。」
と表示する。

正解がニンジャ1,ニンジャ3,ニンジャ2,ニンジャ3の時に以下を入力した場合は、
戦士1の攻撃は?:ニンジャ(1~4)>>2 ->自分の実体はx、しかし他にいるので1気配
戦士2の攻撃は?:ニンジャ(1~4)>>3 ->自分の実体を当てたので1ダメージ
戦士3の攻撃は?:ニンジャ(1~4)>>4
戦士4の攻撃は?:ニンジャ(1~4)>>2 ->自分の実体はx、しかし他にいるので1気配
「1体ダメージを与えた!2体の気配を感じる。」
と表示する。

正解がニンジャ2,ニンジャ1,ニンジャ2,ニンジャ2の時に以下を入力した場合は、
戦士1の攻撃は?:ニンジャ(1~4)>>4
戦士2の攻撃は?:ニンジャ(1~4)>>2 ->自分の実体はx、しかし他にいるので1気配
戦士3の攻撃は?:ニンジャ(1~4)>>4
戦士4の攻撃は?:ニンジャ(1~4)>>4
「0体ダメージを与えた!1体の気配を感じる。」
と表示する。(2に関しては他と3個分一致しているが気配は1とカウントされる)

数値入力完了後には毎回、「どうする?」と表示し、1が選ばれれば続行、2が選ばれれば正解の「実体は [4, 4, 3, 3] だった。戦士達は力尽きた」を表示して終了する。

実行例

実行例1

ニンジャがあらわれた。ニンジャは分身した
どうする? 1:戦う 2:終了 >>1
戦士1の攻撃は?:ニンジャ(1~4)>>2
戦士2の攻撃は?:ニンジャ(1~4)>>3
戦士3の攻撃は?:ニンジャ(1~4)>>4
戦士4の攻撃は?:ニンジャ(1~4)>>2
2体にダメージを与えた!1体の気配を感じる
どうする? 1:戦う 2:終了 >>1
戦士1の攻撃は?:ニンジャ(1~4)>>2
戦士2の攻撃は?:ニンジャ(1~4)>>3
戦士3の攻撃は?:ニンジャ(1~4)>>1
戦士4の攻撃は?:ニンジャ(1~4)>>1
3体にダメージを与えた!1体の気配を感じる
どうする? 1:戦う 2:終了 >>1
戦士1の攻撃は?:ニンジャ(1~4)>>1
戦士2の攻撃は?:ニンジャ(1~4)>>2
戦士3の攻撃は?:ニンジャ(1~4)>>3
戦士4の攻撃は?:ニンジャ(1~4)>>3
1体にダメージを与えた!3体の気配を感じる
どうする? 1:戦う 2:終了 >>1
戦士1の攻撃は?:ニンジャ(1~4)>>2
戦士2の攻撃は?:ニンジャ(1~4)>>3
戦士3の攻撃は?:ニンジャ(1~4)>>3
戦士4の攻撃は?:ニンジャ(1~4)>>3
3体にダメージを与えた!1体の気配を感じる
どうする? 1:戦う 2:終了 >>1
戦士1の攻撃は?:ニンジャ(1~4)>>2
戦士2の攻撃は?:ニンジャ(1~4)>>3
戦士3の攻撃は?:ニンジャ(1~4)>>1
戦士4の攻撃は?:ニンジャ(1~4)>>3
2体にダメージを与えた!2体の気配を感じる
どうする? 1:戦う 2:終了 >>1
戦士1の攻撃は?:ニンジャ(1~4)>>2
戦士2の攻撃は?:ニンジャ(1~4)>>3
戦士3の攻撃は?:ニンジャ(1~4)>>3
戦士4の攻撃は?:ニンジャ(1~4)>>1
4体にダメージを与えた!0体の気配を感じる
ニンジャの討伐に成功した!!

実行例2

ニンジャがあらわれた。ニンジャは分身した
どうする? 1:戦う 2:終了 >>1
戦士1の攻撃は?:ニンジャ(1~4)>>1
戦士2の攻撃は?:ニンジャ(1~4)>>1
戦士3の攻撃は?:ニンジャ(1~4)>>1
戦士4の攻撃は?:ニンジャ(1~4)>>1
0体にダメージを与えた!0体の気配を感じる
どうする? 1:戦う 2:終了 >>2
実体は [4, 4, 3, 3] だった。戦士達は力尽きた

Let’s challenge!

Hit&Blowの発展版だが、数値に重複が許されている上に気配の解釈が独特だ。
仕様をしっかりと理解してからとりかかろう!

python
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました