Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用矩阵作为精灵_Python_Python 3.x_Pygame_Collision Detection_Overlap - Fatal编程技术网

Python 使用矩阵作为精灵

Python 使用矩阵作为精灵,python,python-3.x,pygame,collision-detection,overlap,Python,Python 3.x,Pygame,Collision Detection,Overlap,现在,我有一个球,它在屏幕上以随机的对角线方向移动,当球与它碰撞时,它会从墙上反弹 所述程序的图像 我的最终目标是让球成为一个矩阵,并让它在30x30网格上表现出同样的性能 我尝试了enumerate()函数,但想不出如何让它像我在本文末尾引用的图片和代码中那样运行。 所谓执行,我指的是在屏幕上沿对角线方向随机移动 这是矩阵球: Ball=[[0,1,1,1,0], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1,

现在,我有一个球,它在屏幕上以随机的对角线方向移动,当球与它碰撞时,它会从墙上反弹

所述程序的图像

我的最终目标是让球成为一个矩阵,并让它在30x30网格上表现出同样的性能


我尝试了enumerate()函数,但想不出如何让它像我在本文末尾引用的图片和代码中那样运行。 所谓执行,我指的是在屏幕上沿对角线方向随机移动

这是矩阵球:

Ball=[[0,1,1,1,0],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[0, 1, 1, 1, 0]]
这是我的表格:

class Grid():
网格=[]
对于范围(36)中的行:
#将容纳此行中每个单元格的空数组
grid.append([])
对于范围(91)中的列:
网格[行].追加(0)#追加单元格
下面是我的枚举循环:

#球所在位置的坐标
偏移量=(3,3)
#枚举矩阵以形成一个对象
对于x,枚举(球)中的行:
对于枚举(行)中的y,e:
网格[x+偏移[0]][y+偏移[1]]=e


我希望有人能帮忙。如果需要,我可以提供任何其他信息。以下是我的完整代码供参考:

导入系统 输入数学 从随机输入范围 导入pygame作为pg #定义一些颜色 黑色=(0,0,0) 白色=(255,255,255) 绿色=(0,255,0) 红色=(255,0,0) #这将设置每个栅格位置的宽度和高度 宽度=10 高度=10 #这将设置每个单元格之间的边距 保证金=1 #创建一个球,添加运动(现在是对角的) 班级舞会(第页雪碧、雪碧): 定义初始化(自我、位置、*组): 超级()。\uuuu初始化\uuuuu(组) self.image=pg.Surface((100100),pg.SRCALPHA)#创建一个曲面 col=randrange(256)、randrange(256)、randrange(256)#随机颜色 画圈(self.image,col,(50,50),50)#画一个圈 self.rect=self.image.get_rect(中心=pos) self.vel=pg.math.Vector2(8,0).rotate(randrange(360))#定义一个速度 self.pos=pg.math.Vector2(pos)#定义位置 self.overlap=False def更新(自我):#移动球 self.pos+=self.vel self.rect.center=self.pos 如果self.rect.left<0或self.rect.right>990: self.vel.x*=-1#使球从墙上反弹 如果self.rect.top<0或self.rect.bottom>385: 自我水平y*=-1 类网格(): 网格=[] 对于范围(36)中的行: #将容纳此行中每个单元格的空数组 grid.append([]) 对于范围(91)中的列: 网格[行].追加(0)#追加单元格 def main(): #self.overlap=False 屏幕=pg.display.set_模式((1000395)) #设置屏幕标题 pg.display.set_标题(“带网格的球”) 时钟=pg.time.clock() sprite_group=pg.sprite.group() ball=ball((495193),sprite_组) 完成=错误 虽然没有这样做: 对于pg.event.get()中的事件: 如果event.type==pg.QUIT: 完成=正确 #用于跟踪栅格坐标 如果event.type==pg.MOUSEBUTTONDOWN: #单击“获取位置”屏幕 pos=pg.mouse.get_pos() #将x/y屏幕坐标更改为栅格坐标 列=位置[0]/(宽度+边距) 行=位置[1]/(高度+边距) #将该位置设置为1 网格[行][列]=1 打印(“单击”,位置,“网格坐标:”,行,列) 如果event.type==pg.KEYDOWN: 如果event.key==pg.K_空格: 雪碧组。添加(球((320240))) #绘制网格并向单元格添加值 对于范围(36)中的行: 对于范围(91)中的列: 计数={(行,列):范围(36)中的行为0,范围(90)中的列为0} 颜色=白色 """ 当self.overlap==False时: 对于范围(0,36)内的i: 对于范围(0,91)内的j: 如果self.pos==行[i]和self.pos==列[j]: self.overlap=True 如果self.overlap==True: 颜色=红色 """ pg.draw.rect(屏幕, 颜色 [(边距+宽度)*列+边距, (边距+高度)*行+边距, 宽度, 高度]) sprite_group.update() sprite_组绘制(屏幕) pg.display.flip() 时钟滴答(30) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 第init页() main() 第页退出 sys.exit()

我不知道这是显而易见的还是太复杂了。无论如何,如果您能提供帮助,您会建议我如何实现我的最终目标?

创建一个可以从网格生成
.image
属性的sprite类:

类GridObject(pg.sprite.sprite):
定义初始化(自身、位置、网格、*组):
超级()。\uuuu初始化\uuuuu(组)
#从网格创建图像
self.grid=grid
self.gridsize=(len(网格[0]),len(网格))
imgsize=self.gridsize[0]*(宽度+边距),self.gridsize[1]*(高度+边距)
self.image=pg.Surface(imgsize,flags=pg.SRCA