Pygame - 如何使需要躲避的障碍物数量增加

时间:2016-11-27 14:21:38

标签: python-2.7 pygame

我想以这样一种方式对我的游戏进行编程:当你的积分进展时,接近玩家的障碍会更快,并且会立即有更多障碍。我玩过我的代码并做了一些研究,但我尝试的一切似乎都失败了。 Python没有给我任何错误,只是没有出现更多的障碍。

enemy = pygame.image.load('tauros1.png')
....
def things(thingx, thingy):
gameDisplay.blit(enemy, (thingx, thingy))
....
thing_starty = -100
thing_speed = 7
thing_width = 42
thing_height = 43
thing_startx = random.randrange(192, displayWidth - 192)

dodged = 0
....
    things(thing_startx, thing_starty)
    thing_starty += thing_speed

    if thing_starty > displayHeight:
        thing_starty = 0 - thing_height
        thing_startx = random.randrange(192, ((displayWidth - 192) - thing_width))
        dodged += 1
        thing_speed += 2

这些是构成敌人基础的代码的组成部分。我已经尝试实现while循环,for循环和嵌入式if语句。我想不出任何其他的尝试。

1 个答案:

答案 0 :(得分:0)

我无法为您提供一个完整的答案,其中包含针对您游戏的特定代码,但我可以为您提供一些提示,使整个事情变得更简单,从而让您更好地控制您的所有元素游戏。

首先,你应该有一个"容器"为你的精灵。你可以拥有一个用于所有事情的东西,或者更好的是,让它们以一种有意义的方式分组。例如,你可能有环境精灵,敌人,盟友,HUD等。决定你如何分组精灵的决定因素基本上是他们做的:类似行为的精灵应该组合在一起。
您可以使用数组,但由于您正在使用pygame我建议pygame.sprite.Goup - 这会实现.update.draw等方法,这将大大改善你的代码的可理解性 - 以及你对游戏的控制。

你应该有一个"游戏循环" (虽然我猜你已经这么做了),这是每一帧都发生的地方。类似的东西:

# This code is only intended as a generic example. It wouldn't work on it's
# own and has many placehoders, of course. But you can adapt your
# game to have this kind of structure.

# Game clock keeps frame rate steady
theClock = pygame.time.Clock()

# Sprite groups!
allsprites = pygame.sprite.Group()
environmentSprites = pygame.sprite.Group()
enemySprites = pygame.game.Group()

# Initially populate sprite groups here, e.g.
environmentSprites.add(rockSprite)
allsprites.add(rockSprite)
# ...

# Game loop
while True:
    theClock.tick(max_fps)

    # Add new enemies:
    spawn_enemies(enemySprites, allSprites, player_score)

    # Update all sprites
    environmentSprites.update()
    enemySprites.update()
    playerSprite.update()

    # ...and draw them
    allSprites.draw(background)
    window.blit(background)
    pygame.display.flip()

通过这种方式,您可以缩短游戏循环次数(因为在很多行中,将大部分实际工作外部化为函数和方法),因此可以更好地控制发生的事情。

实现你想要的东西现在变得更加简单。你有一个单独的功能,只有那个,这意味着你可以专注于你想要的敌人如何产生player_score。我只是一个例子:

def spawn_enemies(enemyGroup, all, player_score):
    # Calculate the number of enemies you want
    num_enemies = player_score / 100
    for i in range(num_enemies):
        # Create a new enemy sprite instance and
        #   set it's initial x and y positions
        enemy = EnemyClass()
        enemy.xpos = random.randint(displayWidth, displayWidth + 100)
        enemy.ypos = random.randint(0, displayHeight)
        enemy.velocity = (player_score / 100) * base_velocity
        # Add the sprite to the groups, so it'll automatically
        # be updated and blitted in the main loop!
        enemyGroup.add(enemy)
        all.add(enemy)

如果您还没有pygame.sprite.Spritepygame.sprite.Grouppygame.time.Clock,我建议您阅读pygame docs and tutorials。我发现它们在开发游戏时非常有用。 tutorialy也很好地了解了游戏的最佳结构。

希望这有帮助。