2017-10-24 3 views
0

プレイヤークラスの移動方法を使い、プレイヤーの動きをコピーさせたい。私は、敵が基本的にプレイヤーをフォローして、一定の条件が満たされるまで(例えば、3分が経過するまで)、敵がすべてのステップを辿ることを望みます。以下はプレイヤーのクラスで私の移動方法Pygameシンプルムーブメント:プレイヤーの動きを模倣して踏み返す敵

class PacMan(pygame.sprite.Sprite): 
    def __init__(self, x, y, radius): 
     super().__init__() 
     self.image = pygame.Surface([radius, radius]) 
     self.image.fill([250, 250, 0]) 
     self.rect = self.image.get_rect() 
     self.rect.x = x 
     self.rect.y = y 
     self.queue = [-speed1, 0] 
     self.direction = [-speed1, 0] 

    def change_direction(self, x, y): 
     self.queue = [x, y] 

    def move(self, level): 
     self.rect.x += self.queue[0] 
     self.rect.y += self.queue[1] 
     hitlist = pygame.sprite.spritecollide(self, level.wall_list, False) 
     if hitlist: 
      self.rect.x -= self.queue[0] 
      self.rect.y -= self.queue[1] 
      self.rect.x += self.direction[0] 
      self.rect.y += self.direction[1] 
      seclist = pygame.sprite.spritecollide(self, level.wall_list, False) 
      if seclist: 
       self.rect.x -= self.direction[0] 
       self.rect.y -= self.direction[1] 
     else: 
      self.direction[0] = self.queue[0] 
      self.direction[1] = self.queue[1] 

     if self.rect.x < -pacman_length: 
      self.rect.x = board_dimensions[0] - wall_length 
      self.rect.y = self.rect.y 
     if self.rect.x > board_dimensions[0]: 
      self.rect.x = wall_length 

次は私が実際にwhileループを使用し

時に右4つのピクセルに行くのは別に機能しません敵のクラス
class Ghost(pygame.sprite.Sprite): 
    def __init__(self, x, y, color,): 
     super().__init__() 
     self.color = color 
     self.image = pygame.Surface([pacman_length, pacman_length]) 
     self.image.fill(color) 
     self.rect = self.image.get_rect() 
     self.rect.x = x 
     self.rect.y = y 
     self.direction = [0, speed1] 
     self.moves = [False, True, True, False] 
     self.edible = False 
     self.wait = False 
     self.waitcount = 0 
     self.speed = speed1 

    def move(self, level): 
     status1 = False 
     status2 = True 



     self.rect.move_ip(4, 0) 
     x_change = 0 
     y_change = 0 

     for i in startingmovements: 
      print (i) 
      print(i[0]) 
      print (i[1]) 
    def change_color(self, color): 
     self.image.fill(color) 

です文字はそのように移動します:

 player.move(board) 

     for i in board.ghost_list: 
      i.move(board) 

for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      return 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       player.change_direction(-4, 0) 
      elif event.key == pygame.K_RIGHT: 
       player.change_direction(4, 0) 
      elif event.key == pygame.K_DOWN: 
       player.change_direction(0, 4) 
      elif event.key == pygame.K_UP: 
       player.change_direction(0, -4) 
      elif event.key == pygame.K_SPACE: 

コードには簡単な解決策があると私は理解していますが、私は答えを理解できないような時代を迎えています。どんな助けも本当にありがたいです

答えて

0

解決策は、あなたのpac-manクラスに属性としてリストを入れることです。たとえば、self.steps=[]です。パックマンは彼の座標を列挙して、幽霊が彼を追跡できるようにします。あなたのコードに実装

class PacMan(pygame.sprite.Sprite): 
def __init__(self, x, y, radius): 
    super().__init__() 
    self.image = pygame.Surface([radius, radius]) 
    self.image.fill([250, 250, 0]) 
    self.rect = self.image.get_rect() 
    self.rect.x = x 
    self.rect.y = y 
    self.queue = [-speed1, 0] 
    self.direction = [-speed1, 0] 
    #add some starting values 
    self.steps=[] 

は、今度は、パックマンのリストに彼のステップを持っている機能を追加してみましょう。ゴースト機能のために今すぐ

def update_steps(): 
    #add current position 
    self.steps.insert(0,(self.rect.x,self.rect.y)) 
    #delete old steps 
    del self.steps[:-1] 

def update_pos(steps): 
    self.rect.x=steps[:-1[1]] 
    self.rect.y=steps[:-1[2]] 

はまた、第1の代わりにパックマンのゴーストを更新してください。

こちらがお役に立てば幸いです。

関連する問題