おすすめアイテムをいくつか紹介

広告ブロックがONになっていると表示されないことがあります。

【Python-tkinter】〇×ゲームを作成-2(○✕を描写)

こんにちは! はるさらと申します。

最近、pythonを勉強し始めたため学びがてら、
PyChameを使用しつつ
〇×ゲーム(三目並べ)を作成していきたいと思います。

 

第1回では枠まで作成しました。
今回はその枠をクリックしたら
〇、✕が描写されるところまで 進めていきます!
よかったら参考にしてみて下さい♪

PyCharmを使用して作成しました。
同様の環境であればコピペで動作すると思われます。  

 

他のPythonの記事はこちらから参照できます♪

 

今回完成イメージ

   

コーディング

# coding: UTF-8
import tkinter as tk
 
# インスタンス化、画面サイズの設定など
base = tk.Tk()
base.geometry('250x250')
base.resizable(0,0)
base.title('まるばつゲーム')
 
 
# メインフレーム作成
mainframe = tk.Frame(
    base,
    relief='groove',
    borderwidth=5
)
mainframe.grid()
 
# フレームの中央配置
base.grid_columnconfigure(0, weight=1)
base.grid_rowconfigure(0, weight=1)
 
 
# ○、×の変数
marubatsu = '○'
 
 
# ボタンクリック時のイベント
def btn_click(event):
 
    # これを書かないと、グローバル変数に代入ができない
    global marubatsu
 
    # ○、×を付ける工程
    event.widget.configure(relief = 'ridge', bd = '1')
    bomb_count_label = tk.Label(event.widget, text = marubatsu , bg ='LightGray')
    bomb_count_label.place(width=50, height=50)
 
    # ターンの判定
    if marubatsu == '○':
        marubatsu = '✕'
    else:
        marubatsu = '○'
 
 
# 枠を作成(3×3マス)
for x in range(3):
    for y in range(3):
        # ボタンはフレームで作成。
        button_frame = tk.Frame(mainframe, width = 50, height = 50, bd = 3, relief ='ridge', bg ='LightGray')
        # rowでヨコ、columnでタテを指定している
        button_frame.grid(row=x, column=y)
        # フレームにイベントを設定するためbindメソッドを使用。
        # 第一引数に"<1>"を指定すると左クリックした際のイベントとなる
        button_frame.bind("<1>", btn_click)
 
 
# 下記構文で実行
base.mainloop()

 

処理の解説

24行目
〇、✕を格納する変数を作成しています。

29行目~
btn_clickというイベントを作成。
3×3の中のいずれかの枠を押した際に、
〇から描写される設定をしています。

・35~37行目内で、実際に〇、✕を描写しています。
・40~43行目で〇を入力したならば、次に押下したときは
 ✕が入力される必要があるため
 変数marubatsuの中身を反転しています。  

55行目
・29行目で作成したイベントにアクセスするためにbindメソッドを使用して、
フレームにイベントを設定しています。

 

今日はここまで

今回作成したソースを実行すると
最初に表示していたように 枠内に〇、✕を交互に描写できます。
今は、〇✕を並べているだけのため
次は勝利の判定を設定していきたいと思います。  

 

それではまたー!!  

〇×ゲームの初回記事はこちらになります♪