【Python】初心者でも作れる簡単ジャンケンゲームのプログラミング!画像付き!

※本ページはプロモーションが含まれています。

プログラミング

画像付きのじゃんけんゲームも作ってみたいな!

前回はテキストで遊べるジャンケンゲームのプログラムをご紹介しました。

今回は画像で視覚的にも楽しいジャンケンゲームのプログラムをご紹介します。

テキストのゲームよりは少し難しいかもしれませんが、まずはコピペで動きを確認してください。

次にコードの説明を確認しながら実際にエディタに打ち込み楽しんで作ってみましょう。

この記事でできること
  • ジャンケンゲームを通してプログラムの構造と動作をより深く理解できる
  • 各関数の目的と働きがわかる
  • 引数や戻り値の意味が理解できる
  • プログラムの流れや各部分の関連性がわかる

Pythonで初心者でも作れるジャンケンゲームのプログラミング解説 プレビューとサンプル画像

完成プレビューです。テキストベースのプログラムより複雑にはなりますが順を追ってゆっくりと作っていきましょう。画像をボタンを押して表示させてコンピューターと対戦します。

画像サンプル:”rock.png”・”scissors.png”・”paper.png”(参考程度にコピペで使ってください)

そして画像に名前を付けてエディタ画面の左側フォルダに格納してください。

もっとプログラミングを深めたい方におすすめプログラミングスクールをご紹介

\ 定額制なので頑張る人ほどお得 /

【チャットGPTで簡単学習】ゼロから始めるPythonプログラミング講座

気軽に無料カウンセリングで不安点も解消しましょう

Pythonで初心者でも作れる画像を使ったジャンケンゲームの解説 プログラム全体

見本のエディタはVS Code(Visual Studio Code)を使用しています。

Visual Studio Code公式ホームページ https://code.visualstudio.com/

# 必要なライブラリをインポート
import tkinter as tk  # GUIを作成するためのライブラリ
from tkinter import messagebox  # メッセージボックスを表示するためのモジュール
import random  # ランダムな選択を行うためのライブラリ

# コンピュータの選択をランダムに決定する関数
def get_computer_choice():
    return random.choice(["グー", "チョキ", "パー"])

# 勝者を決定する関数
def determine_winner(player, computer):
    if player == computer:
        return "引き分け"
    elif (player == "グー" and computer == "チョキ") or \
         (player == "チョキ" and computer == "パー") or \
         (player == "パー" and computer == "グー"):
        return "プレイヤーの勝ち"
    else:
        return "コンピュータの勝ち"

# プレイヤーの選択に基づいてゲームを実行する関数
def play(player_choice):
    computer_choice = get_computer_choice()  # コンピュータの選択を取得
    result = determine_winner(player_choice, computer_choice)  # 勝者を決定
    
    # 結果を画面に表示
    player_label.config(text=f"プレイヤー: {player_choice}")
    computer_label.config(text=f"コンピュータ: {computer_choice}")
    result_label.config(text=f"結果: {result}")
    
    # 手の画像を更新
    update_hand_images(player_choice, computer_choice)

# 手の画像を更新する関数
def update_hand_images(player_choice, computer_choice):
    player_image_label.config(image=hand_images[player_choice])
    computer_image_label.config(image=hand_images[computer_choice])

# メインウィンドウの設定
root = tk.Tk()
root.title("じゃんけんゲーム")

# 手の画像を読み込む
hand_images = {
    "グー": tk.PhotoImage(file="rock.png"),
    "チョキ": tk.PhotoImage(file="scissors.png"),
    "パー": tk.PhotoImage(file="paper.png")
}

# UIの作成
# ボタンを作成し、クリックされたときに対応する手を選択
tk.Button(root, text="グー", command=lambda: play("グー")).pack()
tk.Button(root, text="チョキ", command=lambda: play("チョキ")).pack()
tk.Button(root, text="パー", command=lambda: play("パー")).pack()

# プレイヤーの選択を表示するラベル
player_label = tk.Label(root, text="プレイヤー: ")
player_label.pack()

# コンピュータの選択を表示するラベル
computer_label = tk.Label(root, text="コンピュータ: ")
computer_label.pack()

# 結果を表示するラベル
result_label = tk.Label(root, text="結果: ")
result_label.pack()

# プレイヤーの手の画像を表示するラベル
player_image_label = tk.Label(root)
player_image_label.pack(side="left")

# コンピュータの手の画像を表示するラベル
computer_image_label = tk.Label(root)
computer_image_label.pack(side="right")

# メインループを開始(ウィンドウを表示し続ける)
root.mainloop()

Pythonで初心者でも作れる画像を使ったジャンケンゲームのプログラム詳細

ここから動作順に詳しく説明していきますので、書いたコードを確認しながら進めていってください。

1.必要なライブラリのインポート

まずは、プログラムで使用するライブラリをインポートします。

# GUIを作成するためのライブラリ
import tkinter as tk

# メッセージボックスを表示するためのモジュール
from tkinter import messagebox

# ランダムな選択を行うためのライブラリ
import random

tkintertkとして省略してインポート):

  • Pythonの標準ライブラリで、グラフィカルユーザーインターフェース(GUI)を作成するために使用します。ウィンドウ、ボタン、ラベルなどの要素を簡単に作成できます。

messageboxtkinterのサブモジュール):

  • ポップアップメッセージを表示するために使用します。エラーメッセージや情報メッセージを表示する際に便利です。

random

  • Pythonの標準ライブラリで、乱数生成や要素のランダムな選択に使用します。このゲームでは、コンピュータの手をランダムに選ぶために使います。

2.コンピュータの選択を決める関数

def get_computer_choice():
    """
    コンピュータの選択をランダムに決定する関数
    
    戻り値:
    str: "グー"、"チョキ"、"パー"のいずれか
    """
    return random.choice(["グー", "チョキ", "パー"])

random.choice()メソッドを使用して、リスト ["グー", "チョキ", "パー"] の中から、ランダムに1つの手を選びます。 この関数を呼び出すたびに、新しいランダムな選択が行われます。

3.勝者を決定する関数

def determine_winner(player, computer):
    """
    プレイヤーとコンピュータの選択を比較して勝者を決定する関数
    
    引数:
    player (str): プレイヤーの選択
    computer (str): コンピュータの選択
    
    戻り値:
    str: 勝敗の結果
    """
    if player == computer:
        return "引き分け"
    elif (player == "グー" and computer == "チョキ") or \
         (player == "チョキ" and computer == "パー") or \
         (player == "パー" and computer == "グー"):
        return "プレイヤーの勝ち"
    else:
        return "コンピュータの勝ち"

プレイヤーとコンピュータの選択を引数として受け取ります。

  1. まず、両者の選択が同じ場合は “引き分け” を返します。
  2. 次に、プレイヤーが勝つ3つのケース(グーvsチョキ、チョキvsパー、パーvsグー)をチェックします。
  3. いずれの条件にも当てはまらない場合は、コンピュータの勝ちとなります。

\(バックスラッシュ)は、1行の条件が長くなりすぎる場合に、複数行に分けて書くために使用しています。

4.ゲームを実行する関数

def play(player_choice):
    """
    じゃんけんゲームを実行し、結果を表示する関数
    
    引数:
    player_choice (str): プレイヤーの選択
    """
    # コンピュータの選択を取得
    computer_choice = get_computer_choice()
    
    # 勝者を決定
    result = determine_winner(player_choice, computer_choice)
    
    # 結果を画面に表示
    player_label.config(text=f"プレイヤー: {player_choice}")
    computer_label.config(text=f"コンピュータ: {computer_choice}")
    result_label.config(text=f"結果: {result}")
    
    # 手の画像を更新
    update_hand_images(player_choice, computer_choice)

プレイヤーの選択を引数として受け取ります。

  1. get_computer_choice()を呼び出して、コンピュータの選択を取得します。
  2. determine_winner()を使って、勝者を決定します。
  3. config()メソッドを使って、各ラベルのテキストを更新します。
  4. f-string(f"..."を使用して、変数の値を文字列に簡単に組み込んでいます。
  5. 最後に、update_hand_images()を呼び出して、画面上の手の画像を更新します。

5.手の画像を更新する関数

def update_hand_images(player_choice, computer_choice):
    """
    プレイヤーとコンピュータの手の画像を更新する関数
    
    引数:
    player_choice (str): プレイヤーの選択
    computer_choice (str): コンピュータの選択
    """
    player_image_label.config(image=hand_images[player_choice])
    computer_image_label.config(image=hand_images[computer_choice])

プレイヤーとコンピュータの選択を引数として受け取ります。

  • config()メソッドを使って、各画像ラベルのimageプロパティを更新します。
  • hand_imagesディクショナリから、選択された手に対応する画像を取得します。

6.メインウィンドウの設定

# メインウィンドウを作成
root = tk.Tk()
# ウィンドウのタイトルを設定
root.title("じゃんけんゲーム")

tk.Tk()でTkinterのルートウィンドウ(メインウィンドウ)を作成します。

title()メソッドで、ウィンドウのタイトルバーに表示されるテキストを設定します。

7.手の画像の読み込み:

# 手の画像を読み込んでディクショナリに格納
hand_images = {
    "グー": tk.PhotoImage(file="rock.png"),
    "チョキ": tk.PhotoImage(file="scissors.png"),
    "パー": tk.PhotoImage(file="paper.png")
}

tk.PhotoImage()を使って、各手に対応する画像ファイルを読み込みます。

ディクショナリhand_imagesを使用して、各手(キー)と対応する画像オブジェクト(値)を関連付けます。

これにより、手の文字列(”グー”など)から対応する画像オブジェクトに簡単にアクセスできます。

8.UIの作成

# じゃんけんの手を選択するボタンを作成
tk.Button(root, text="グー", command=lambda: play("グー")).pack()
tk.Button(root, text="チョキ", command=lambda: play("チョキ")).pack()
tk.Button(root, text="パー", command=lambda: play("パー")).pack()

# プレイヤーの選択を表示するラベル
player_label = tk.Label(root, text="プレイヤー: ")
player_label.pack()

# コンピュータの選択を表示するラベル
computer_label = tk.Label(root, text="コンピュータ: ")
computer_label.pack()

# 結果を表示するラベル
result_label = tk.Label(root, text="結果: ")
result_label.pack()

# プレイヤーの手の画像を表示するラベル
player_image_label = tk.Label(root)
player_image_label.pack(side="left")

# コンピュータの手の画像を表示するラベル
computer_image_label = tk.Label(root)
computer_image_label.pack(side="right")

tk.Button()で3つのボタンを作成し、それぞれに”グー”、”チョキ”、”パー”のテキストを設定します。

commandパラメータlambda関数を使用して、ボタンがクリックされたときにplay()関数を呼び出すようにします。

tk.Label()で各種ラベルを作成します。これらは選択や結果を表示するために使用します。

pack()メソッドを使って、各UI要素をウィンドウ上に配置します。

画像ラベルはsideパラメータを使って左右に配置しています。

9.メインループの開始

# メインループを開始(ウィンドウを表示し続ける)
root.mainloop()

mainloop()メソッドは、Tkinterのイベントループを開始します。

このループは、ユーザーの操作(ボタンクリックなど)を常に監視し、適切に反応します。

プログラムはこの行で「待機状態」に入り、ウィンドウが閉じられるまで実行し続けます。

以上が、Pythonで作成した画像のじゃんけんゲームの詳細な解説です。

もっとプログラミングを深めたい方におすすめプログラミングスクールをご紹介

\ 初心者のが9割以上。挫折せずに学べる /

テックアカデミー公式HPはこちら

気軽に無料カウンセリングで不安点も解消しましょう

Pythonで初心者でも作れる画像を使ったジャンケンゲームのプログラミング まとめ

今回は以下を目指す目的でしたが楽しく作れましたでしょうか。

  • ジャンケンゲームを通してプログラムの構造と動作をより深く理解できる
  • 各関数の目的と働きがわかる
  • 引数や戻り値の意味が理解できる
  • プログラムの流れや各部分の関連性がわかる

やはりまだ難しいなと感じる方は、Python公式ドキュメントをぜひ眺めてみてください。

ライブラリやモジュール・関数などが書いてあるので、この関数コードで見たなと思うだけでも理解は深まります。

Python公式ドキュメント:https://docs.python.org/3/(英語なのでわからない方は翻訳機を使ってくださいね)

ここまで作ってみて、もっとプログラミングの知識を深めたいと感じたのではないでしょうか。

プログラミングは独学でも可能です。しかし、一人では不安だなと思われる方はスクールが良いでしょう。相談できながらしっかりと学べます。

以下の記事ではプログラミングスクールをご紹介しています。ぜひ参考になさってください。

もう少し独学でやってみたいなという方には、無料で学べる学習サイトをご紹介します。

まずはここから始めてみるのもよいですね。

プログラミングを楽しみましょう!

プログラミング学習をリフレッシュするのにコワーキングスペースがおすすめです。以下の記事を参考にして下さい。

※本ページはプロモーションが含まれています。

プログラミング
meguをフォローする
WEBらぼ