繁体   English   中英

Python:循环和范围问题

[英]Python: Trouble with loops and ranges

我是使用pygame以python语言编写游戏的新手。 这是一个基于光标的游戏,您可以在其中使用鼠标。 物体从屏幕顶部掉落,目的是抓住它们。 我使用范围函数来确定将要掉落的对象数。 我的代码确实有2个问题,我希望得到一些帮助。 我将在此处发布代码:

time = 150
level = 1
score = 0

class Bomb(pygame.sprite.Sprite):
def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    self.image = load_image("Bomb.png")
    screen = pygame.display.get_surface()
    self.rect = self.image.get_rect()

def bomb_spawn(self):
    self.rect.x = random.randrange(640)
    self.rect.y = random.randrange(-200, -0) # Respawns at the top

def update(self):    
    if self.rect.y > 805: # Respawns if colliding with bottom screen
        self.bomb_spawn()
    if self.rect.x < 105: # I do have a border/margin so if the object spawns outside 
        self.bomb_spawn() # It will respawn
    if level == 1:
        self.rect.y += 3 # The falling speed of the object increases for each level
    elif level == 2:
        self.rect.y += 4
    elif level == 3:
        self.rect.y += 5
    elif level == 4:
        self.rect.y += 6
    elif level == 5:
        self.rect.y += 7
    elif level == 6:
        self.rect.y += 8
    elif level == 7:
        self.rect.y += 9
    else:
        self.rect.y += 10
    if time <= 1: # Game over
        self.kill()

class Clocks(pygame.sprite.Sprite):
def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    self.image = load_image("Clock.png")
    screen = pygame.display.get_surface()
    self.rect = self.image.get_rect()

def clock_spawn(self):
    self.rect.x = random.randrange(640)
    self.rect.y = random.randrange(-200, -0)

def update(self):    
    if time < 100 and time >= 0: # Required for my current Clock range function    
        if self.rect.y > 805:
            self.clock_spawn()
    if self.rect.x < 105:
        self.clock_spawn()
    if level == 1:
        self.rect.y += 3
    elif level == 2:
        self.rect.y += 4
    elif level == 3:
        self.rect.y += 5
    elif level == 4:
        self.rect.y += 6
    elif level == 5:
        self.rect.y += 7
    elif level == 6:
        self.rect.y += 8
    elif level == 7:
        self.rect.y += 9
    else:
        self.rect.y += 10
    if time <= 1:
        self.kill()

while done == False:
time -= 0.150 # timer

level = int(score/2000) + 1 # new level when you reach 2000 points.

现在我要讲到重点,我在范围和循环方面遇到了一些麻烦。 首先从时钟开始,我希望仅在计时器低于100的情况下才产生时钟。我设法做到了这一点,但还有一个问题。 目前,我使用clock.rect.x = 2000,对rect.y相同,这意味着它们在我的屏幕之外生成。 我希望精灵消失/删除/杀死,然后在计时器低于100时重新生成。

for i in range(1):

clocks = Clocks()

if time > 100:

    clocks.rect.x = 2000 # spawns outside my screen, I want to change this.
    clocks.rect.y = 2000

elif time < 100:
    clocks.rect.x = random.randrange(640)
    clocks.rect.y = random.randrange(-200, -20)

ClockGroup.add(clocks)

接下来,我的炸弹范围确实有问题。 我想增加每个新级别的范围量。 例如:在1级中将有1枚炸弹,在2级中将有2枚炸弹,依此类推。

for i in range(1):
bomb = Bomb()

bomb.rect.x = random.randrange(640)
bomb.rect.y = random.randrange(-200, -20)

BombGroup.add(bomb)

#I have tried some methods but none of them were working.
#Here is what I went with 
if level == 2: # This is where I am at, I don't know how to proceed.

链接到完整代码: http : //pastebin.com/cpQwi2fR任何帮助将不胜感激。 真诚的HJ。

如果你想有n在水平炸弹n试试这个:

for _ in range(level): #level goes here
    bomb = Bomb()
    bomb.rect.x = random.randrange(640)
    bomb.rect.y = random.randrange(-200, -20)
    BombGroup.add(bomb)

也是这个片段:

if level == 1:
    self.rect.y += 3 # The falling speed of the object increases for each level
elif level == 2:
    self.rect.y += 4
elif level == 3:
    self.rect.y += 5
elif level == 4:
    self.rect.y += 6
elif level == 5:
    self.rect.y += 7
elif level == 6:
    self.rect.y += 8
elif level == 7:
    self.rect.y += 9
else:
    self.rect.y += 10

与此代码段相同:

self.rect.y += (level + 2) if level < 8 else 10

现在有了您的精灵问题,因为我从未使用过pygame,所以我无济于事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM