在自定义PyGame网格中获取单击位置的问题

时间:2015-05-06 20:49:02

标签: python pygame

所以,基本上我要做的是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)。我不知道这里发生了什么,但我会尝试其他一些尺寸然后我会更新。

更新

所以,我尝试了一些更多的配置,这是我的结论:

  • 在10x10布局的前7列中按下时,它将返回(0,2)
  • 在10x10布局的最后7列中按下时,它将返回(0,0)

1 个答案:

答案 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获得除法语义,因此无需担心在除法之前将值转换为浮点数 - 这可能是原始代码的实际错误,除此之外它比它应该复杂得多很多)