所以,基本上我要做的是Tic-Tac-Toe的可定制版本。我有一个功能,可以完美地显示一个网格,具有特定数量的行和列,但现在我正在尝试创建一个能够获得该网格位置的函数。这是我正在使用的代码:
def getGridPos(rows, cols, display, pos):
x, y = pos
width, height = display.get_size()
xPos, yPos = (0, 0)
for yCount in range(rows):
if y <= height / rows * yCount and y >= height / rows * (yCount+1):
xPos = yCount
for xCount in range(rows):
if x <= width / cols * xCount and x >= x <= width / cols * (xCount+1):
yPos = xCount
return (xPos, yPos)
如果我在打印出来时只是感到沮丧:
print("You pressed the left mouse button at (%d, %d)" % getGridPos(3, 3, display, event.pos))
所以,基本上这里发生的是当我按下第一列和第二列中的单元格时,它将返回(0,2),但在第三列上,它返回(0,0)。我不知道这里发生了什么,但我会尝试其他一些尺寸然后我会更新。
所以,我尝试了一些更多的配置,这是我的结论:
答案 0 :(得分:1)
此类代码根本不需要for
个循环或if
个条件 -
简单的算术可以给你一个直接的答案:
from __future__ import division
def getGridPos(rows, cols, display, pos):
width, height = display.get_size()
x, y = pos
return (pos[0] // (width / cols), pos[1] // (height/rows))
(我只是使用from __future__
行从Python 3获得除法语义,因此无需担心在除法之前将值转换为浮点数 - 这可能是原始代码的实际错误,除此之外它比它应该复杂得多很多)