python - 如何让我的鼠标左键在 tkinter、python 的棋盘井字游戏中画一个圆圈
问题描述
这是我的代码,玩家可以在其中选择圆的位置。现在的目标是我的鼠标左键单击指示圆圈的位置。我对 def motion 有一个想法,但我不知道如何展望它。任何想法
'''代码'''
import tkinter
root=tkinter.Tk(
#let's create background
finestra = tkinter.Canvas(root,
borderwidth = 0,
background = 'blue',
cursor = 'circle',
height=600,
width=600)
def ini_finestra(finestra):
finestra
finestra.pack()
ini_finestra(finestra)
alturay=0
dx=0
def ini_graella(): #draw the board
# create horizontal line
finestra.create_line(75,75+alturay ,
525, 75+alturay,
fill = 'red',
width = '5')
# draw vertical line
finestra.create_line(75+dx,75 ,
75+dx,525 ,
fill = 'red',
width = '5')
linia=4
while linia>0:
ini_graella()
linia=linia-1
alturay=alturay+150
dx=dx+150
AX=0
AY=0
def marca_casella1():
finestra.create_oval(75+75,75+75,
225,225+AX,
fill='green',
width='0')
def player_1():
finestra.create_oval(75+150*(torn_player_1_fila-1),75+150*(torn_player_1_columna-1),
(150+75)+150*(torn_player_1_fila-1),(225)+150*(torn_player_1_columna-1),
fill="green",
width=3)
def player_2():
finestra.create_oval(75+150*(torn_player_2_fila-1),75+150*(torn_player_2_columna-1),
(150+75)+ 150*(torn_player_2_fila-1),(150+75)+150*(torn_player_2_columna-1),
fill="grey",
width=3)
posicion=2
while posicion>0:
torn_player_1_fila=int(input("Player 1 elige la fila de tu ficha"))
torn_player_1_columna=int(input("Player 1 elige la columna tu ficha"))
torn_player_2_fila=int(input("Player 2 elige la fila de tu ficha"))
torn_player_2_columna=int(input("Player 2 elige la columna de tu ficha"))
player_1()
player_2()
posicion=posicion-2
finestra.mainloop()
你知道我应该做什么吗?
解决方案
def draw_circle_in_box(x, y):
offset_x, offset_y = 75, 75
box_size = 150
box_x_id = (x - offset_x) // box_size
box_y_id = (y - offset_y) // box_size
if box_x_id > 2 or box_x_id < 0 or box_y_id > 2 or box_y_id < 0:
return # Out of bounds
finestra.create_oval(box_x_id * box_size + offset_x,
box_y_id * box_size + offset_y,
box_x_id * box_size + offset_x + box_size,
box_y_id * box_size + offset_y + box_size,
fill="grey",
width=3)
def click_callback(event):
draw_circle_in_box(event.x, event.y)
finestra.bind("<Button-1>", click_callback)
至于具有正确颜色的圆圈,并且您注册它已被正确的玩家输入,您应该click_callback()
变成一个将成为游戏类的一部分的方法,它可以像您一样访问当前玩家将其存储为属性。除了全局变量(由于许多原因,这被认为是不好的做法)之外,没有其他简单的方法可以让您知道给它什么颜色。
我没有为你实现它,因为它意味着要大量重构你的代码,而且我不会为你编写看起来像是学校项目的东西。如果你不能让你的新代码工作,请打开另一个线程。
推荐阅读
- c++ - FFMPEG:“服务器回复中的传输不匹配”但 openRTSP 有效
- macos - 在我的 Mac 上使用 Mission Control 时,有时窗口会随机变为不可见
- amazon-web-services - AWS ECS 集群:创建第二个实例,移动容器
- python - 错误:“numpy.int64”对象在推荐系统中不可迭代
- c++ - 是否可以从 cpp 模块导出 constexpr 函数指针?
- python - 您如何允许用户控制海龟并在悬停在所需位置上时为这些坐标执行特定功能
- entity-framework - database-first ef dbcontext 脚手架将表名翻译为德语
- android - 禁用 DrawerLayout 滑动手势以打开和关闭菜单
- angular - 打字稿(Angular 服务)和解决连接错误的良好做法
- javascript - 具有相同类名的 Javascript 复选框