前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3 五子棋(tkinter)

python3 五子棋(tkinter)

作者头像
用户5760343
发布2019-12-12 18:06:42
9970
发布2019-12-12 18:06:42
举报
文章被收录于专栏:sktj

coding: utf-8

from tkinter import * import random

BOARD_WIDTH = 535 BOARD_HEIGHT = 536 BOARD_SIZE = 15

定义棋盘坐标的像素值和棋盘数组之间的偏移距。

X_OFFSET = 21 Y_OFFSET = 23

定义棋盘坐标的像素值和棋盘数组之间的比率。

X_RATE = (BOARD_WIDTH - X_OFFSET * 2) / (BOARD_SIZE - 1) Y_RATE = (BOARD_HEIGHT - Y_OFFSET * 2) / (BOARD_SIZE - 1) BLACK_CHESS = "●" WHITE_CHESS = "○" board = []

把每个元素赋为"╋",代表无棋

for i in range(BOARD_SIZE) : row = ["╋"] * BOARD_SIZE board.append(row)

创建窗口

root = Tk()

禁止改变窗口大小

root.resizable(width=False, height=False)

修改图标

root.iconbitmap('images/fklogo.ico')

设置窗口标题

root.title('五子棋')

创建并添加Canvas

cv = Canvas(root, background='white', width=BOARD_WIDTH, height=BOARD_HEIGHT) cv.pack() bm = PhotoImage(file="images/board.png") cv.create_image(BOARD_HEIGHT/2 + 1, BOARD_HEIGHT/2 + 1, image=bm) selectedbm = PhotoImage(file="images/selected.gif")

创建选中框图片,但该图片默认不在棋盘中

selected = cv.create_image(-100, -100, image=selectedbm) def move_handler(event): # 计算用户当前的选中点,并保证该选中点在0~14之间 selectedX = max(0, min(round((event.x - X_OFFSET) / X_RATE), 14)) selectedY = max(0, min(round((event.y - Y_OFFSET) / Y_RATE), 14)) # 移动红色选择框 cv.coords(selected,(selectedX * X_RATE + X_OFFSET, selectedY * Y_RATE + Y_OFFSET)) black = PhotoImage(file="images/black.gif") white = PhotoImage(file="images/white.gif") def click_handler(event): # 计算用户的下棋点,并保证该下棋点在0~14之间 userX = max(0, min(round((event.x - X_OFFSET) / X_RATE), 14)) userY = max(0, min(round((event.y - Y_OFFSET) / Y_RATE), 14)) # 当下棋点没有棋子时,才能下棋子,用户才能下棋子 if board[userY][userX] == "╋": cv.create_image(userX * X_RATE + X_OFFSET, userY * Y_RATE + Y_OFFSET, image=black) board[userY][userX] = "●" while(True): comX = random.randint(0, BOARD_SIZE - 1) comY = random.randint(0, BOARD_SIZE - 1) # 如果电脑要下棋的点没有棋子时,才能让电脑下棋 if board[comY][comX] == "╋": break cv.create_image(comX * X_RATE + X_OFFSET, comY * Y_RATE + Y_OFFSET, image=white) board[comY][comX] = "○" def leave_handler(event): # 将红色选中框移出界面 cv.coords(selected, -100, -100)

为鼠标移动事件绑定事件处理函数

cv.bind('<Motion>', move_handler)

为鼠标点击事件绑定事件处理函数

cv.bind('<Button-1>', click_handler)

为鼠标移出事件绑定事件处理函数

cv.bind('<Leave>', leave_handler) root.mainloop()

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • coding: utf-8
  • 定义棋盘坐标的像素值和棋盘数组之间的偏移距。
  • 定义棋盘坐标的像素值和棋盘数组之间的比率。
  • 把每个元素赋为"╋",代表无棋
  • 创建窗口
  • 禁止改变窗口大小
  • 修改图标
  • 设置窗口标题
  • 创建并添加Canvas
  • 创建选中框图片,但该图片默认不在棋盘中
  • 为鼠标移动事件绑定事件处理函数
  • 为鼠标点击事件绑定事件处理函数
  • 为鼠标移出事件绑定事件处理函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档