こんにちは!
はるさらと申します。
最近、pythonを勉強し始めたため
学びがてら、PyChameを使用しつつ
〇×ゲーム(三目並べ)を作成していきたいと思います。
第2回では〇、✕が描写されるまでを作成しました。
今回は並びを見て、勝利したかの判定をコンソール上に行います。
よかったら参考にしてみて下さい♪
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) # 結果格納用リスト result = ['','','','','','','','','',] # 勝利判定 kekka = '勝負中' # 勝利判定 def clearCheck(num,kigou): global result global kekka result[num] =kigou # 横ぞろい 1,2,3 or 4,5,6 or 7,8,9 if (kigou == result[0] and kigou == result[1] and kigou == result[2])or \ (kigou == result[3] and kigou == result[4] and kigou == result[5])or\ (kigou == result[6] and kigou == result[7] and kigou == result[8]): kekka = kigou+'の勝利' # 縦ぞろい 1,4,7 or 2,5,8 or 3,6,9 if (kigou == result[0] and kigou == result[3] and kigou == result[6])or \ (kigou == result[1] and kigou == result[4] and kigou == result[7])or\ (kigou == result[2] and kigou == result[5] and kigou == result[8]): kekka = kigou+'の勝利' # 斜めぞろい 1,5,9 or 3,5,7 if (kigou == result[0] and kigou == result[4] and kigou == result[8])or \ (kigou == result[2] and kigou == result[4] and kigou == result[6]): kekka = kigou+'の勝利' return kekka # ボタンクリック時のイベント # ○、✕の変数 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) # 勝利条件の確認 result = clearCheck(event.widget.num,marubatsu) print(result) # ターンの判定 if marubatsu == '○': marubatsu = '✕' else: marubatsu = '○' # 枠を作成(3×3マス) i = 0 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) button_frame.num = i i += 1 # 下記構文で実行 base.mainloop()処理の解説
24~25行目
結果を格納する配列を作成しています。
012 345 678 の、要素番号の個所に、〇、✕が格納されていきます。32~54行目
〇、✕が格納された配列を確認して
縦、横、斜めのいずれかに マークがそろっているのかを確認しています。
そろっていた場合、コンソールに 「〇の勝利」と 出力させるように値を代入しています。今回作成したソースを実行すると 最初に表示していたように コンソール上に、
決着がついていない時は「勝負中」
記号がそろったときは「~の勝利」 と、 出力されるようになります。
今日はここまで
もちろん、コンソールに出ているだけでは 分かりにくいため・・・
次回、勝利したときは ポップアップを表示させ、
ゲームの終了までもっていきたいと思います。それではまたー!!
〇×ゲームの初回記事はこちらになります♪