Моногамный 2D сверху вниз AI врага

Я пытаюсь создать простой ИИ для игры сверху вниз, которая следует за игроком, но не сразу выбирает правильный путь к нему. Моим врагам нужно двигаться за 100 пикселей, прежде чем они решат сделать еще один шаг. Я собрал то, что сделал то, что хотел. Он смотрел на координаты игрока и двигался к нему, но был также шанс, что он принял другое направление.

Теперь я добавил несколько врагов через класс EnemyManager, и они, к сожалению, точно следуют за движениями друг друга. Я знаю, что это может быть связано с тем, что функция Random основана на времени ее выполнения. Как я могу это исправить?

Я также совершенно уверен, что метод, который я использую, не является эффективным:

 public void decideAImovement(Vector2 heroPosition)
 {
     Random random = new Random();
     int forwardChance = 10;
     int backChance = 10;
     int leftChance = 10;
     int rightChance = 10;

     if (position.Y > heroPosition.Y)
     {
         backChance += 50;
     }
     else if (position.Y < heroPosition.Y)
     {
         forwardChance += 50;
     }
     if (position.X > heroPosition.X)
     {
         leftChance += 50;
     }
     else if (position.X < heroPosition.X)
     {
         rightChance += 50;
     }
     backChance = random.Next(backChance);
     rightChance = random.Next(rightChance);
     leftChance = random.Next(leftChance);
     forwardChance = random.Next(forwardChance);

 int vergelijkingUD,vergelijkingLR,vergelijking;
     vergelijkingUD = Math.Max(forwardChance, backChance);
     vergelijkingLR = Math.Max(leftChance, rightChance);
     vergelijking = Math.Max(vergelijkingLR, vergelijkingUD);

     if (vergelijking == vergelijkingLR) //Left Right
     {
         if (vergelijkingLR == leftChance)
         {
             state = EnemyState.walkLeft;
         }
         else
         {
             state = EnemyState.walkRight;
         }
     }
     else //Up Down
     {
         if (vergelijkingUD == backChance)
         {
             state = EnemyState.walkBack;
         }
         else
         {
             state= EnemyState.walkForward;
         }
     }
 }

 public void moveEnemy(Vector2 heroPosition)
 {
     distanceWalked += 2;
     if (distanceWalked == gridDimensions || state == EnemyState.stop)
     {
         distanceWalked = 0;
         decideAImovement(heroPosition); 
     }

     switch (state)
     {
         case EnemyState.walkRight:
             position.X += 2.0f;
             break;
         case EnemyState.walkLeft:
             position.X -= 2.0f;
             break;
         case EnemyState.walkBack:
             position.Y -= 2.0f;
             break;
         case EnemyState.walkForward:
             position.Y += 2.0f;
             break;
         case EnemyState.stop:
             break;
     }
 }

0 ответов

Другие вопросы по тегам