2013-11-15 33 views
1

我的這個問題的目標是能夠實現一個答案,解釋如何使它能夠讓我的角色四處移動以拾取'baddie( s)',壞人將自動重新出現在屏幕上。在任何時候保持屏幕上的精靈總數爲玩家在40拾取。無法在python 2.7的控制莊園中有效產卵精靈

我有問題能夠控制'pikachu.jpg'精靈產卵的方式。我可以通過手動輸入一個整數到我的程序中,或者我寫我嘗試錯誤地測試它,並且程序維護一個無限循環的繪製baddie精靈,從而單獨以組的方式產生精靈。我已經建立了一個系統,我相信應該已經應對了保持40個精靈固體的壞蛋,儘管它沒有奏效。我並不是很擅長Python,我真的很感謝這個問題的幫助。

import necessary pygame modules 
import sys 
import random 
import time 
import pygame 
from pygame.locals import * 
# initialise pygame 
pygame.init() 
# define window width and height variables for ease of access 
WindowWidth = 600 
WindowHeight = 500 
global PLAY 
PLAY = False 
x = 600/3 
y = 460/2 - 25 

# load and define image sizes 

enemyImage = pygame.image.load('pikachu.jpg') 
enemyStretchedImage = pygame.transform.scale(enemyImage, (40,40)) 
screen = pygame.display.set_mode((WindowWidth, WindowHeight)) 


def play(PLAY): 
    playerImage = pygame.image.load('player.jpg') 
    playerStretchedImage = pygame.transform.scale(playerImage, (40, 40)) 
    movex,movey = 0,0 
    charx, chary=300, 200 
    enemyy, enemyx = 10, 10 
    moveright = False 
    moveleft = False 
    spawn = True 
    direction = 'down' 
    baddie = [] 


    for i in range(20): 
     baddie.append(pygame.Rect(random.randint(0, WindowWidth - 40), random.randint(0, 0), 40, 40)) 
    while True: 
     for event in pygame.event.get(): 
      if event.type == KEYDOWN: 
       if event.key == ord('m'): 
        pygame.mixer.music.stop() 
        music = False 
       if event.key == ord('n'): 
        pygame.mixer.music.play() 
        music = True 
       if event.key == ord('a'): 
        moveleft = True 

       if event.key == ord('d'): 
        moveright = True 

       if event.key == ord('w'): 
        movey = -0.5 
       if event.key == ord('s'): 
        movey = 0.5 
       if event.key == ord('p'): 
        time.sleep(5) 

      if event.type ==KEYUP: 
       if event.key == ord('a'): 
        moveleft = False 
        if moveleft == False: 
         movex = 0 
       if event.key == ord('d'): 
        moveright = False 
        if moveright == False: 
         movex = 0 
       if event.key == ord('w'): 
        movey = 0 
       if event.key == ord('s'): 
        movey = 0 
      elif event.type == QUIT: 
       pygame.quit() 
       sys.exit() 
      elif event.type == MOUSEBUTTONDOWN: 
       pygame.quit() 
       sys.exit() 


     screen.fill(pygame.Color("red")) 
     player = pygame.Rect(charx, chary, 40, 40) 
     if direction == 'down': 
      enemyy += 0.1 
     if moveright ==True: 
      movex = 0.5 
     if moveleft ==True: 
      movex = -0.5 

     if player.bottom > WindowHeight: 
      chary = WindowHeight - 40 
      movey = 0 
     if player.top < 0: 
      chary = 1 
      movey = 0 
     if player.left < 0: 
      charx = 1 
      movex = 0 
     if player.right > WindowWidth: 
      charx = WindowWidth - 40 
      movex = 0 

     for bad in baddie[:]: #Here is where my attempt of testing was. 
      if bad < 40: 
       spawn = True 
      if bad >= 40: 
       spawn = False 
      if spawn == True: 
       baddie.append(pygame.Rect(random.randint(0, WindowWidth - 40), random.randint(0,0), 40, 40)) 



     screen.blit(playerStretchedImage, player) 
     charx+=movex 
     chary+=movey 

     for bad in baddie[:]: 
      if player.colliderect(bad): 
       baddie.remove(bad) 

     for bad in baddie: 
      screen.blit(enemyStretchedImage, bad) 
     pygame.display.update() 

def presskey(): 
    myfont = pygame.font.SysFont("monospace", 30) 
    label = myfont.render("press space to play!", 1, (255,125,60)) 
    while True: 
     for event in pygame.event.get(): 
      if event.type == QUIT: 
       pygame.quit() 
       sys.exit() 
      elif event.type == KEYDOWN: 
       if event.key == K_SPACE: 
        PLAY = True 
       if PLAY == True: 
        play(PLAY) 
        return 
     screen.fill(pygame.Color("cyan")) 
     screen.blit(label, (x,y)) 
     pygame.display.update() 



presskey() 

回答

0

在這裏,我們試圖填補了壞人的數量多達40個,但bad是一個矩形,你使用它作爲一個數哥們:

for bad in baddie[:]: #Here is where my attempt of testing was. 
      if bad < 40: 
       spawn = True 
      if bad >= 40: 
       spawn = False 
      if spawn == True: 
       baddie.append(pygame.Rect(random.randint(0, WindowWidth - 40), random.randint(0,0), 40, 40)) 

我建議你更換這些線路:

if len(baddie)<40: 
    baddie.append(pygame.Rect(random.randint(0, WindowWidth - 40), 

可以使用len(baddie)得到您的[]列表中的項目數量。每個遊戲循環週期你都應該得到一個新的壞人。

+0

非常感謝你!也感謝你描述它對我的作用,你很棒,它完美的工作。 – user2989796