需要导入numpy库
“C:\Program Files\Python39\python.exe” -m pip install numpy
import tkinter
import tkinter.messagebox # 弹窗库
import numpy
window = tkinter.Tk() #创建窗口
window.title("五子棋游戏") #窗口名字
w1 = tkinter.Canvas(window, width=700,height=700,background='green')
w1.pack()
for i in range(0, 15):
w1.create_line(i * 40 + 20, 20, i * 40 + 20, 580)
w1.create_line(20, i * 40 + 20, 580, i * 40 + 20)
w1.create_oval(135, 135, 145, 145,fill='black')
w1.create_oval(135, 455, 145, 465,fill='black')
w1.create_oval(465, 135, 455, 145,fill='black')
w1.create_oval(455, 455, 465, 465,fill='black')
w1.create_oval(295, 295, 305, 305,fill='black')
num=0
A=numpy.full((15,15),0)
B=numpy.full((15,15),'')
# print(A,'\n', B)
def callback(event):
global num ,A
# 查找鼠标单击的位置
for j in range (0,15):
for i in range (0,15):
if (event.x - 20 - 40 * i) ** 2 + (event.y - 20 - 40 * j) ** 2 <= 2 * 20 ** 2:
break
if (event.x - 20 - 40 * i) ** 2 + (event.y - 20 - 40 * j) ** 2 <= 2*20 ** 2:
break
# A[i][j] != 1表示该位置没有被单击过, num用于分辨黑白
if num % 2 == 0 and A[i][j] != 1:
w1.create_oval(40*i+5, 40*j+5, 40*i+35, 40*j+35,fill='black')
A[i][j] = 1
B[i][j] = 'b'
num += 1
if num % 2 != 0 and A[i][j] != 1 :
w1.create_oval(40*i+5, 40*j+5, 40*i+35, 40*j+35,fill='white')
A[i][j] = 1.
B[i][j] = 'w'
num += 1
# 查找连珠
f = [[-1, 0], [-1, 1], [0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1]]
for z in range(0, 8):
a, b = f[z][0], f[z][1]
count1 = 0
x, y = i, j
while B[x][y] == B[i][j]:
count1 += 1
if x + a >= 0 and y + b >= 0 and x + a < 15 and y + b < 15 and B[x + a][y + b] == B[i][j]:
x = x + a
y = y + b
else:
break
if count1 == 5:
if B[i][j] == 'b':
tkinter.messagebox.showinfo('提示', '黑棋获胜')
else:
tkinter.messagebox.showinfo('提示', '白棋获胜')
w1.bind("<Button -1>",callback)
w1.pack()
def quit():
window.quit()
u=tkinter.Button(window,text="退出",width=10,height=1,command=quit,font=('楷体',15))
u.pack()
tkinter.mainloop()