#-- coding:GBK --
from tkinter import *
import time
import tkinter.messagebox #messagebox
tk = Tk()
tk.title(“雷雷的五子棋游戏”)
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas(tk, width=800, height=800, bd=0, highlightthickness=0)
canvas.pack()
tk.update()
redorgreen=0
colorx=“green”
overornot=0
#position = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
#定义一个二维数组,初始化棋盘
position=[[0 for i in range(21)] for i in range(21)]
for i in range(0,21):
for j in range(0,21):
position[i][j]=0
#print(i,j,position[i][j])
global sum
#画棋盘
lines=[100,130,160,190,220,250,280,310,340,370,400,430,460,490,520,550,580,610,640,670,700]
for i in lines:
canvas.create_line(100,i,700,i)
canvas.create_line(i,100,i,700)
#横向向右及向左判断
def rightOrLeft(x1,y1):
sum=1
#向右判断
for i in range(x1,x1+5):
#print(x1,y1,position[i][y1])
#print(position[i][y1])
#print(position[i][y1])
if(position[i][y1]==0):
return
if(position[i][y1]==position[i+1][y1]):
sum+=1
#print('sum:',sum)
else:
break
#向左判断
for i in range(x1,x1-5,-1):
if(position[i][y1]==0):
return
if(position[i][y1]==position[i-1][y1]):
sum+=1
else:
break
if(sum>=5):
global overornot
overornot=1
tkinter.messagebox.showinfo('结束!',colorx+'获胜!')
def upOrDown(x1,y1):
sum=1
#向上判断
for i in range(y1,y1-5,-1):
if(position[x1][i]==0):
return
if(position[x1][i]==position[x1][i-1]):
sum+=1
#print(sum)
else:
break
#向下判断
for i in range(y1,y1+5):
if(position[x1][i]==0):
return
if(position[x1][i]==position[x1][i+1]):
sum+=1
#print(sum)
else:
break
if(sum>=5):
global overornot
overornot=1
tkinter.messagebox.showinfo('结束!',colorx+'获胜!')
def Obliquedirection(x1,y1):
sum=1
#右斜下方判断
global y0
y0=0
for i in range(x1,x1+5):
if(position[i][y1+y0]==0):
return
if(position[i][y1+y0]==position[i+1][y1+y0+1]):
sum+=1
#print(sum)
#print(y0)
else:
break
y0+=1
#左斜上方判断
global y00
y00=0
for i in range(x1,x1-5,-1):
if(position[i][y1-y00]==0):
return
if(position[i][y1-y00]==position[i-1][y1-y00-1]):
sum+=1
#print(sum)
#print(y0)
else:
break
y00+=1
if(sum>=5):
global overornot
overornot=1
tkinter.messagebox.showinfo('结束!',colorx+'获胜!')
def Obliquedirection2(x1,y1):
sum=1
#斜右上方判断
global y01
y01=0
for i in range(x1,x1+5):
#print(position[i][y1-y01])
#print(position[i+1][y1-y01-1])
if(position[i][y1-y01]==0):
return
if(position[i][y1-y01]==position[i+1][y1-y01-1]):
sum+=1
print(sum)
#print(y0)
else:
break
y01+=1
#斜左下方判断
global y001
y001=0
for i in range(x1,x1-5,-1):
if(position[i][y1+y001]==0):
return
if(position[i][y1+y001]==position[i-1][y1+y001+1]):
sum+=1
#print(sum)
#print(y0)
else:
break
y001+=1
if(sum>=5):
global overornot
overornot=1
tkinter.messagebox.showinfo('结束!',colorx+'获胜!')
def defcolorx():
global redorgreen
global colorx
if redorgreen==0:
redorgreen=1
colorx=“red”
else:
redorgreen=0
colorx=“green”
def action(event):
global redorgreen
global colorx
global overornot
if overornot==1:
tkinter.messagebox.showinfo('提示',"游戏已结束!")
return
if event.x<=100 or event.x>=700 or event.y<=100 or event.y>=700:
tkinter.messagebox.showinfo('提示',"请选择正确的落子位置!")
return
defcolorx()
'''
if redorgreen==0:
redorgreen=1
colorx="red"
else :
redorgreen=0
colorx="green"
'''
#tkinter.messagebox.showinfo('坐标测试',event.x)
#横纵坐标取整
x1=round((event.x-100)/30)
y1=round((event.y-100)/30)
#tkinter.messagebox.showinfo('坐标测试',x1)
#横纵坐标换算
x11=x1*30+100
y11=y1*30+100
#tkinter.messagebox.showinfo('坐标测试',x11)
#落子后改变当前点的数组元素值
if(position[x1][y1]!=0):
defcolorx()
'''
if redorgreen==0:
redorgreen=1
colorx="red"
else :
redorgreen=0
colorx="green"
'''
if(position[x1][y1]==0):
if(colorx=="green"):
position[x1][y1]=1
else:
position[x1][y1]=2
canvas.create_oval(x11-15,y11-15,x11+15,y11+15, fill =colorx )
rightOrLeft(x1,y1)
upOrDown(x1,y1)
Obliquedirection(x1,y1)
Obliquedirection2(x1,y1)
canvas.bind(’’, action)