0

先日、友人と私は退屈していたので、python で簡単なゲームを作ることにしました。オブジェクトは表示ウィンドウの上部から落下し、ユーザーはボックスを制御して、地面に衝突する前にオブジェクトをキャッチする必要があります。私たちは、他のオブジェクトよりも多くのポイントに値するさまざまなオブジェクトを用意することにしました。私の質問は、ランダムに落下するオブジェクトの 1 つのインスタンスをどのように画像に切り替えるかです。

0〜10のランダムな整数である変数を使用して、これを自分でやろうとしました。整数が 5 未満の場合、画像はコウモリとして設定されます。整数が 5 より大きい場合、画像はゴーストとして設定されます。

私の試みたコーディングは次のとおりです。

    #Detect if user has missed a bomb#

    bomb_img = 0
    bomb_y += vel_y
    if bomb_y > 500:
        bomb_x = random.randint(0, 500)
        bomb_y = -50
        bomb_img = random.randint(0,10)
        lives -= 1
        if lives == 0:
            game_lost = True

    #Detect if user has saved a bomb#
    elif bomb_y > pos_y:
        if bomb_x > pos_x and bomb_x < pos_x + 120:
            score += 10
            bomb_x= random.randint(0,500)
            bomb_y = -50
            bomb_img = random.randint(0,10)

    #Change bomb img#       
    ghost = pygame.image.load("ghost2.png").convert_alpha()
    bat = pygame.image.load("bat2.png").convert_alpha()
    bat_resize = pygame.transform.scale(bat, (133,95))
    if bomb_img <= 5:
        _display_window.blit(bat_resize, (bomb_x, bomb_y))
    else:
        _display_window.blit(ghost, (bomb_x, bomb_y))

ただし、これは実行時に期待どおりに機能しません。写真は幽霊に変わりますが、落下し続けるバットに戻る前のほんの一瞬です。

また、次のコード行を切り替えてみました。

if bomb_img <= 5:
    _display_window.blit(ghost, (bomb_x, bomb_y))
else:
    _display_window.blit(bat_resize, (bomb_x, bomb_y))

この場合、画像はゴーストに戻る前に、ランダムに一瞬コウモリに変わります。

基本的に画像を変更できますが、ほんの一瞬です。何かご意見は?

4

1 に答える 1

0

問題は、ループの開始時、つまりコードの最初の行で bomb_img をリセットしたことのようです。

bomb_img = 0
...

その行をループの外に引っ張る必要があります。

于 2013-01-11T10:53:45.903 に答える