Python Tkinter——五子棋游戏

这篇博客介绍了如何使用Python的Tkinter模块开发五子棋游戏,包括基本的窗口创建、消息循环,以及图形绘制、键盘鼠标事件处理。文章详细讲解了棋盘和棋子的绘制方法,实现了鼠标抬起事件的处理函数,并提供了胜利判断的逻辑。同时,给出了完整的源代码和预期的运行结果。
摘要由CSDN通过智能技术生成

Python Tkinter 实践系列——五子棋游戏

tkinter模块,窗口创建、消息循环等tkinter的基本架构
绘制图形,键盘及鼠标事件的处理程序

  1. 导入程序所需的库和模块
import sys
import tkinter
from tkinter import *
from tkinter.messagebox import *
  1. 命令处理函数
def startGame():
    global turn, board
    turn=True
    board=[[0 for i in range(15)] for j in range(15)]
    drawBoard()

def exit():
    win.destroy()
    sys.exit()
    
def about():
    showinfo("About", "Gobang v0.1")

  1. 绘制棋盘和棋子
def drawBoard():
    global canvas, board

    canvas.delete("all")                                       
    for i in range(15):                                             
        canvas.create_line(30, 30+40*i, 30+40*14, 30+40*i, width=1, fill='black')
    for j in range(15):                                          
        canvas.create_line(30+40*j, 30, 30+40*j, 30+40*14, width=1, fill='black')

    for i in range(15):
        for j in range(15):
            if board[i][j]==0:                                    
                continue
            elif board[i][j]==-1:                              
                color='black'
            else:                                                
                color='white'
            canvas.create_oval(j*40+15, i*40+15, j*40+45, i*40+45, fill=color)

4.鼠标左键抬起事件的事件处理函数

def onMouseUp(event):
    global turn
    x,y=event.x,event.y                                             
    if x>10 and x<610 and y>10 and y<610:
        n=(x-10)//40                                                
        m=(y-10)//40
tkinter 实现的五子棋UI界面 import tkinter as tk from tkinter import messagebox from chessboard import ChessBoard ChessBoard = ChessBoard() class GUI(object): def __init__(self): self.counter = 0 self.winner = 0 self.is_start = False self.is_surrender = False self.window = tk.Tk() # 窗口对象(首字母大写) self.window.title('Gobang') self.window.geometry('800x540') self.window.resizable(width = False, height = False) # 画布对象 棋盘 self.canvas = tk.Canvas(self.window, height = 540, width = 540) self.chessboard = tk.PhotoImage(file = 'Gobang_chessboard/chessboard.gif') self.blackpoint = tk.PhotoImage(file = 'Gobang_chessboard/blackpoint.gif') self.whitepoint = tk.PhotoImage(file = 'Gobang_chessboard/whitepoint.gif') self.canvas.create_image(0, 0, anchor = 'nw', image = self.chessboard) self.canvas.bind("", self.get_point) self.start_point = 10 # 起始点位置 self.step = 35 # 每个格子的跨度 self.canvas.place(x = 0, y = 0) # 标签对象 self.l_info = tk.Label(self.window, text = 'Not started', font=('Arial', 12), width = 25, height = 2) self.l_info.place(x = 545, y = 0) # 文本框对象 self.t = tk.Text(self.window, height = 15) self.t.place(x = 540, y = 40) # 按钮对象 self.f_header = tk.Frame(self.window, highlightthickness=0) self.b_start = tk.Button(self.f_header, text = 'start', command = self.start) self.b_restart = tk.Button(self.f_header, text = 'restart', command = self.restart) self.b_regret = tk.Button(self.f_header, text = 'regret', command = self.regret) self.b_surrender = tk.Button(self.f_header, text = 'surrender', command = self.surrender) self.f_header.place(x = 545, y = 250) self.b_start.pack(side='left', padx=10) self.b_restart.pack(side = 'left') self.b_surrender.pack(side = 'right') self.b_regret.pac
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值