title: My Python game enemies are moving in loops
body: <p>in my pygame code, I made my own simple enemy AI to make them follow the player around the screen, moving in that direction. But I have encountered a problem that causes them to start looping around strangely whenever the character moves, and only follow the player if it's staying still. the class that does the tracking is "calcSpeeds()". if someone can help me figure out what i need to do that would be grand. </p>
  
  <pre><code>import pygame
  import random
  
  import math
  
  from fractions import Fraction
  
  pygame.init()
  
  swidth = int(1920/1.5)
  sheight = int(1080/1.5)
  
  groundheight = sheight*.9
  
  
  
  win = pygame.display.set_mode((swidth,sheight))
  
  pygame.display.set_caption("first time coding in pythong for realzies")
  
  mx, my = pygame.mouse.get_pos()
  
  class Player:
      def __init__(self,x,y,width,height):
          self.px = x
          self.py = y
          self.pwidth = width
          self.pheight = height
          self.psx = 0
          self.psy = 0
          self.masterspeed = 2
          # 4
          self.isjump = False
  
      def updatePos(self):
          if event.type == pygame.KEYDOWN:
              if event.key == pygame.K_UP:
                  self.psy = self.masterspeed
                  self.py -= self.psy
              else:
                  self.psy = 0
  
              if event.key == pygame.K_DOWN:
                  self.psy = self.masterspeed
                  self.py += self.psy
              else:
                  self.psy = 0
  
              if event.key == pygame.K_LEFT:
                  self.psx = self.masterspeed
                  self.px -= self.psx
              else:
                  self.psx = 0
  
              if event.key == pygame.K_RIGHT:
                  self.psx = self.masterspeed
                  self.px += self.psx
              else:
                  self.psx = 0
  
  
              if event.key == pygame.K_SPACE:
                  print("Hey, you pressed the key, 'space bar'!")
  
              if event.key == pygame.K_x:
                  print("Hey, you pressed the key, 'x'!")
  
      def drawCharacter(self):
          pygame.draw.rect(win, (222,2,2), (self.px-self.pwidth/2,self.py-self.pheight/2,self.pwidth,self.pheight))
  
  
  class EnemyBird:
      def __init__(self,x,y,width,height):
          self.x = x
          self.y = y
          self.width = width
          self.height = height
          self.sx = 0
          self.sy = 0
          self.vel = 1
  
      def drawEnemyBird(self):
          pygame.draw.ellipse(win, (245, 218, 17), (self.x,self.y,self.width,self.height))
  
      def calcSpeeds(self):
  
          self.slope = (me.py - self.y)/(me.px - self.x)
  
          # this variable holds the angle between the yellow birds and the player
          self.pointangle = math.degrees(math.atan2((me.py - self.y),(me.px - self.x)))
  
          self.sy = self.vel*math.sin(self.pointangle)
          self.sx = self.vel*math.cos(self.pointangle)
  
          print(self.sx,self.sy)
  
      def moveBird(self):
          self.x += self.sx
          self.y += self.sy
  
  me = Player(swidth/2 ,sheight*.9,20,20)
  
  birdies = []
  
  for i in range(1):
      birdies.append(EnemyBird(random.randint(0,swidth), random.randint(0,sheight*.9), 20,20))
  
  run = True
  while run:
      pygame.time.delay(10)
      for event in pygame.event.get():
          if event.type == pygame.QUIT:
              run = False
  
      mx, my = pygame.mouse.get_pos()
      win.fill((135,206,235))
      pygame.draw.rect(win, (48, 110, 16), (0,groundheight,swidth,sheight*.2))
  
      me.updatePos()
      me.drawCharacter()
  
      for i in range(len(birdies)):
  
          birdies[i].moveBird()
          birdies[i].calcSpeeds()
          birdies[i].drawEnemyBird()
  
      pygame.display.update()
  pygame.quit()
  </code></pre>