导入 tkinter 模块

import tkinter as tk

定义全局变量

_al = [] # 已经落下的棋子坐标 _black = [] # 黑子的坐标 _white = [] # 白子的坐标 black = True # 黑子先手 stop = 0 # 判断是否结束游戏

定义回调函数

def callback(event): global _al, stop x = (event.x + 20) // 40 # 计算棋子在棋盘上的列数 y = (event.y + 10) // 40 + 1 # 计算棋子在棋盘上的行数 if event.x >= 40 and event.x <= 615 and event.y >= 20 and event.y <= 585 and stop == 0: # 判断落子是否在棋盘内 if [x, y] not in _al: # 判断该位置是否已经有棋子 _al.append([x, y]) # 记录该位置已经落子 if black == True: # 如果是黑子落子 black = False # 改为白子落子 victory = tk.Label(window, text='白子落子', bg='white', font=('Arial', 15), width=15, height=5) victory.place(x=650, y=100, anchor='nw') # 在界面上显示白子落子 _black.append([x, y]) # 记录黑子的位置 oval = canvas.create_oval((event.x + 20) // 40 * 40 - 15, (event.y + 8) // 40 * 40 + 5, (event.x + 20) // 40 * 40 + 15, (event.y + 8) // 40 * 40 + 35, fill='black') # 在界面上显示黑子 canvas.pack() else: # 如果是白子落子 black = True # 改为黑子落子 victory = tk.Label(window, text='黑子落子', bg='white', font=('Arial', 15), width=15, height=5) victory.place(x=650, y=100, anchor='nw') # 在界面上显示黑子落子 _white.append([x, y]) # 记录白子的位置 oval = canvas.create_oval((event.x + 20) // 40 * 40 - 15, (event.y + 8) // 40 * 40 + 5, (event.x + 20) // 40 * 40 + 15, (event.y + 8) // 40 * 40 + 35, fill='white') # 在界面上显示白子 canvas.pack() winner = win() # 判断是否有人获胜 if stop == 1: # 如果已经结束游戏 victory = tk.Label(window, text=winner + '获胜', bg='white', font=('Arial', 15), width=15, height=5) victory.place(x=650, y=100, anchor='nw') # 在界面上显示获胜者

游戏主程序

while (boss): init() # 初始化游戏 im = get_image('1675775510278.gif', 850, 600) # 加载游戏背景图 canvas.create_image(428, 300, image=im) # 在界面上显示游戏背景图 stop = 0 # 初始化游戏状态 _start = True if black == True: # 如果是黑子先手 victory = tk.Label(window, text='黑子落子', bg='white', font=('Arial', 15), width=15, height=5) victory.place(x=650, y=100, anchor='nw') # 在界面上显示黑子落子 else: # 如果是白子先手 victory = tk.Label(window, text='白子落子', bg='white', font=('Arial', 15), width=15, height=5) victory.place(x=650, y=100, anchor='nw') # 在界面上显示白子落子 while (_start): 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') for i in _black: oval = canvas.create_oval(i[0] * 40 - 15, i[1] * 40 - 35, i[0] * 40 + 15, i[1] * 40 - 5, fill='black') # 在界面上显示黑子 canvas.pack() for i in _white: oval = canvas.create_oval(i[0] * 40 - 15, i[1] * 40 - 35, i[0] * 40 + 15, i[1] * 40 - 5, fill='white') # 在界面上显示白子 canvas.pack() canvas.bind('', callback) # 绑定鼠标左键点击事件 canvas.pack() # 在界面上显示棋盘和棋子 window.mainloop() # 进入 tkinter 的事件循环,等待用户操作


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

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