Python/Pygame - 网格上的最近坐标

sda*_*das 2 python grid pygame

这是用Python和Pygame实现的,但它是一个相当普遍的编程问题(意思是独立于实现).

我有一个函数,它接受x和y整数作为输入,并应生成一个3x3网格的相邻点(包括x和y).

注意:0,0原点从左上角开始.向右移动时x增加,y向下移动时增加.

例如.

def nearest_grid(x, y):
    return [[(x-1,y-1),(x,y-1),(x+1,y-1)],[(x-1,y)(x,y),(x+1,y)],[(x-1,y+1),(x,y+1),(x+1,y+1)]]
Run Code Online (Sandbox Code Playgroud)

因此,给定一个网格和一个点(标记为p),它将以下列为3个列表的列表:

x  x  x
x  p  x
x  x  x
Run Code Online (Sandbox Code Playgroud)

这是在Python中执行此操作的最有效/易读的方法吗?

编辑:假设我想传递一个半径值(上面的半径值为1).所以,如果我通过半径值为2,那么上述方法很快就会变得很烦人.有更普遍的方式吗?

Hug*_*ell 5

def nearby_grid_points(x, y, r=1):
    res = []
    for dy in xrange(-r, r+1):
        res.append([(x+dx, y+dy) for dx in xrange(-r, r+1)])
    return res
Run Code Online (Sandbox Code Playgroud)