2016-11-27 70 views
0

我想以這樣的方式編程我的遊戲,即隨着你的積分的進步,接近玩家的障礙物會更快,並且有更多的障礙物在一旦。我玩過我的代碼並做了一些研究,但我嘗試的一切似乎都失敗了。 Python並沒有給我任何錯誤,只是更多的障礙沒有出現。Pygame - 如何使需要躲避的障礙物數量增加

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循環,循環和嵌入if語句。我想不出別的辦法。

+0

如果你讓你精神振奮,就可以說列表中包含每個(x,y)的座標,你可以先移動每個靈魂然後將它們移動,讓你對自己有更多的控制權遊戲。 – Simon

回答

0

我不能給你一個完整的答案,用你的遊戲特定的代碼,但是我可以給你一些提示,讓整個事情變得更簡單,這會讓你更好地控制遊戲中的所有元素。

首先,你應該有一個「容器」爲你的精靈。你可以爲每件事物配備一個,或者更好的是,以合理的方式分組。例如,你可能有環境精靈,敵人,盟友,平視顯示器等。什麼決定你如何將你的精靈分組,基本上是他們所做的:類似行爲的精靈應該組合在一起。
你可以使用一個數組,但由於你使用的是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 docs and tutorials的東西像pygame.sprite.Spritepygame.sprite.Grouppygame.time.Clock閱讀,如果你還沒有準備好。我發現他們在開發我的遊戲時非常有用。教程也給了遊戲最佳結構的一個很好的概念。

希望這會有所幫助。

+0

我給出了一些使用'pygame'精靈和組的例子,但是你可以用任何你喜歡的方式來做它,例如使用列表和(x,y,v)元組。原則保持不變。這就是我喜歡做的事情;) –