2017-02-21 1 views
-2

저는 Python을 배우고 메모리에서 Visual Basic으로 만든 이전 프로그램을 다시 만드는 과정에 있습니다.여러 옵션이있는 Def Win() 여러 개의 옵션이있는 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"을 사용하여 함수와 부울 값을 동시에 참조하려고합니다. 확실히 여기에 너무 많은 코드 반복이 있습니다. 파이썬 사전을 살펴볼 시간이 필요하다고 생각합니다. – 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() 

내가 지금 비록 다른 질문을해야합니까. 텍스트 블릿을 고정시키는 (용어가 잘못되었을 수 있음) 방법이 있습니까? 종류의, 잘 작동

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

하지만 텍스트가 제대로 정렬되지 않습니다

현재 내 코드입니다. 파이썬에서 자동으로 객체를 스케일하는 방법이 있는지 나는 잘 모르겠습니다. 그것이 내 다음 노력이라고 생각해!

+0

텍스트를 가운데 맞추고, 맞 춥니 다, 왼쪽/오른쪽으로 정렬 하시겠습니까? –

+0

이미지를 중심으로 텍스트를 가운데에 배치하고 싶습니다. 나는 내 자신의 "auto scaling"을 만들었으며, 실제로 잘 작동하지만, 실제로 센터, 왼쪽, 오른쪽, 또는 정당화하는 방법을 아는 것이 좋을 것입니다! – Joey

관련 문제