我有一个经典的蛇游戏,我试图让蛇更大,所以我开始使用打印功能来筛选而不是像素。我尝试了这些代码(我不会写整个代码,因为它可能会混淆):
class Worm(pygame.sprite.Sprite):
def __init__(self, surface,seg_width,seg_height):
self.surface = surface #this is ==> screen=pygame.display.set_mode((w, h))
self.x = surface.get_width() / 2
self.y = surface.get_height() / 2
self.length = 1
self.grow_to = 50
self.vx = 0
self.vy = -seg_width
self.body = []
self.crashed = False
self.color = 255, 255, 0
self.rect = pygame.Rect(self.x,self.y,seg_width,seg_height)
self.segment = pygame.Rect(0,0,seg_width,seg_height)
def move(self):
""" Move the worm. """
self.x += self.vx
self.y += self.vy
self.rect.topleft = self.x, self.y
if (self.x, self.y) in self.body:
self.crashed = True
self.body.insert(0, (self.x, self.y)) #Func of moving the snake
new_segment = self.segment.copy()
self.body.insert(0, new_segment.move(self.x, self.y))
if len(self.body) > self.length:
self.body.pop()
def draw(self):
for SEGMENT in self.body: #Drawing the snake
self.surface.fill((255,255,255), SEGMENT) #This is where I got error <-----
如果我使用像素,我的代码工作正常,但我想要一条更大的蛇(不再长,我的意思是更厚)所以我想我可以使用rects,我试过这个,但它给了我;
self.surface.fill((255,255,255), SEGMENT)
ValueError: invalid rectstyle object
SEGMENT实际上是一个坐标元组,为什么我得到这个错误呢? 在我按f5之后,我首先看到这个屏幕,所以基本上我的理论正在工作,但它是一个奇怪的输出,一个矩形小于其他? 为什么?“0”是记分牌,我没有像我说的那样编写完整的代码。
我只是不明白为什么,我该怎么做才能解决它?
我想再次这样说,因为它也可能会混淆, surface 参数实际上代表screen = pygame.display.set_mode((w, h))
这个,w = widht
和h = height
。
这是像素,所以我想要一条较粗的蛇,由不是像素构建。
编辑:来自 nbro 的回答,我改变了这个
self.body.insert(0, (self.x, self.y,self.x, self.y))
所以它现在是一个包含4个元素的元组,但输出很奇怪..
答案 0 :(得分:3)
使用简单的print
在某处调试代码很容易。我刚刚放了一个print
:
def draw(self):
for SEGMENT in self.body:
print(SEGMENT)
self.surface.fill((255,255,255), SEGMENT) #This is where I got error <-----
我立即发现了你的问题。 SEGMENT
必须是基于矩形的形状,这意味着您必须指定x
,y
,width
和height
,但在某些时候, SEGMENT
假设一个tuple
值由2个元素组成,这是不正确的,它必须是4个元素的元组!
特别是我收到错误时的输出是:
<rect(320, 210, 30, 30)>
<rect(320, 180, 30, 30)>
(320.0, 180.0)
现在我认为你可以试着看看为什么即使没有我的帮助它也会假设2个元素的第三元组。