どうもです〜 Python誠です。
じゃんけんゲームの第4回目を解説していきます。
前回、じゃんけんプログラムを短い行数に書き換え ました。
しかも・・・まさかの半分の行数で!?😳
今回は、その方法をご解説します。
じゃんけんプログラムを短くする方法
前回の じゃんけんプログラム③ に比べて、どこが変わったかみていきましょう。
無くなった行
まず、下の2行が # 無くなった行 です。
今回、player や monster という変数は使いません。
追加変更された行
プログラムの 黄色のラインマーカー部分が変更・追加されたところです。
1. 勝敗をリストで管理
新たに、 judge という変数で、勝敗をリストを管理します。
(例: judge[2] なら "勝ち" になります)
2. じゃんけんの出し手を出力
次に jan[p] と jan[m] で、直接じゃんけんの出し手 ["グー", "チョキ", "パー"] のどれかを呼び出して出力します。(例: jan[2] なら "パー" になります)
3. if文を使わない勝敗判定
一番変わったのが、 # 勝敗判定 です。if文もelif文も一切使っていません!?😳
内容を文章にすると・・・
プレーヤーの出し手番号 p から、モンスターの出し手番号 m を引いた値を、じゃんけんの出し手パターン数の 3 で割って、その余りを 変数 i に代入しています。
(% は、割り算したあとの余りを求める記号(演算子)です。)
文章で書くと、すごく難しく感じますが・・・😰
【プレーヤーが勝ちの時の出力】
実は、じゃんけんの出し手リスト [ 0: "グー", 1: "チョキ", 2: "パー"] は、すぐ右隣の出し手に勝つように配置されています。
例1)0: "グー" は、右隣の 1: "チョキ" に 勝つ!
例2)1: "チョキ" は、右隣の 2: "パー" に 勝つ!
ですので、プレーヤーが勝ちの場合は、隣り合った出し手の差 (p - m) は、いづれも「 −1」になります。
そして「 −1」を % 3 で計算すると・・・「 余りは2 」になります。
言い換えると (p - m) % 3 の計算結果が「 余りは2 」になれば、プレーヤーの "勝ち"と出力するようにしてあげれば良いのです。
ただし例外があります。 プレーヤーが 2: "パー" で モンスターが 0: "グー" の場合は、出し手の差が「 2 」になります。
しかしこの場合も「 2 」を % 3 で計算すると・・・「 余りは2 」になるので
同じく (p - m) % 3 の計算結果が「 余りは2 」になれば、プレーヤーの "勝ち"と出力するようにしてあげれば良いのです。
以上の内容をまとめると・・・
変数 i = (プレーヤー - モンスター) % 3 を計算し
変数 i が「 2 」になれば勝利となります。
参考)変数 i が「 0 」だとあいこ、「 1 」だと負けになります。
後で、検証してみましょう!🤔
4. 勝敗リストを使い、勝敗を出力
最後の行で、先ほどの変数 i を使って judge リスト(勝敗リスト)の ["あいこ", "負け", "勝ち"] から勝敗を呼び出し、出力します。(例: jaudge[0] なら "あいこ" になります)
以上が、短い行数でじゃんけんプログラムをかく方法でした。
# 勝敗判定の検証(参考)
i = (p - m) % 3 に出し手番号 [ 0: "グー", 1: "チョキ", 2: "パー"] を、実際に当てはめてみましょう。
1. あいこの場合
i = (0 - 0) % 3 で、 i = 0
i = (1 - 1) % 3 で、 i = 0
i = (2 - 2) % 3 で、 i = 0
結果)どの場合も i = 0 であいこになる。
2. プレーヤーが負けの場合
i = (1 - 0) % 3 で、 i = 1
i = (2 - 1) % 3 で、 i = 1
i = (0 - 2) % 3 で、 i = 1
結果)どの場合も i = 1 でプレーヤーの負けになる。
3. プレーヤーが勝ちの場合
i = (0 - 1) % 3 で、 i = 2
i = (1 - 2) % 3 で、 i = 2
i = (2 - 0) % 3 で、 i = 2
結果)どの場合も i = 2 でプレーヤーの勝ちになる。
まとめ・・・
% を使って余りを求める方法は、ゲームプログラミングをする際によく用いられます。
理屈は難しいと思いますが、身体で覚えてしまえるようにしっかりと復習していきましょう!
次回は、じゃんけんゲーム(基本)を完成させたいと思います。
それでは、またお会いしましょう!
「 Let’s Python!!🤗」
・・・ by Python誠。