0

pygame を学習するための非常に基本的なゲームを作成し、アヒル (プレイヤー) が岩をかわす必要があるようにしようとしていますが、岩をランダムに配置して横にスクロールすることはできません。

これが私の現在のコードです:

import pygame
import os
import random


img_path = os.path.join('C:\Python27', 'player.png')
img_path2 = os.path.join('C:\Python27', 'rock.png')


class Bird(object):  
    def __init__(self):

        self.image = pygame.image.load(img_path)
        self.x = 0
        self.y = 0


def handle_keys(self):
    """ Handles Keys """
    key = pygame.key.get_pressed()
    dist = 3 
    if key[pygame.K_DOWN]: 
        self.y += dist
    elif key[pygame.K_UP]: 
        self.y -= dist 
    if key[pygame.K_RIGHT]: 
        self.x += dist
    elif key[pygame.K_LEFT]: 
        self.x -= dist 




    def draw(self, surface):


        surface.blit(self.image, (self.x, self.y))

    def background(self, surface):
        bg = os.path.join('C:\Python27', 'bg.png')
        self.image2 = pygame.image.load(bg)
        surface.blit(self.image2, (0,0))

class Rock(object): 
    def __init__(self):
        self.image = pygame.image.load(img_path2)


        self.x = 640
        self.y = 0
    def rock(self):
        dist = 2
        if running == True:
            self.x -=dist


    def rock_draw(self, surface):
        surface.blit(self.image, (self.x, self.y))






pygame.init()
screen = pygame.display.set_mode((640, 400))

bird = Bird() # create an instance
rock = Rock()
clock = pygame.time.Clock()

running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit() 
            running = False

    bird.handle_keys() 
    rock.rock()

    screen.fill((255,255,255)) 
    bird.background(screen)
    bird.draw(screen)
    rock.rock_draw(screen)
    pygame.display.update() 

    clock.tick(40)

画面の右側から岩を開始してスクロールし、最初の岩がなくなるか途中で別の y 位置に別の岩が出現するようにしたい

4

1 に答える 1

4

最初に Rock コンストラクターを変更して位置引数を許可し、さらに rock 関数を少し修正する必要があります。

class Rock(object): 
   def __init__(self, x=640, y=0, dist=2):
       self.image = pygame.image.load(img_path2)
       self.x = x
       self.y = y
       self.dist = dist

   def rock(self):
       # you don't need to check if running is true here, you're doing that in your loop
       self.x -= dist

次に、岩の y 座標のランダムな int 値を見つけ、そこに岩を作成します。

import random

y = random.randint(0, 400)
rock = Rock(640, y)

あなたのループで:

if rock.x < 0:
    y = random.randint(0, 400)
    rock = Rock(640, y)

rock.rock()

これは岩が画面の左側に当たったかどうかをチェックし、当たっていれば新しい岩を作成します。次に、いずれにrock()しても、その Rock オブジェクトを呼び出します。

于 2013-04-25T05:26:17.893 に答える