为了提高开发效率,我准备用python的tkinter框架编写五子棋游戏,但目前只能自己和自己下哟!
游戏截图:
代码:
import tkinter
root = tkinter.Tk()
root.title('五子棋')
root.geometry('800x600+400+100')
lt = [] # 存放下过的黑棋
lt2 = [] # 存放下过的白棋
flag = 0
count = 1
def set_chess(event):
global flag,count
if flag == 0:
x = event.x
y = event.y
if (x_1 <= x <= 500 and y_1 <= y <= 480):
m = (x - x_1) % differ
n = (y - y_1) % differ
if m <= differ // 2:
x -= m
else:
x = x - m + differ
if n <= differ // 2:
y -= n
else:
y = y - n + differ
if ((x, y) not in lt and (x,y) not in lt2):
x1, y1 = x - 10, y - 10
x2, y2 = x + 10, y + 10
# 绘制棋子
# 黑子
if count%2!=0:
canvas.create_oval(x1, y1, x2, y2, fill='black')
count += 1
lt.append((x,y))
if ((x - 1 * differ, y) in lt and (x - 2 * differ, y) in lt and (x - 3 * differ, y) in lt and (
x - 4 * differ, y) in lt):
canvas.create_line(x,y,x-4*differ,y,fill='red')
flag = 1
elif ((x + 1 * differ, y) in lt and (x + 2 * differ, y) in lt and (x + 3 * differ, y) in lt and (
x + 4 * differ, y) in lt):
canvas.create_line(x,y,x+4*differ,y,fill='red')
flag = 1
elif ((x, y - 1 * differ) in lt and (x, y - 2 * differ) in lt and (x, y - 3 * differ) in lt and (
x, y - 4 * differ) in lt):
canvas.create_line(x,y,x,y-4*differ,fill='red')
flag = 1
elif ((x, y + 1 * differ) in lt and (x, y + 2 * differ) in lt and (x, y + 3 * differ) in lt and (
x, y + 4 * differ) in lt):
canvas.create_line(x,y,x,y+4*differ,fill='red')
flag = 1
elif ((x - 1 * differ, y - 1 * differ) in lt and (x - 2 * differ, y - 2 * differ) in lt and (
x - 3 * differ, y - 3 * differ) in lt and (
x - 4 * differ, y - 4 * differ) in lt):
canvas.create_line(x,y,x-4*differ,y-4*differ,fill='red')
flag = 1
elif ((x + 1 * differ, y - 1 * differ) in lt and (x + 2 * differ, y - 2 * differ) in lt and (
x + 3 * differ, y - 3 * differ) in lt and (
x + 4 * differ, y - 4 * differ) in lt):
canvas.create_line(x,y,x+4*differ,y-4*differ,fill='red')
flag = 1
elif ((x + 1 * differ, y + 1 * differ) in lt and (x + 2 * differ, y + 2 * differ) in lt and (
x + 3 * differ, y + 3 * differ) in lt and (
x + 4 * differ, y + 4 * differ) in lt):
canvas.create_line(x,y,x+4*differ,y+4*differ,fill='red')
flag = 1
elif ((x - 1 * differ, y + 1 * differ) in lt and (x - 2 * differ, y + 2 * differ) in lt and (
x - 3 * differ, y + 3 * differ) in lt and (
x - 4 * differ, y + 4 * differ) in lt):
canvas.create_line(x,y,x-4*differ,y+4*differ,fill='red')
flag = 1
if flag == 1:
lb['text'] = '黑子胜!'
# 白子
else:
canvas.create_oval(x1, y1, x2, y2, fill='white')
count += 1
lt2.append((x, y))
if ((x - 1 * differ, y) in lt2 and (x - 2 * differ, y) in lt2 and (
x - 3 * differ, y) in lt2 and (
x - 4 * differ, y) in lt2):
canvas.create_line(x, y, x - 4 * differ, y, fill='red')
flag = 1
elif ((x + 1 * differ, y) in lt2 and (x + 2 * differ, y) in lt2 and (
x + 3 * differ, y) in lt2 and (
x + 4 * differ, y) in lt2):
canvas.create_line(x, y, x + 4 * differ, y, fill='red')
flag = 1
elif ((x, y - 1 * differ) in lt2 and (x, y - 2 * differ) in lt2 and (
x, y - 3 * differ) in lt2 and (
x, y - 4 * differ) in lt2):
canvas.create_line(x, y, x, y - 4 * differ,fill='red')
flag = 1
elif ((x, y + 1 * differ) in lt2 and (x, y + 2 * differ) in lt2 and (
x, y + 3 * differ) in lt2 and (
x, y + 4 * differ) in lt2):
canvas.create_line(x, y, x, y + 4 * differ,fill='red')
flag = 1
elif ((x - 1 * differ, y - 1 * differ) in lt2 and (
x - 2 * differ, y - 2 * differ) in lt2 and (
x - 3 * differ, y - 3 * differ) in lt2 and (
x - 4 * differ, y - 4 * differ) in lt2):
canvas.create_line(x, y, x - 4 * differ, y - 4 * differ,fill='red')
flag = 1
elif ((x + 1 * differ, y - 1 * differ) in lt2 and (
x + 2 * differ, y - 2 * differ) in lt2 and (
x + 3 * differ, y - 3 * differ) in lt2 and (
x + 4 * differ, y - 4 * differ) in lt2):
canvas.create_line(x, y, x + 4 * differ, y - 4 * differ,fill='red')
flag = 1
elif ((x + 1 * differ, y + 1 * differ) in lt2 and (
x + 2 * differ, y + 2 * differ) in lt2 and (
x + 3 * differ, y + 3 * differ) in lt2 and (
x + 4 * differ, y + 4 * differ) in lt2):
canvas.create_line(x, y, x + 4 * differ, y + 4 * differ,fill='red')
flag = 1
elif ((x - 1 * differ, y + 1 * differ) in lt2 and (
x - 2 * differ, y + 2 * differ) in lt2 and (
x - 3 * differ, y + 3 * differ) in lt2 and (
x - 4 * differ, y + 4 * differ) in lt2):
canvas.create_line(x, y, x - 4 * differ, y + 4 * differ,fill='red')
flag = 1
if flag == 1:
lb['text'] = '白子胜!'
canvas = tkinter.Canvas(root, width=550, height=510, bg='green')
canvas.bind('<ButtonPress-1>', set_chess)
canvas.pack()
lb = tkinter.Label(root,text='',width=10,height=1,bg='white')
lb.place(x=350,y=520)
differ = 30
x_1, y_1 = 50, 30
x_2, y_2 = x_1 + 30, y_1 + 30
rows, cols = 15, 15
for i in range(rows):
y1 = y_1 + i * differ
y2 = y_2 + i * differ
for j in range(cols):
x1 = x_1 + j * differ
x2 = x_2 + j * differ
rect = canvas.create_rectangle(x1, y1, x2, y2)
root.mainloop()