汇智学堂-phthon小游戏(五子棋完成版)

#-- 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)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39593940/article/details/88572314