2013-12-12 47 views
0

這是我的第一篇文章。我需要爲我的最終項目製作一款工作遊戲。基本上這個想法是讓角色與一個物品精靈發生碰撞,並在屏幕上顯示一個隨機項目,告訴玩家該物品是什麼以及在哪裏拍攝。我將如何製作一組精靈並隨機選擇一個?

#Initialize 
import pygame 
import random 
pygame.init() 

#Display 
screen = pygame.display.set_mode((1180, 900)) 

class PaperBoy(pygame.sprite.Sprite): 
    def __init__(self,startY): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("paperboy.gif") 
     self.rect = self.image.get_rect() 
     self.image = self.image.convert() 
     self.rect.centery = startY 
     self.dx= 300 
     self.dy= 300 


    def update(self): 

     #adjust x/y to dx/dy 

     self.rect.centerx = self.rect.centerx+self.dx 
     self.rect.centery = self.rect.centery+self.dy 



     #check Boundaries 

     #Check right 
     if self.rect.centerx >= 670: 
      self.rect.centerx =670 
     #Check left 
     elif self.rect.centerx <= 220: 
      self.rect.centerx = 220 
     #Check Bottom 
     if self.rect.centery >= 700: 
      self.rect.centery = 700 
     #Check Top 
     elif self.rect.centery <= 200: 
      self.rect.centery = 200 



    def moveUp(self): 
     self.dx=0 
     self.dy=-5 

    def moveDown(self): 
     self.dx =0 
     self.dy =5 

    def moveLeft(self): 
     self.dx =-5 
     self.dy = 0 

    def moveRight(self): 
     self.dx =5 
     self.dy =0 


""" 
     mousex, mousey = pygame.mouse.get_pos() 
     self.rect.centery = mousey 
     #Check X boundary. 
     if mousex >= 670: 
      self.rect.right = 670 
     elif mousex <= 210: 
      self.rect.left = 210 
     else: 
      self.rect.centerx = mousex 

     #Check Y boundary. 
     if mousey >= 670: 
      self.rect.top = 670 
     elif mousey >= 250: 
      self.rect.top = 250 
     if mousex >= 250 and mousey >= 220: 
      self.rect.left = 250 
      self.rect.top = 670 

     else: 
      self.rect.centery = mousey 
      """ 
class Parcel(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("parcel.png") 
     self.rect = self.image.get_rect() 
     self.image = self.image.convert() 

    def update(self): 
     self.rect.center = (200,600) 
     """(random.randint(300,800)),(random.randint(300,800))""" 

""" 
    ================================HUD====================================== 
""" 
#Green Y 
class ItemHUD(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("itemhud.png") 
     self.rect = self.image.get_rect() 
     self.image = self.image.convert() 

    def update(self): 
     self.rect.center = (950,200) 

#Red A 
class WhereHUD(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("where.png") 
     self.rect = self.image.get_rect() 
     self.image = self.image.convert() 

    def update(self): 
     self.rect.center = (950, 350) 

#Small Green 
class TimeHUD(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("timehud.png") 
     self.rect = self.image.get_rect() 
     self.image = self.image.convert() 

    def update(self): 
     self.rect.center = (915, 850) 


#Yellow 
class GoldHUD(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("gold.png") 
     self.rect = self.image.get_rect() 
     self.image = self.image.convert() 

    def update(self): 
     self.rect.center = (915, 700) 


""" 
    =================================HUD OBJECTS============================== 
""" 


""" 
    ------------------------------------MAIN----------------------------------- 
""" 
def main(): 
    pygame.display.set_caption("A Link to the Parcel") 
    background = pygame.image.load('village.png').convert() 

    allSprites=pygame.sprite.Group() 

    parcel = Parcel() 

    #Heads up Display 
    itemHud = ItemHUD() 
    timeHud = TimeHUD() 
    goldHud = GoldHUD() 
    whereHud = WhereHUD() 


    #Player 
    paperboy = PaperBoy(200) 

    #Sprites added to AllSprites Group 
    allSprites.add(paperboy) 
    allSprites.add(parcel) 
    allSprites.add(itemHud) 
    allSprites.add(timeHud) 
    allSprites.add(goldHud) 
    allSprites.add(whereHud) 

    font = pygame.font.Font(None, 25) 

    goldSack = 0 


    clock = pygame.time.Clock() 
    keepGoing = True 
    while keepGoing: 
     clock.tick(30) 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       keepGoing = False 
      elif event.type == pygame.KEYUP: 
       if event.key==pygame.K_UP: 
        paperboy.moveUp() 
       elif event.key==pygame.K_DOWN: 
        paperboy.moveDown() 
       elif event.key==pygame.K_LEFT: 
        paperboy.moveLeft() 
       elif event.key==pygame.K_RIGHT: 
        paperboy.moveRight() 





     fontTitle = font.render("A Link to the Parcel", True, (255,255,255,)) 


     screen.blit(background, (0, 0)) 
     screen.blit(fontTitle, [925,100]) 


     allSprites.clear(screen, background,) 
     allSprites.update() 
     allSprites.draw(screen) 

     pygame.display.flip() 
    pygame.quit() 

if __name__ == "__main__": 
    main() 
+1

那麼...你的問題是什麼?發佈代碼牆並不能取代對特定問題的深思熟慮的解釋。 –

回答

0

快速和骯髒的是項目的列表,然後使用random.choicerandom模塊。

1

如果我明白你的意思,你有一堆Sprite類型,你想隨機選擇一個。要做到這一點,只需將它們全部放在list中,使用random.choice挑選一個,然後實例化它。就像這樣:

class OneKindOfParcel(Parcel): # etc. 
class AnotherKindOfParcel(Parcel): # etc. 
class AThirdKindOfParcel(Parcel): # etc. 

parcels = [OneKindOfParcel, AnotherKindOfParcel, AThirdKindOfParcel] 

# … later … 

parceltype = random.choice(parcels) 
parcel = parceltype() 
allSprites.add(parcel) 

你可能想給它一個位置,並顯示一些關於它的名稱和位置,等等,但我想你知道該怎麼做了這一切。

+0

這應該正是我所需要的!然而,這可能是一個愚蠢的問題,但是,包裹在括號內的意義是什麼:class OneKindofParcel(Parcel): – user3097097

+0

@ user3097097:這意味着這些都是'Parcel'的所有不同的子類。我假設你想要不同種類的包裹,你可以將它們表示爲不同的類別 - 也許它們每個都有一個'content'屬性,它們在每個'__init__'中設置得不同,或者有一個「open」方法,或類似的東西。 – abarnert

+0

我實現了這個,但是,一旦發生碰撞,我在顯示包裹精靈到屏幕時遇到問題 – user3097097

相關問題