こんにちは!
はるさらと申します。
最近、pythonを勉強し始めたため
学びがてら、PyChameを使用しつつ
〇×ゲーム(三目並べ)を作成していきたいと思います。
第2回では〇、✕が描写されるまでを作成しました。
今回は並びを見て、勝利したかの判定をコンソール上に行います。
よかったら参考にしてみて下さい♪
PyCharmを使用して作成しました。
同様の環境であればコピペで動作すると思われます。
他のPythonの記事はこちらから参照できます♪
今回完成イメージ
コーディング
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798# 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)
(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行目
〇、✕が格納された配列を確認して
縦、横、斜めのいずれかに マークがそろっているのかを確認しています。
そろっていた場合、コンソールに 「〇の勝利」と 出力させるように値を代入しています。今回作成したソースを実行すると 最初に表示していたように コンソール上に、
決着がついていない時は「勝負中」
記号がそろったときは「~の勝利」 と、 出力されるようになります。
今日はここまで
もちろん、コンソールに出ているだけでは 分かりにくいため・・・
次回、勝利したときは ポップアップを表示させ、
ゲームの終了までもっていきたいと思います。それではまたー!!
〇×ゲームの初回記事はこちらになります♪