次はCPUの手をランダムで出すようにしてみようか
でも、ランダムで出させるなら普通にライブラリの「random」を使えば良いんじゃないの?
そうだね!それで問題ないよ!!じゃあ、いつランダムで設定するのが良さそうかな?
そうだねぇ...後出し感はあるけど「自分がどの手にするか選んだ時」かな?
正解!今回CPUは完全にランダムに出すからそれで問題ないね!
そしたら、まずはCPUの手を表示するためにlayoutを調整しようか
ついでにランダムを使いやすくするための「hands」と、画像のパスを扱いやすくするための「hand_images」も用意するよ
hands = ["グー", "チョキ", "パー"]
hand_images = {
"グー": "janken_gu.png",
"チョキ": "janken_choki.png",
"パー": "janken_pa.png"
}
# レイアウト(画面構成)
col1 = eg.Column([[eg.Image(hand_images["グー"], size=(100, 100))], [eg.Button("グー")]])
col2 = eg.Column([[eg.Image(hand_images["チョキ"], size=(100, 100))], [eg.Button("チョキ")]])
col3 = eg.Column([[eg.Image(hand_images["パー"], size=(100, 100))], [eg.Button("パー")]])
layout = [
[eg.Text("じゃんけんの手を選ぼう!")],
[col1, col2, col3],
[eg.Text("プレイヤーの手"),
eg.Image(None, size=(100, 100),key="player_hand"),
eg.Text("vs"),
eg.Image(None, size=(100, 100), key="cpu_hand"),
eg.Text("CPUの手")],
[eg.Text("", key="result")]
]
ちゃんとどんな画面にしたいかイメージしないとごちゃごちゃになっちゃいそうだね
次はCPUの手をランダムに選んで、それぞれの手を表示するようにイベントループの部分を変更しよう!
layoutはそのままだけど、その上の「import random」を追加するのを忘れないようにね!!
import TkEasyGUI as eg
import random # 追加を忘れずに!!
# 途中省略
# イベントループ(閉じるまで表示)
while True:
event, values = window.read()
if event in ["グー", "チョキ", "パー"]:
player = event
cpu = random.choice(hands)
# 画像を更新
window["player_hand"].update(hand_images[player])
window["cpu_hand"].update(hand_images[cpu])
window["result"].update(f"プレイヤーの手は「{player}」、CPUの手は「{cpu}」です")
if event is eg.WINDOW_CLOSED:
break
なるほど!「random.choice()」を使えば配列から要素を1つだけランダムに選べるんだね!
そういうこと
じゃあこれでどんな感じに動くか確認してみよう!
おおー!どのボタンでも押すたびにCPUの手が変化してる!!
ばっちりだね!じゃあ次の項目でじゃんけんの勝敗判定を作ろう!!
この時点での全体のプログラム
import TkEasyGUI as eg
import random
hands = ["グー", "チョキ", "パー"]
hand_images = {
"グー": "janken_gu.png",
"チョキ": "janken_choki.png",
"パー": "janken_pa.png"
}
# レイアウト(画面構成)
col1 = eg.Column([[eg.Image(hand_images["グー"], size=(100, 100))], [eg.Button("グー")]])
col2 = eg.Column([[eg.Image(hand_images["チョキ"], size=(100, 100))], [eg.Button("チョキ")]])
col3 = eg.Column([[eg.Image(hand_images["パー"], size=(100, 100))], [eg.Button("パー")]])
layout = [
[eg.Text("じゃんけんの手を選ぼう!")],
[col1, col2, col3],
[eg.Text("プレイヤーの手"),
eg.Image(None, size=(100, 100),key="player_hand"),
eg.Text("vs"),
eg.Image(None, size=(100, 100), key="cpu_hand"),
eg.Text("CPUの手")],
[eg.Text("", key="result")]
]
# ウィンドウを作成
window = eg.Window("じゃんけんアプリ", layout)
# イベントループ(閉じるまで表示)
while True:
event, values = window.read()
if event in ["グー", "チョキ", "パー"]:
player = event
cpu = random.choice(hands)
# 画像を更新
window["player_hand"].update(hand_images[player])
window["cpu_hand"].update(hand_images[cpu])
window["result"].update(f"プレイヤーの手は「{player}」、CPUの手は「{cpu}」です")
if event is eg.WINDOW_CLOSED:
break
# ウィンドウを閉じる
window.close()
