导入必要的模块

from PIL import ImageTk, Image import tkinter as tk

定义全局变量

_al = [] # 存储所有落子的位置 _white = [] # 存储白子的位置 _black = [] # 存储黑子的位置 stop = 0 # 标志游戏是否结束 boss = True # 标志游戏是否继续进行 black = True # 标志当前下棋的是黑子还是白子

定义函数:读取图片文件并转换为Tkinter中的PhotoImage对象

def get_image(filename, width, height): im = Image.open(filename).resize((width, height)) return ImageTk.PhotoImage(im)

定义函数:初始化游戏

def init(): global black, window, canvas window = tk.Tk() # 创建窗口 window.title('五子棋') # 设置窗口标题 window.geometry('850x600') # 设置窗口大小 canvas = tk.Canvas(window, height=600, width=850) # 创建画布 for i in range(1, 16): # 绘制棋盘网格线 line = canvas.create_line(i * 40, 20, i * 40, 580) line = canvas.create_line(40, i * 40 - 20, 600, i * 40 - 20) rect = canvas.create_rectangle(35, 15, 605, 585) # 绘制棋盘边框 rect = canvas.create_rectangle(34, 14, 606, 586) # 加粗边框 oval = canvas.create_oval(157, 137, 163, 143, fill='black') # 绘制中心点 oval = canvas.create_oval(157, 457, 163, 463, fill='black') oval = canvas.create_oval(477, 137, 483, 143, fill='black') oval = canvas.create_oval(477, 457, 483, 463, fill='black') oval = canvas.create_oval(315, 296, 325, 304, fill='black') end = tk.Button(window, text='结束游戏', bg='white', font=('Arial', 12), width=15, height=2, command=on_end) # 创建“结束游戏”按钮 end.place(x=650, y=460, anchor='nw') # 设置按钮位置 start = tk.Button(window, text='重新开始', bg='white', font=('Arial', 12), width=15, height=2, command=on_start) # 创建“重新开始”按钮 start.place(x=650, y=300, anchor='nw') # 设置按钮位置 regret = tk.Button(window, text='悔棋', bg='white', font=('Arial', 12), width=15, height=2, command=on_regret) # 创建“悔棋”按钮 regret.place(x=650, y=380, anchor='nw') # 设置按钮位置 canvas.pack() # 显示画布

定义函数:悔棋

def on_regret(): global _al, _black, _white, black, _start _start = False # 停止游戏 _al.pop() # 删除最后一次落子的位置 if black == True: _white.pop() # 删除白子的位置 black = False # 轮到黑子下棋 else: _black.pop() # 删除黑子的位置 black = True # 轮到白子下棋 print(black) window.destroy() # 关闭窗口

定义函数:重新开始游戏

def on_start(): global _start, _al, _black, _white _start = False # 停止游戏 del _al, _black, _white # 删除所有落子的位置 _al = [] # 重新创建空列表 _white = [] # 重新创建空列表 _black = [] # 重新创建空列表 window.destroy() # 关闭窗口

定义函数:结束游戏

def on_end(): global boss, _start boss = False # 停止游戏 _start = False # 停止游戏 window.destroy() # 关闭窗口

定义函数:检测胜负

def win(): global stop temp1 = 0 temp2 = 0 for i in range(0, 16): # 检查行 for j in range(0, 16): if [i, j] in _black: temp1 = temp1 + 1 if temp1 == 5: stop = 1 return 'black' else: temp1 = 0 if [i, j] in _white: temp2 = temp2 + 1 if temp2 == 5: stop = 1 return 'white' else: temp2 = 0 for i in range(0, 16): # 检查列 for j in range(0, 16): if [j, i] in _black: temp1 = temp1 + 1 if temp1 == 5: stop = 1 return 'black' else: temp1 = 0 if [j, i] in _white: temp2 = temp2 + 1 if temp2 == 5: stop = 1 return 'white' else: temp2 = 0 for i in range(0, 16): # 检查正对角线 for j in range(0, 16): if [i, j] in _black and [i + 1, j + 1] in _black and [i + 2, j + 2] in _black and [i + 3, j + 3] in _black and [i + 4, j + 4] in _black: stop = 1 return 'black' if [i, j] in _white and [i + 1, j + 1] in _white and [i + 2, j + 2] in _white and [i + 3, j + 3] in _white and [i + 4, j + 4] in _white: stop = 1 return 'white' for i in range(0, 16): # 检查反对角线 for j in range(0, 16): if [i, j] in _black and [i + 1, j - 1] in _black and [i + 2, j - 2] in _black and [i + 3, j - 3] in _black and [i + 4, j - 4] in _black: stop = 1 return 'black' if [i, j] in _white and [i + 1, j - 1] in _white and [i + 2, j - 2] in _white and [i + 3, j - 3] in _white and [i + 4, j - 4] in _white: stop = 1 return 'white'

五子棋游戏:Python Tkinter 实现

原文地址: http://www.cveoy.top/t/topic/ojFB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录