2013-08-25 2 views
0

한 이미지가 다른 이미지를 치는지 수동으로 확인해야합니다. 나는 결과를 얻는 것처럼 보일 수 없다. ... 제발 이것은 나를 미치게 만든다 !!! 나는 2 일 동안 노력했지만 효과가 없을 것이다.pygame.rect.colliderect()가 작동하지 않습니다.

Menu()와 같은 다른 코드는 포함하지 않았지만 main()은 잘 작동합니다. 좀비가 플레이어 위에있을 때 왜 돌아 오지 않을지 이해할 수 없습니다.

class Game(): 

    def setup(self): 
     global tiles 
     for files in os.listdir(os.curdir): 
      if files.endswith(".png") and files != "Player.png" and files != "Zombie.png": 
       tilees.append(files) 
       numtil = tilees.count(files) 
       print("a " + str(numtil)) 

     fli = pygame.image.load(files).convert_alpha() 

     i = 0 

     while i <= 1000: 
      tiles.append(fli) 
      i = i + 1 

     global TileLen 
     TileLen = tiles.count(fli) 

     Game().Game() 

    def Game(self): 
     global zomx, zomy, zombie, MMS, step, zombieRect 
     zombieRect = [] 
     zomx = [] 
     zomy = [] 
     zombie = [] 
     step = 0 
     HP = 15 
     Map = pygame.image.load("BG.png").convert() 
     Map = pygame.transform.scale(Map, (pygame.display.list_modes()[0])) 

     person = pygame.image.load("Player.png").convert() 
     person = pygame.transform.scale(person, (30, 30)) 

     dagger = pygame.image.load("Dagger.png").convert_alpha() 
     dagger = pygame.transform.scale(dagger, (13, 13)) 

     screen.blit(Map, (0, 0)) 
     perx = 800 
     pery = 700 

     ai().zombieadd(MMS) 

     screen.blit(person, (perx, pery)) 
     screen.blit(dagger, (perx+20, pery-5)) 

     global thething 

     thething = 0 
     for crap in zombie: 

      screen.blit(zombie[thething], (zomx[thething], zomy[thething])) 
      print(thething) 
      thething = thething + 1 

     pygame.display.flip() 

     awesome = 1 
     fttt = 0 
     ff = 0 
     ofx = 0 
     ofy = 0 

     while 1: 
      print(perx, pery) 
      for event in pygame.event.get(): 
       if event.type == QUIT: 
        pygame.quit() 
        sys.exit() 
       elif event.type == KEYDOWN: 
        if event.key == K_w: 
         pery = pery - 5 
         if fttt != 1: 
          if awesome == 4: 
           dagger = pygame.transform.rotate(dagger, 270) 
           person = pygame.transform.rotate(person, 270) 
          elif awesome == 3: 
           dagger = pygame.transform.rotate(dagger, 90) 
           person = pygame.transform.rotate(person, 90) 
          elif awesome == 2: 
           dagger = pygame.transform.rotate(dagger, 180) 
           person = pygame.transform.rotate(person, 180) 
          person = pygame.transform.rotate(person, 0) 
          dagger = pygame.transform.rotate(dagger, 0) 
         awesome = 1 
         fttt = 1 

        elif event.key == K_s: 
         pery = pery + 5 
         if fttt != 2: 
          if awesome == 4: 
           dagger = pygame.transform.rotate(dagger, 270) 
           person = pygame.transform.rotate(person, 270) 
          elif awesome == 3: 
           dagger = pygame.transform.rotate(dagger, 90) 
           person = pygame.transform.rotate(person, 90) 
          person = pygame.transform.rotate(person, 180) 
          dagger = pygame.transform.rotate(dagger, 180) 
         awesome = 2 
         fttt = 2 

        elif event.key == K_a: 
         perx = perx - 5 
         if fttt != 3: 
          if awesome == 2: 
           dagger = pygame.transform.rotate(dagger, 180) 
           person = pygame.transform.rotate(person, 180) 
          elif awesome == 4: 
           dagger = pygame.transform.rotate(dagger, 270) 
           person = pygame.transform.rotate(person, 270) 
          person = pygame.transform.rotate(person, 270) 
          dagger = pygame.transform.rotate(dagger, 270) 
         awesome = 3 
         fttt = 3 

        elif event.key == K_d: 
         perx = perx + 5 
         if fttt != 4: 
          if awesome == 2: 
           dagger = pygame.transform.rotate(dagger, 180) 
           person = pygame.transform.rotate(person, 180) 
          elif awesome == 3: 
           dagger = pygame.transform.rotate(dagger, 90) 
           person = pygame.transform.rotate(person, 90) 
          person = pygame.transform.rotate(person, 90) 
          dagger = pygame.transform.rotate(dagger, 90) 
         awesome = 4 
         fttt = 4 

        elif event.key == K_e: 
         if awesome == 1: 
          while ofx >= -6: 
           ofx = ofx - 1 
           screen.blit(dagger, (perx+20, pery-5+ofx)) 
           pygame.time.delay(1) 
           pygame.display.update() 
          if ofx <= -6: 
           ofx = 0 
         elif awesome == 2: 
          while ofx >= -6: 
           ofx = ofx - 1 
           screen.blit(dagger, (perx-5, pery+25-ofx)) 
           pygame.time.delay(1) 
           pygame.display.update() 
          if ofx <= -6: 
           ofx = 0 
         if awesome == 3: 
          while ofx >= -6: 
           ofx = ofx - 1 
           screen.blit(dagger, (perx-5+ofx, pery-5)) 
           pygame.time.delay(1) 
           pygame.display.update() 
          if ofx <= -6: 
           ofx = 0 
         if awesome == 4: 
          while ofx >= -6: 
           ofx = ofx - 1 
           screen.blit(dagger, (perx+20-ofx, pery+25)) 
           pygame.time.delay(1) 
           pygame.display.update() 
          if ofx <= -6: 
           ofx = 0 



      screen.blit(Map, (0, 0)) 
      screen.blit(person, (perx, pery)) 
      if awesome == 1: 
       screen.blit(dagger, (perx+20, pery-5)) 
      elif awesome == 2: 
       screen.blit(dagger, (perx-5, pery+25)) 
      elif awesome == 3: 
       screen.blit(dagger, (perx-5, pery-5)) 
      else: 
       screen.blit(dagger, (perx+20, pery+25)) 

      text = "Health: "+str(HP) 
      font = pygame.font.Font(None, 32) 
      ttex = font.render(text, True, (255, 0, 0)) 
      screen.blit(ttex, (30, 30)) 


      thecrap = 0 
      while thecrap < thething: 
       print(thecrap) 
       screen.blit(zombie[thecrap], (zomx[thecrap], zomy[thecrap])) 
       if perx >= zomx[thecrap]: 
        loop = 0 
        while loop <= 5: 
         zomx[thecrap] = zomx[thecrap] + .09 
         loop = loop + 1 

       if pery >= zomy[thecrap]: 
        loop = 0 
        while loop <= 5: 
         zomy[thecrap] = zomy[thecrap] + .09 
         loop = loop + 1 
       if perx <= zomx[thecrap]: 
        loop = 0 
        while loop <= 5: 
         zomx[thecrap] = zomx[thecrap] - .09 
         loop = loop + 1 
       if pery <= zomy[thecrap]: 
        loop = 0 
        while loop <= 5: 
         zomy[thecrap] = zomy[thecrap] - .09 
         loop = loop + 1 
       if person.get_rect().contains(pygame.Rect(zomx[thecrap], zomy[thecrap], 30, 30)): 
        HP = HP - .5 
       thecrap = thecrap + 1 
      thecrap = 0 
      pygame.display.update() 

      if HP <= 0: 
       print("Game over! Sorry!") 
       while 1: 
        abss = font.render("Sorry, but you lost! Press any key to continue...", True, (255, 255, 255)) 
        pygame.display.update() 
        screen.blit(abss, (90, 90)) 

        for event in pygame.event.get(): 
         Menu().main() 

class ai(): 

    def zombieadd(self, Num): 
     global zomx, zomy, zombie, zombieRect 
     zombieRect = [] 
     zombie = [] 
     global step 

     step = 0 
     print(Num) 

     while Num > step: 
      global zomx, zomy, zombie 
      print(step) 
      zomx.append(random.randint(0, 600)) 
      zomy.append(random.randint(0, 600)) 
      zombieI = pygame.image.load("Zombie.png").convert() 
      zombie.append(zombieI) 
      zombie[step] = pygame.transform.scale(zombie[step], (30, 30)) 
      print(zomx[step], zomy[step]) 
      zombieRect.append(zombie[step].get_rect()) 

      step = step + 1 

     Num = 0 

     return 0 


Menu().main() 

class Game(): 

    def setup(self): 
     global tiles 
     for files in os.listdir(os.curdir): 
      if files.endswith(".png") and files != "Player.png" and files != "Zombie.png": 
       tilees.append(files) 
       numtil = tilees.count(files) 
       print("a " + str(numtil)) 

     fli = pygame.image.load(files).convert_alpha() 

     i = 0 

     while i <= 1000: 
      tiles.append(fli) 
      i = i + 1 

     global TileLen 
     TileLen = tiles.count(fli) 

     Game().Game() 

    def Game(self): 
     global zomx, zomy, zombie, MMS, step, zombieRect 
     zombieRect = [] 
     zomx = [] 
     zomy = [] 
     zombie = [] 
     step = 0 
     HP = 15 
     Map = pygame.image.load("BG.png").convert() 
     Map = pygame.transform.scale(Map, (pygame.display.list_modes()[0])) 

     person = pygame.image.load("Player.png").convert() 
     person = pygame.transform.scale(person, (30, 30)) 

     dagger = pygame.image.load("Dagger.png").convert_alpha() 
     dagger = pygame.transform.scale(dagger, (13, 13)) 

     screen.blit(Map, (0, 0)) 
     perx = 800 
     pery = 700 

     ai().zombieadd(MMS) 

     screen.blit(person, (perx, pery)) 
     screen.blit(dagger, (perx+20, pery-5)) 

     global thething 

     thething = 0 
     for crap in zombie: 

      screen.blit(zombie[thething], (zomx[thething], zomy[thething])) 
      print(thething) 
      thething = thething + 1 

     pygame.display.flip() 

     awesome = 1 
     fttt = 0 
     ff = 0 
     ofx = 0 
     ofy = 0 

     while 1: 
      print(perx, pery) 
      for event in pygame.event.get(): 
       if event.type == QUIT: 
        pygame.quit() 
        sys.exit() 
       elif event.type == KEYDOWN: 
        if event.key == K_w: 
         pery = pery - 5 
         if fttt != 1: 
          if awesome == 4: 
           dagger = pygame.transform.rotate(dagger, 270) 
           person = pygame.transform.rotate(person, 270) 
          elif awesome == 3: 
           dagger = pygame.transform.rotate(dagger, 90) 
           person = pygame.transform.rotate(person, 90) 
          elif awesome == 2: 
           dagger = pygame.transform.rotate(dagger, 180) 
           person = pygame.transform.rotate(person, 180) 
          person = pygame.transform.rotate(person, 0) 
          dagger = pygame.transform.rotate(dagger, 0) 
         awesome = 1 
         fttt = 1 

        elif event.key == K_s: 
         pery = pery + 5 
         if fttt != 2: 
          if awesome == 4: 
           dagger = pygame.transform.rotate(dagger, 270) 
           person = pygame.transform.rotate(person, 270) 
          elif awesome == 3: 
           dagger = pygame.transform.rotate(dagger, 90) 
           person = pygame.transform.rotate(person, 90) 
          person = pygame.transform.rotate(person, 180) 
          dagger = pygame.transform.rotate(dagger, 180) 
         awesome = 2 
         fttt = 2 

        elif event.key == K_a: 
         perx = perx - 5 
         if fttt != 3: 
          if awesome == 2: 
           dagger = pygame.transform.rotate(dagger, 180) 
           person = pygame.transform.rotate(person, 180) 
          elif awesome == 4: 
           dagger = pygame.transform.rotate(dagger, 270) 
           person = pygame.transform.rotate(person, 270) 
          person = pygame.transform.rotate(person, 270) 
          dagger = pygame.transform.rotate(dagger, 270) 
         awesome = 3 
         fttt = 3 

        elif event.key == K_d: 
         perx = perx + 5 
         if fttt != 4: 
          if awesome == 2: 
           dagger = pygame.transform.rotate(dagger, 180) 
           person = pygame.transform.rotate(person, 180) 
          elif awesome == 3: 
           dagger = pygame.transform.rotate(dagger, 90) 
           person = pygame.transform.rotate(person, 90) 
          person = pygame.transform.rotate(person, 90) 
          dagger = pygame.transform.rotate(dagger, 90) 
         awesome = 4 
         fttt = 4 

        elif event.key == K_e: 
         if awesome == 1: 
          while ofx >= -6: 
           ofx = ofx - 1 
           screen.blit(dagger, (perx+20, pery-5+ofx)) 
           pygame.time.delay(1) 
           pygame.display.update() 
          if ofx <= -6: 
           ofx = 0 
         elif awesome == 2: 
          while ofx >= -6: 
           ofx = ofx - 1 
           screen.blit(dagger, (perx-5, pery+25-ofx)) 
           pygame.time.delay(1) 
           pygame.display.update() 
          if ofx <= -6: 
           ofx = 0 
         if awesome == 3: 
          while ofx >= -6: 
           ofx = ofx - 1 
           screen.blit(dagger, (perx-5+ofx, pery-5)) 
           pygame.time.delay(1) 
           pygame.display.update() 
          if ofx <= -6: 
           ofx = 0 
         if awesome == 4: 
          while ofx >= -6: 
           ofx = ofx - 1 
           screen.blit(dagger, (perx+20-ofx, pery+25)) 
           pygame.time.delay(1) 
           pygame.display.update() 
          if ofx <= -6: 
           ofx = 0 



      screen.blit(Map, (0, 0)) 
      screen.blit(person, (perx, pery)) 
      if awesome == 1: 
       screen.blit(dagger, (perx+20, pery-5)) 
      elif awesome == 2: 
       screen.blit(dagger, (perx-5, pery+25)) 
      elif awesome == 3: 
       screen.blit(dagger, (perx-5, pery-5)) 
      else: 
       screen.blit(dagger, (perx+20, pery+25)) 

      text = "Health: "+str(HP) 
      font = pygame.font.Font(None, 32) 
      ttex = font.render(text, True, (255, 0, 0)) 
      screen.blit(ttex, (30, 30)) 


      thecrap = 0 
      while thecrap < thething: 
       print(thecrap) 
       screen.blit(zombie[thecrap], (zomx[thecrap], zomy[thecrap])) 
       if perx >= zomx[thecrap]: 
        loop = 0 
        while loop <= 5: 
         zomx[thecrap] = zomx[thecrap] + .09 
         loop = loop + 1 

       if pery >= zomy[thecrap]: 
        loop = 0 
        while loop <= 5: 
         zomy[thecrap] = zomy[thecrap] + .09 
         loop = loop + 1 
       if perx <= zomx[thecrap]: 
        loop = 0 
        while loop <= 5: 
         zomx[thecrap] = zomx[thecrap] - .09 
         loop = loop + 1 
       if pery <= zomy[thecrap]: 
        loop = 0 
        while loop <= 5: 
         zomy[thecrap] = zomy[thecrap] - .09 
         loop = loop + 1 
       if person.get_rect().contains(zombieRect)): 
        HP = HP - .5 
       thecrap = thecrap + 1 
      thecrap = 0 
      pygame.display.update() 

      if HP <= 0: 
       print("Game over! Sorry!") 
       while 1: 
        abss = font.render("Sorry, but you lost! Press any key to continue...", True, (255, 255, 255)) 
        pygame.display.update() 
        screen.blit(abss, (90, 90)) 

        for event in pygame.event.get(): 
         Menu().main() 

class ai(): 

    def zombieadd(self, Num): 
     global zomx, zomy, zombie, zombieRect 
     zombieRect = [] 
     zombie = [] 
     global step 

     step = 0 
     print(Num) 

     while Num > step: 
      global zomx, zomy, zombie 
      print(step) 
      zomx.append(random.randint(0, 600)) 
      zomy.append(random.randint(0, 600)) 
      zombieI = pygame.image.load("Zombie.png").convert() 
      zombie.append(zombieI) 
      zombie[step] = pygame.transform.scale(zombie[step], (30, 30)) 
      print(zomx[step], zomy[step]) 
      zombieRect.append(zombie[step].get_rect()) 

      step = step + 1 

     Num = 0 

     return 0 


Menu().main() 
+1

나는 누군가가 나를 도울 수 있으면 오랫동안 예수님이 그것을 고치신 것처럼 느껴져왔다. 고마워요! – MezuCobalt

+0

"결과를 얻지 못했습니다". 그게 무슨 뜻 이죠? 코드가 오류 메시지를 던지고 있습니까? 단순히 그들이 충돌하지 않는다고 말하는가? 당신은 ** 그들이 ** 충돌하고 있음을 어떻게 압니까? 그리고 우리 프로그램의 모든 514 ** 라인을 실제로 볼 필요가 있습니까? 너무 적은 코드보다 더 많은 코드를 여기에 게시하는 것이 더 좋지만 ** 너무 많이 ** – scohe001

+0

코드가 넘어간 후에도 어디서나 '충돌'호출이 보이지 않습니다! – scohe001

답변

0

많은 것을 가지고 먼 길을 가고 있습니다.

PyGame의 Sprite 클래스는 모든 게임 내 기능에 최적화되어 있으며 사용하지 않는 것으로 나타났습니다.

그러나 Rects를 처리하려는 경우 비교할 Rect를 고려해야합니다. 이미지는 파이 게임입니다. 서페이스 개체 - get_rect 호출 후 치수가 표시되지만 반드시 좌표 인 일 필요는 없습니다. Surface 객체의 get_rect() 호출에서 돌아온 Rect는 rect.x와 rect.y와 (0, 0)이됩니다.

다행히 get_rect() 호출을 사용하면 매개 변수를 전달할 수 있습니다. 따라서 문자의 x 및 y 좌표를 추적하는 데 사용하는 메서드는 무엇이든 get_rect() 호출 중에 키워드를 사용하여 해당 좌표를 올바르게 전달하는 pygame.Rect 객체를 전달할 수 있습니다.

예를 들어

- 그리고이 코드에 직접 기반 하지, 그래서이 첫 번째 패스, 내 잘못에 불면 경우 ... :

zombieRect = zombie_image.get_rect(topleft=(zombieX, zombieY)) 

... 다음 이것은 플레이어의 rect 나 다른 Rect에 비교하기 위해 사용됩니다. 유사한 get_rect(topleft=(x, y)) 기술을 사용하면 아마도 결과를 보게 될 것입니다.

내가 말했듯이 강력하게은 PyGame 개체로 클래스를 하나로 통합 할 것을 촉구합니다. PyGame의 상당 부분은 C로 작성되었으며, 올바르게 기억한다면 FORTRAN과 ASM의 일부분으로 작성됩니다. (두 언어 모두에 대해 나를 붙들어 두지 말고 오해를 불러 일으킬 수도 있습니다.) 따라서 적절한 클래스에 따라 배치하면, 인생을 훨씬 편하게 해줄거야.

관련 문제