我想以这样一种方式对我的游戏进行编程:当你的积分进展时,接近玩家的障碍会更快,并且会立即有更多障碍。我玩过我的代码并做了一些研究,但我尝试的一切似乎都失败了。 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语句。我想不出任何其他的尝试。
答案 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.Sprite
,pygame.sprite.Group
和pygame.time.Clock
,我建议您阅读pygame docs and tutorials。我发现它们在开发游戏时非常有用。 tutorialy也很好地了解了游戏的最佳结构。
希望这有帮助。