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()
부를 것이다 이전과 동일합니다.
왜 super()가 필요 했습니까? – abccd
새로운 클래스를 만들 때 숭고한 텍스트가 자동으로 추가됩니다. 그냥 삭제하는 것을 잊었습니다. – Jack
문자열에 리터럴을 저장하고 여러 개의 if 문을 사용하는 것은 끔찍한 생각입니다. – abccd