2013-08-09 2 views
2

파이 게임과 파이썬을 사용하여 약간의 추측 플래그 게임을 만들려고하는데, 내가 만든 루프와 함수에 문제가 있습니다. 저는 파이썬에 비교적 익숙하지 않습니다. 때로는 혼란 스럽습니다.파이썬 루핑, 함수 문제

어쨌든 저는 게임의 테스트 부분에 있으며 중국, 캐나다, 미국, 프랑스 등 4 개국이 있습니다. 별도의 정의 된 함수에 넣고 목록에 넣고 임의의 모듈을 사용하여 목록을 섞습니다. for 루프에 넣었고, 원하는대로 작동 시키려고합니다.

목록을 올바르게 뒤섞고 기능을 선택하지만 동일한 기능이 반복되어 끝나지 않습니다. 여기

내 코드입니다 : 캐나다에 대해 묻지 마세요

def pick_country(): 
    global list1 
    main_font = "brain flower euro.ttf" 
    font1 = pygame.font.Font((main_font), 50) 
    font2 = pygame.font.Font((main_font), 40) 
    list1 = [france1, canada1, china1, usa1] 
    random.shuffle(list1) 
    for cur_country in list1: 
     cur_country() 
    pygame.display.update() 

def france1(): 
    screen.fill((255, 255, 255)) 
    country = 'FRANCE' 
    flag = 'france_flag.jpeg' 
    flag1 = pygame.image.load(flag).convert() 
    while True: 
     for event in pygame.event.get(): 
      if event.type == QUIT: 
       pygame.quit() 
       sys.exit() 
      if event.type == KEYDOWN: 
       pick_country() 
     screen.blit(flag1, (300, 350)) 
     pygame.display.update() 
def canada1(): 
    name = "" 
    main_font = "brain flower euro.ttf" 
    font1 = pygame.font.Font((main_font), 50) 
    country = 'CANADA' 
    flag = 'canada_flag.jpeg' 
    black = 0, 0, 0 
    flag1 = pygame.image.load(flag).convert() 
    while True: 
     for evt in pygame.event.get(): 
      if evt.type == KEYDOWN: 
       if evt.unicode.isalpha(): 
        name += evt.unicode 
       elif evt.key == K_SPACE: 
        name += " " 
       elif evt.key == K_BACKSPACE: 
        name = name[:-1] 
      elif evt.type == QUIT: 
       pygame.quit() 
       sys.exit() 
     screen.fill((255, 255, 255)) 
     screen.blit(flag1, (200, 25)) 
     pygame.draw.line(screen, black, (200, 115), (0, 115), (6)) 
     pygame.draw.line(screen, black, (600, 115), (800, 115), (6)) 
     block = font1.render(name, True, black) 
     rect = block.get_rect(center = (400, 600)) 
     screen.blit(block, rect) 
     pygame.draw.rect(screen, black, (275, 550, 250, 100), (2)) 
     if name == "canada": 
      pick_country() 
     pygame.display.update() 
def usa1(): 
    screen.fill((255, 255, 255)) 
    country = 'USA' 
    flag = 'usa_flag.jpeg' 
    flag1 = pygame.image.load(flag).convert() 
    while True: 
     for event in pygame.event.get(): 
      if event.type == QUIT: 
       pygame.quit() 
       sys.exit() 
      if event.type == KEYDOWN: 
       pick_country() 
     screen.blit(flag1, (225, 300)) 
     pygame.display.update() 
def china1(): 
    screen.fill((255, 255, 255)) 
    country = 'CHINA' 
    flag = 'china_flag.jpeg' 
    flag1 = pygame.image.load(flag).convert() 
    while True: 
     for event in pygame.event.get(): 
      if event.type == QUIT: 
       pygame.quit() 
       sys.exit() 
      if event.type == KEYDOWN: 
       pick_country() 
     screen.blit(flag1, (300, 350)) 
     pygame.display.update() 


pick_country() 

; 그것은 내 주요 국가 테스트 지역입니다.

당신이 시작하기 전에 '당신이 시도가'나는 다음 시도했다 : 스크립트의 일부 '목록과 셔플'을 촬영하고, 상단에, 함수 밖에서 퍼팅 :

1 화면. 1의 오류 : 목록의 기능이 무엇인지 아직 알지 못합니다.

2 : 스크립트의 '목록 및 셔플'부분을 가져 와서 국가 기능 후에 실제 pick_country() 앞에 함수를 넣습니다. 2의 오류 : 처음에는 국가를 선택하지만 분명히 다른 국가로가는 것은 아닙니다.

어떤 도움이 필요합니까? 부디!

+0

여기서 OO 디자인을 사용하는 것이 훨씬 간단합니다. 전역 대신 인스턴스 속성에 액세스하는 메소드가있는 클래스입니다. – abarnert

+0

저는 파이썬을 처음 사용합니다. 나는 기본적으로 도서관에서 책을 빌리고, theewboston 튜토리얼을보고, 여기저기서 약간의 파이썬 문서를 던져 넣었습니다. 조금 더 자세하게 설명해 주시겠습니까? – JaredCubilla

+0

어쨌든이 대답을 정말로 원한다면 "2"가 답입니다. 첫 번째 문제를 해결 한 후에 _another_ 문제가 있다는 사실이 그것이 첫 번째 문제에 대한 해결책이 아니라는 것을 의미하지는 않습니다.이것이 디버깅이 일반적으로 이루어지는 방식입니다. – abarnert

답변

4

여기에 무슨 일이 일어나고 있는지의 : 사용자가 키, pick_country()가 다시 호출 안타 때

  • pick_countryfrance1()
  • 를 호출합니다. 이 새로운 통화는 국가 목록의 첫 번째 항목에서 다시 시작하여 france1()으로 다시 전화합니다.
  • 사용자가 키를 치면 pick_country()으로 다시 전화하십시오.
  • 반복 무한히
  • 당신은 아마 키를 누를 때 각 나라의 함수에서 return하는 것입니다 원하는 것은

. 이렇게하면 원래 pick_country 전화로 다시 연결되어 목록의 두 번째 국가로 이동할 수 있습니다. (가) 다시이 기능을 실행하면 각 기능에

+0

OMG. 정말 고맙습니다. 이것은 나에게 매우 도움이되었다. – JaredCubilla

1

당신이 pick_country을 요구하고있다() 다시

if event.type == KEYDOWN: 
    pick_country() 

따라서는이 나라를 통해 루프에 대한 모든 것을 다시 시작합니다.