现在,我有一个类可以创建网格,将对象与网格对齐,然后当对象在网格上移动时,它计算对象与特定单元重叠的次数
我的目标是,不是计算重叠的数量,而是从N值中减去重叠的数量。例如,当hitGrid中的值为10时,程序将从10中减去,并在hitGrid为0时结束,而不是结束程序
这是我的密码:
WIDTH, HEIGHT, MARGIN = 10, 10, 1
Object = [[1]]
class GridObject(pg.sprite.Sprite):
def __init__(self, pos, grid, *groups):
super().__init__(groups)
# create image from grid
self.grid = grid
self.gridsize = (len(grid[0]), len(grid))
imgsize = self.gridsize[0] * (WIDTH+MARGIN), self.gridsize[1] * (HEIGHT+MARGIN)
self.image = pg.Surface(imgsize, flags = pg.SRCALPHA)
self.image.fill((0, 0, 0, 0))
col = BLACK
for c in range(self.gridsize[0]):
for r in range(self.gridsize[1]):
if self.grid[r][c] == 1:
rect = [(MARGIN + WIDTH) * c + MARGIN, (MARGIN + HEIGHT) * r + MARGIN, WIDTH, HEIGHT]
pg.draw.rect(self.image, col, rect)
self.rect = self.image.get_rect(center=pos)
self.vel = pg.math.Vector2(8, 0).rotate(randrange(360))
self.pos = pg.math.Vector2(pos)
def update(self, boundrect, hitGrid, hitList):
self.pos += self.vel
self.rect.center = self.pos
if self.rect.left <= boundrect.left or self.rect.right >= boundrect.right:
self.vel.x *= -1
if self.rect.top <= boundrect.top or self.rect.bottom >= boundrect.bottom:
self.vel.y *= -1
# align rect to grid
gridpos = round(self.rect.x / (WIDTH+MARGIN)), round(self.rect.y / (HEIGHT+MARGIN))
self.rect.topleft = gridpos[0] * (WIDTH+MARGIN), gridpos[1] * (HEIGHT+MARGIN)
# increment touched filled
global max_hit
max_hit = 0
oldHitList = hitList[:]
hitList.clear()
for c in range(self.gridsize[0]):
for r in range(self.gridsize[1]):
p = gridpos[1] + r, gridpos[0] + c
if p in oldHitList:
hitList.append(p)
elif self.grid[r][c] == 1:
if p[0] < len(hitGrid) and p[1] < len(hitGrid[p[0]]):
hitList.append(p)
if p not in oldHitList:
hitGrid[p[0]][p[1]] +=1
max_hit = max(max_hit, hitGrid[p[0]][p[1]])
print(hitGrid[p[0]][p[1]])
这里并不完全清楚您的意图是什么,因为上面的代码在一些方面是不完整的。。。也就是说,你应该考虑一些策略。现在,您正在尝试计算的代码块即将获得“年度丑陋代码块”奖,因此我们需要做一些工作
有几件事需要考虑
在伪代码中
dictionary
、二维列表或numpy
数组。它们中的任何一个都足够快,可以玩一个简单的游戏,所以你可以随意使用。这个跟踪数据结构应该是游戏的一个属性,并在游戏开始时初始化,等等。下面是一个缩略图,说明如何使用字典来实现这一点,这可能是最简单的李>您可以创建一个类似的函数,并在计算
gridpos
之后从update
函数调用它相关问题 更多 >
编程相关推荐