import random, pygame
#window setup aswell as global variable
pygame.init()
screen_size = 400
global window
window = pygame.display.set_mode((screen_size,screen_size))
pygame.display.set_caption("evolution simulator")
pygame.display.update()
def draw_Grid():
global Grid
Grid = [[]]
blockSize = 20
for x in range(0,20):
for y in range(0,20):
Grid.append(1)
rect = pygame.Rect(x*blockSize, y*blockSize,blockSize, blockSize)
pygame.draw.rect(window,(0,0,0), rect, 1)
##draw_Grid()
##pygame.display.update()
class spurgs:
def __init__(self,age,hunger,speed,gender):
# 1 for male, 2 for female
self.hunger = hunger
self.speed = speed
self.gender = gender
self.age = age
def update(self):
#growing up
<块引用>
这里我正在设置它应该工作的变量,但它不是 ??!?
self.age = self.age + 1
self.hunger -= 1
if self.age > 10:
self.speed += 1
elif self.age >50:
self.speed -= 1
def eat(self):
self.hunger +=1
#remove some food to affect global food resource
def breed(self,mate):
if mate.gender != self.gender:
baby_gender = random.randint(1,2)
baby = spugs(1,100,20,baby_gender)
def draw(self,color,grid_coord_X,grid_coord_Y,size):
pygame.draw.circle(window,color,(grid_coord_X,grid_coord_Y),size)
run = True
while run:
window.fill((0,200,255))
draw_Grid()
#QUIT CONDITION
for event in pygame.event.get():
if event.type == pygame.QUIT:
print("closing the loop")
run = False
test_spurg = spurgs(10,100,1,2)
test_spurg.draw((0,255,20),20,20,5)
test_spurg.update()
print(test_spurg.age)
<块引用>
这里我在 while 循环中使用更新函数,它应该在每次迭代时改变年龄,即无限
pygame.display.update()
pygame.quit()
<块引用>
如果有任何其他语法错误,或者我只是不遵守某些通用规则,请随时指出!
答案 0 :(得分:1)
这是因为您在每次迭代中都在创建一个新对象。
我认为您只需要创建一个新对象并在 while
循环中使用它:
window.fill((0,200,255))
draw_Grid()
test_spurg = spurgs(10,100,1,2)
test_spurg.draw((0,255,20),20,20,5)
while run:
#QUIT CONDITION
for event in pygame.event.get():
if event.type == pygame.QUIT:
print("closing the loop")
run = False
test_spurg.update()
print(test_spurg.age)
答案 1 :(得分:1)
实际上,属性的值是改变的,但由于你每帧创建一个新对象,它会不断地从初始值开始。
需要在应用循环之前创建对象的实例,但是需要在应用循环中绘制场景:
# create objects
test_spurg = spurgs(10,100,1,2)
run = True
while run:
# handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
print("closing the loop")
run = False
# update objects
test_spurg.update()
print(test_spurg.age)
# draw scene
window.fill((0,200,255))
draw_Grid()
test_spurg.draw((0,255,20),20,20,5)
pygame.display.update()
对象是在应用程序循环之前创建的。在应用程序循环中,对象的属性,例如B. 它的位置不断变化,场景被重绘以反映变化。典型的 PyGame 应用程序循环必须:
pygame.event.pump()
或 pygame.event.get()
处理事件。blit
所有对象)pygame.display.update()
或 pygame.display.flip()
更新显示