2016-11-27 1 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ループ、forループ、組み込みif文を実装しようとしました。私は他の何かを試してみることはできません。

+0

あなたが霊である場合、リストにはそれぞれの(x、y)座標が含まれているとしましょう。最初にそれぞれの精神を動かしてからblitすることができます。ゲーム。 – Simon

答えて

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をよく読んでお勧めします。私はそれらを私のゲームを開発するときに本当に便利だと思った。チュートリアルでは、ゲームがどのようにして最善の構造をとっているかについてもかなり良い考えを示しています。

これが役に立ちます。

+0

私は 'pygame'スプライトとグループを使って例を挙げましたが、あなたはもちろんそれが好きな方法で行うことができます。リストと(x、y、v)タプルを使用します。原則は同じです。これはちょうど私がそれをするのが好きです;) –

関連する問題