2017-04-01 2 views
0

나는 팩맨 게임을 만들고 있는데, 유령과는 별도로 모든 것이 작동합니다. 유령이 벽에 부딪 치면 클래스 벨로우가 호출됩니다. 그러나 볼 수 있듯이 self.a은 str을 반환하지만 내 유령 스프라이트, Ghost1, Ghost2 등에 적용해야합니다. 따라서 Ghost1.a와 유령이 적절하게 이동합니다.파이 게임 팩맨 유령, 랜덤 변경 방향

도움을 주시면 감사하겠습니다. 감사합니다.

class Ghost_move(object): 
    def __init__(self,g_speed): 
     super(Ghost_move, self).__init__() 
     self.left=".rect.x-=g_speed" 
     self.right=".rect.x+=g_speed" 
     self.up=".rect.y-=g_speed" 
     self.down=".rect.y+=g_speed" 
     self.direction=self.left,self.right,self.up,self.down 
     self.a=random.choice(self.direction) 
+0

왜 super()가 필요 했습니까? – abccd

+0

새로운 클래스를 만들 때 숭고한 텍스트가 자동으로 추가됩니다. 그냥 삭제하는 것을 잊었습니다. – Jack

+0

문자열에 리터럴을 저장하고 여러 개의 if 문을 사용하는 것은 끔찍한 생각입니다. – abccd

답변

1

abccd가 이미 지적했듯이, 소스 코드를 실행하여 문자열로 실행하려는 것은 좋지 않습니다. 가장 가까운 솔루션은 left, right, up, down에 대한 함수를 정의하는 것입니다. 그럼 당신은 방향으로 그 기능을 저장하고 실행할 수있는 무작위로 하나를 선택 :

class Ghost_move(object): 
    def __init__(self,g_speed): 
     super(Ghost_move, self).__init__() 
     self.g_speed = g_speed 
     self.directions = self.left, self.right, self.up, self.down 
     self.a = random.choice(self.directions) 
    def left(self): 
     self.rect.x -= self.g_speed 
    def right(self): 
     self.rect.x += self.g_speed 
    def up(self): 
     self.rect.y -= self.g_speed 
    def down(self): 
     self.rect.y += self.g_speed 

지금 self.a 당신이 호출 할 수있는 기능입니다. 예를 들어 ghost1.a()ghost1을 4 방향 중 하나에서 임의로 이동합니다. 그러나 한 번만 설정하면 ghost1.a()은 항상이 고스트를 같은 방향으로 이동시키고 호출 할 때마다 임의의 방향을 선택하지 않기 때문에 조심하십시오.


다른 접근 방식은 벡터와 함께 할 것입니다 :

class Ghost_move(object): 
    def __init__(self,g_speed): 
     super(Ghost_move, self).__init__() 
     self.left = (-g_speed, 0) 
     self.right = (g_speed, 0) 
     self.up = (0, -g_speed) 
     self.down = (0, g_speed) 
     self.directions = self.left, self.right, self.up, self.down 
     self.random_dir = random.choice(self.directions) 
    def a(): 
     self.rect.x += self.random_dir[0] 
     self.rect.y += self.random_dir[1] 

사용법, 당신은 단지 유령에 a() 부를 것이다 이전과 동일합니다.