Pythonでレトロゲームをつろう!!(佐藤 誠 の あくまでも独り言)

Pyhtonで2Dレトロゲームを作っていきます!! たまに、Googleアドセンスからグルメにスイーツ、子供の受験、古墳に神社・・・色々と楽しみながら書い伝えていきます!!

じゃんけんゲームの作り方④ (%を使ってプログラムの行数を半分に減らす)  Let's Python 9(初級編)

ブログランキング・にほんブログ村へにほんブログ村

どうもです〜 Python誠です。

 

じゃんけんゲームの第4回目を解説していきます。

 

前回、じゃんけんプログラムを短い行数に書き換え ました。

しかも・・・まさかの半分の行数で!?😳

今回は、その方法をご解説します。

じゃんけんプログラムを半分の行数に書き換え

 

www.makotoblog.net

 

じゃんけんプログラムを短くする方法

# ゲーム:「モンスターじゃんけん④」

import random

jan = ["グー", "チョキ", "パー"]
judge = ["あいこ", "負け", "勝ち"]

# プレーヤー
print("0:グー 1:チョキ 2:パー")
p = int(input("じゃんけん・・・"))
print("プレーヤー: " + jan[p])

# モンスター
m = random.randint(0, 2)
print("モンスター: " + jan[m])

# 勝敗判定
i = (p - m) % 3 print(judge[i])

 

前回の じゃんけんプログラム③ に比べて、どこが変わったかみていきましょう。

 

無くなった行 

まず、下の2行が # 無くなった行 です。

# プレーヤー
   ・
   ・
   ・
player = jan[p] # 無くなった行


# モンスター
   ・
   ・
   ・
monster = jan[m] # 無くなった行

 今回、playermonster という変数は使いません。

 

追加変更された行 

プログラムの 黄色のラインマーカー部分が変更・追加されたところです。

 

1. 勝敗をリストで管理 

新たに、 judge という変数で、勝敗をリストを管理します。

(例: judge[2] なら "勝ち" になります

judge = ["あいこ", "負け", "勝ち"]

 

2. じゃんけんの出し手を出力

次に jan[p] と jan[m] で、直接じゃんけんの出し手 ["グー", "チョキ", "パー"] のどれかを呼び出して出力します。(例: jan[2] なら "パー" になります

print("プレーヤー: " + jan[p])
print("モンスター: " + jan[m])

 

3. if文を使わない勝敗判定

一番変わったのが、 # 勝敗判定 です。if文もelif文も一切使っていません!?😳

# 勝敗判定
i = (p - m) % 3

 内容を文章にすると・・・

プレーヤーの出し手番号から、モンスターの出し手番号 m を引いた値を、じゃんけんの出し手パターン数の で割って、その余りを 変数 i に代入しています。 

 (% は、割り算したあとの余りを求める記号(演算子)です。)

 

文章で書くと、すごく難しく感じますが・・・😰

 

【プレーヤーが勝ちの時の出力】

実は、じゃんけんの出し手リスト [ 0: "グー", 1: "チョキ", 2: "パー"は、すぐ右隣の出し手に勝つように配置されています。

 例1)0: "グー" は、右隣の 1: "チョキ" に 勝つ!

 例2)1: "チョキ" は、右隣の 2: "パー" に 勝つ!

 

ですので、プレーヤーが勝ちの場合は、隣り合った出し手の差 (p - m) は、いづれも「 −1」になります。

そして「 −1」を  % 3 で計算すると・・・「 余りになります。

言い換えると (p - m) % 3 の計算結果が「 余りになれば、プレーヤーの "勝ち"と出力するようにしてあげれば良いのです。

 

ただし例外があります。 プレーヤーが 2: "パー" で モンスターが 0: "グー" の場合は、出し手の差が「 」になります。

しかしこの場合も「 2 」を  % 3 で計算すると・・・「 余りになるので

 同じく (p - m) % 3 の計算結果が「 余りになれば、プレーヤーの "勝ち"と出力するようにしてあげれば良いのです。

 

以上の内容をまとめると・・・

変数 i  =  (プレーヤー - モンスター) % 3  を計算し

変数 i が「  」になれば勝利となります。

 

参考)変数 i が「 0 」だとあいこ、「 1 」だと負けになります。

 後で、検証してみましょう!🤔

 

4. 勝敗リストを使い、勝敗を出力

最後の行で、先ほどの変数を使って judge リスト(勝敗リスト)の  ["あいこ", "負け", "勝ち"から勝敗を呼び出し、出力します。(例: jaudge[0] なら "あいこ" になります

print(judge[i])

 

 以上が、短い行数でじゃんけんプログラムをかく方法でした。

 

www.makotoblog.net

 

# 勝敗判定の検証(参考)

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 でプレーヤーの勝ちになる。

 

www.makotoblog.net

 

まとめ・・・

% を使って余りを求める方法は、ゲームプログラミングをする際によく用いられます。

理屈は難しいと思いますが、身体で覚えてしまえるようにしっかりと復習していきましょう!

 

次回は、じゃんけんゲーム(基本)を完成させたいと思います。

 

それでは、またお会いしましょう!

「 Let’s Python!!🤗」 

・・・ by Python誠。