<p>我相信你没有充分利用pythonthurtle会让问题变得更加棘手。在点击屏幕时,不要试图在棋盘上找到一个方块,而是让棋盘上的方块变成海龟,对鼠标的点击做出反应。那就没什么好弄清楚的了,就位置而言。在</p>
<p>下面是一个重新实现,可以绘制一个板,允许您单击它,交替地将单击的部分设置为“X”或“O”:</p>
<pre><code>from turtle import Turtle, Screen
CURSOR_SIZE = 20
SQUARE_SIZE = 50
FONT_SIZE = 40
FONT = ('Arial', FONT_SIZE, 'bold')
class TicTacToe:
def __init__(self):
self.board = [['?'] * 3 for i in range(3)] # so you can interrogate squares later
self.turn = 'X'
def drawBoard(self):
background = Turtle('square')
background.shapesize(SQUARE_SIZE * 3 / CURSOR_SIZE)
background.color('black')
background.stamp()
background.hideturtle()
for j in range(3):
for i in range(3):
box = Turtle('square', visible=False)
box.shapesize(SQUARE_SIZE / CURSOR_SIZE)
box.color('white')
box.penup()
box.goto(i * (SQUARE_SIZE + 2) - (SQUARE_SIZE + 2), j * (SQUARE_SIZE + 2) - (SQUARE_SIZE + 2))
box.showturtle()
box.stamp() # blank out background behind turtle (for later)
self.board[j][i] = box
box.onclick(lambda x, y, box=box, i=i, j=j: self.mouse(box, i, j))
def mouse(self, box, i, j):
box.onclick(None) # disable further moves on this square
# replace square/turtle with (written) X or O
box.hideturtle()
box.color('black')
box.sety(box.ycor() - FONT_SIZE / 2)
box.write(self.turn, align='center', font=FONT)
self.board[j][i] = self.turn # record move
self.turn = ['X', 'O'][self.turn == 'X'] # switch turns
screen = Screen()
game = TicTacToe()
game.drawBoard()
screen.mainloop()
</code></pre>
<p>您可以使用<code>board</code>来评分,或者实现一个智能计算机播放器,或者任何你想要的东西。在</p>
<p><a href="https://i.stack.imgur.com/LNFkB.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/LNFkB.png" alt="enter image description here"/></a></p>