2017-04-01 1 views
0

Je crée un jeu pacman, à ce jour, tout fonctionne à côté des fantômes, lorsqu'un fantôme se heurte à un mur. Cependant, comme vous pouvez le voir self.a renvoie un str, mais j'ai besoin d'être appliqué à mes sprites fantômes, Ghost1, Ghost2, etc Donc, il appelle, Ghost1.a et le fantôme se déplace en conséquence.Pygame Pacman fantôme, direction de changement aléatoire

Toute aide serait appréciée, merci.

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

Pourquoi avez-vous même besoin de super()? – abccd

+0

je ne, texte sublime l'ajoute automatiquement lors de la création d'une nouvelle classe, j'ai juste oublié de le supprimer – Jack

+0

Ceci est une idée terrible pour enregistrer des littéraux dans une chaîne, il suffit d'utiliser plusieurs instructions if ou quelque chose – abccd

Répondre

1

Comme abccd déjà souligné, c'est une mauvaise idée de mettre le code source, que vous voulez être exécuté dans les chaînes. La solution la plus proche de la vôtre est la définition des fonctions pour left, right, up, down. Ensuite, vous pouvez stocker ces fonctions dans des directions et exécuter un choix au hasard un:

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 

maintenant self.a est une fonction que vous pouvez appeler. Par exemple, ghost1.a() déplacerait ghost1 de manière aléatoire dans l'une des quatre directions. Mais attention, car un est juste réglé une fois et donc ghost1.a() déplace toujours ce fantôme dans la même direction et ne choisit pas une direction aléatoire chaque fois que vous l'appelez.


Une approche différente est de le faire avec des vecteurs:

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] 

L'utilisation est le même que précédemment, vous suffit d'appeler a() sur un fantôme.