2017-02-21 55 views
-2

我正在學習Python並重新創建一個在Visual Basic中從內存中創建的舊程序。Def Win()有多個選項

大部分工作都正常,但我知道必須有更好的方式來宣佈獲勝者。目標是讓2-4支球隊嗡嗡作響並獲得問題分數。得分最高的球隊獲勝。

現在,這是獲勝的代碼看起來像,但我覺得這是非常混亂,必須是一個更好的方式。

elif event.key == pygame.K_w: 
    if Team1Point > Team2Point and Team1Point > Team3Point and Team1Point > Team4Point: 
     Win = True 
     win.play() 
     while Win: 
      gameDisplay.blit(boardwin,(0,0)) 
      text = large_font.render(str(Team1Name)+" Wins!", True, black) 
      gameDisplay.blit(text, [display_width/2, display_height/2]) 
      pygame.display.update() 
      clock.tick(5) 
      gameDisplay.blit(background,(0,0)) 
      pygame.display.update() 
      clock.tick(5) 
    elif Team2Point > Team1Point and Team2Point > Team3Point and Team2Point > Team4Point: 
     Win = True 
     win.play() 
     while Win: 
      gameDisplay.blit(boardwin,(0,0)) 
      text = large_font.render(str(Team2Name)+" Wins!", True, black) 
      gameDisplay.blit(text, [display_width/2, display_height/2]) 
      pygame.display.update() 
      clock.tick(5) 
      gameDisplay.blit(background,(0,0)) 
      pygame.display.update() 
      clock.tick(5) 
    elif Team3Point > Team2Point and Team3Point > Team1Point and Team3Point > Team4Point: 
     Win = True 
     win.play() 
     while Win: 
      gameDisplay.blit(boardwin,(0,0)) 
      text = large_font.render(str(Team3Name)+" Wins!", True, black) 
      gameDisplay.blit(text, [display_width/2, display_height/2]) 
      pygame.display.update() 
      clock.tick(5) 
      gameDisplay.blit(background,(0,0)) 
      pygame.display.update() 
      clock.tick(5) 
    elif Team4Point > Team2Point and Team4Point > Team3Point and Team4Point > Team1Point: 
     Win = True 
     win.play() 
     while Win: 
      gameDisplay.blit(boardwin,(0,0)) 
      text = large_font.render(str(Team4Name)+" Wins!", True, black) 
      gameDisplay.blit(text, [display_width/2, display_height/2]) 
      pygame.display.update() 
      clock.tick(5) 
      gameDisplay.blit(background,(0,0)) 
      pygame.display.update() 
      clock.tick(5) 
    elif Team1Point == Team2Point or Team1Point == Team3Point or Team1Point == Team4Point or Team2Point == Team3Point or Team2Point == Team4Point or Team3Point == Team4Point: 
     Win = True 
     win.play() 
     while Win: 
      gameDisplay.blit(boardwin,(0,0)) 
      text = large_font.render("Tie Win!", True, black) 
      gameDisplay.blit(text, [display_width/2, display_height/2]) 
      pygame.display.update() 
      clock.tick(5) 
      gameDisplay.blit(background,(0,0)) 
      pygame.display.update() 
      clock.tick(5) 

我嘗試使用以下定義取勝,而是收到TypeError: Win() missing 1 required positional argument: 'Team1Name'錯誤:

def Win(): 
    win.play() 
    Win = True 
    while Win: 
     gameDisplay.blit(boardwin,(0,0)) 
     text = large_font.render(str(Team1Name)+" Wins!", True, white) 
     gameDisplay.blit(text, [display_width/2, display_height/2]) 
     pygame.display.update() 
     clock.tick(5) 
     gameDisplay.blit(background,(0,0)) 
     pygame.display.update() 
     clock.tick(5) 

我沒有收到錯誤我的代碼創建名稱和將它們放置在屏幕上:

def Team1(Team1Name,Team1Point): 
    text = large_font.render(str(Team1Name)+": " + str(Team1Point), True, white) 
    gameDisplay.blit(text, [10,10]) 

關於如何清理這個問題的想法?也許我剛剛盯着我的屏幕太久了。

+1

語法高亮表示您不使用大寫變量名稱。 –

+1

您試圖使用相同的名稱「Win」來同時引用一個函數和一個布爾值。這裏肯定有太多的代碼重複。我想你可能想花一些時間看python字典。 – Chris

回答

0

我發現了這個問題。我需要將DEF項放入我的循環中。

我在工作中大聲說話時也玩了很多。它讓我意識到如何清理我的代碼。我還將用戶從4個減少到了2個,因爲我多年前製作的硬件中只有2個工作。

我從上面去了以下幾點:

for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 
      gameOver = False 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_1: 
       answer.play() 
       BlinkLeftImage() 
       Team1Answer() 
      elif event.key == pygame.K_2: 
       answer.play() 
       BlinkRightImage() 
       Team2Answer() 
      elif event.key == pygame.K_h: 
       Help() 
      elif event.key == pygame.K_w: 
       win.play() 
       Win() 
      elif event.key == pygame.K_q: 
       pygame.quit() 
       quit() 

我有現在雖另一個問題。有沒有一種方法來錨定(術語可能是錯誤的)文本blit?

目前我的代碼是:

def Team2(Team2Name,Team2Point): 
    if display_width <= 800: 
     text = small_font.render(str(Team2Name)+": " + str(Team2Point), True, red) 
     gameDisplay.blit(text, [((display_width/4)*3),10]) 
    elif display_width <= 1200: 
     text = medium_font.render(str(Team2Name)+": " + str(Team2Point), True, red) 
     gameDisplay.blit(text, [((display_width/4)*3),10]) 
    elif display_width >= 1440: 
     text = large_font.render(str(Team2Name)+": " + str(Team2Point), True, red) 
     gameDisplay.blit(text, [((display_width/4)*3),10]) 

這工作得很好,排序的,但文字不正確排隊。我不確定是否有辦法在python中自動縮放對象。猜猜這是我的下一個努力!

+0

你想要居中文本,證明它,還是將它與左/右對齊? –

+0

我想根據圖像居中文本。我已經開始創造我自己的「自動縮放」,它的工作得體,但知道如何實際居中,左對齊或右對齊將是很好的知道! – Joey