2013-04-24 445 views
0

IM做一個非常基本的遊戲,學習pygame的和IM試圖讓這個鴨子(播放器) 有躲閃的岩石,但我不能去隨意放置的石塊,然後滾動到側面在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位置

+0

那麼什麼樣的行爲,你得到目前? – Pace 2013-04-25 01:43:43

+0

它剛剛開始在右上角左移動 – Serial 2013-04-25 04:54:54

回答

4

首先,你應該ç焊割您的岩石構造,使位置參數,並且也解決了你的搖滾功能位:

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()

+0

當我按下播放器的控制,而不是自動 – Serial 2013-04-25 06:37:35

+0

是當你從pygame的事件隊列搶奪事件阻止它的一個新的岩石纔會出現? – Haz 2013-04-25 13:39:05

+0

我認爲它是因爲bird.handle_keys是在它之後必須完成的,然後才能循環並創建一個新的搖滾位置? – Serial 2013-04-25 14:26:18