2015-08-13 2 views
1

Я хочу шаблон, который перемещает моего врага случайным образом, потому что, когда у меня есть 3 или 4 врага, они кажутся тем же вражеским движением. это мой код для случайного:Случайный шаблон врага

  int seed = unchecked(System.DateTime.Now.Ticks.GetHashCode()); 
     rand = new Random(seed); 

А вот код для процесса хода:

public void move(GameTime time, WorldScreen screen) 
    { 
     timer += (float)time.ElapsedGameTime.TotalMilliseconds; 
     if (timer > 2000) 
     { 
      switch (rand.Next(0, 3)) 
      { 
       case 0: 
        base.direction = Enemy.Direction.down; 
        break; 
       case 1: 
        base.direction = Enemy.Direction.right; 
        break; 
       case 2: 
        base.direction = Enemy.Direction.left; 
        break; 
       case 3: 
        base.direction = Enemy.Direction.up; 
        break; 

      } 
      timer = 0; 
     } 
     timer1 += (float)time.ElapsedGameTime.TotalMilliseconds; 
     if (timer1 > 50) 
     { 
      timer1 = 0; 
      if (direction == Enemy.Direction.down) 
      { 
       if (!MoveCollision(new Vector2(position.X, position.Y + speed), screen)) 
       { 
        base.position.Y += speed; 
        ActualAnimation = getAnimation("rundown"); 
       } 
       else 
       { 
        base.direction = Enemy.Direction.right; 
       } 
      } 
      if (direction == Enemy.Direction.up) 
      { 
       if (!MoveCollision(new Vector2(position.X, position.Y - speed), screen)) 
       { 
        base.position.Y -= speed; 
        ActualAnimation = getAnimation("runup"); 
       } 
       else 
       { 
        base.direction = Enemy.Direction.down; 
       } 
      } 
      if (direction == Enemy.Direction.right) 
      { 
       if (!MoveCollision(new Vector2(position.X + speed, position.Y), screen)) 
       { 
        base.position.X += speed; 
        ActualAnimation = getAnimation("runright"); 
       } 
       else 
       { 
        base.direction = Enemy.Direction.left; 
       } 
      } 
      if (direction == Enemy.Direction.left) 
      { 
       if (!MoveCollision(new Vector2(position.X - speed, position.Y), screen)) 
       { 
        base.position.X -= speed; 
        ActualAnimation = getAnimation("runleft"); 
       } 
       else 
       { 
        base.direction = Enemy.Direction.up; 
       } 

      } 
     } 
     ActualAnimation.update(time, position); 
    } 

но этот код просто сделать тот же шаблон для всех Enemys по комнате. THX за помощь мне в этом.

+1

Где находится строка 'rand = new Random (seed)? – Mephy

+0

Возможно, вам будет полезно изменить 'rand.Next (0, 3)' на 'rand.Next (0, 4)', поскольку второй параметр является ** эксклюзивной ** верхней границей. Другими словами, 'rand.Next (0, 3)' возвращает значения только из '{0, 1, 2}'. – Enigmativity

+0

Можете ли вы попробовать создать экземпляр «new Random()» (без ненужного семенного кода) в качестве поля 'static'? – Enigmativity

ответ

0

Я верю, что проблема лежит на этом

int seed = unchecked(System.DateTime.Now.Ticks.GetHashCode()); rand = new Random(seed);` 

Проверьте, если вы звоните ему несколько раз слишком близко во времени. Если то так что вы получите такое же случайное число на

rand.Next(0, 3) 

Каждый раз, когда вы называете это, вы получите тот же номер, поэтому вы получите тот же рисунок на каждом противнике.

Similar question

0

Хорошо я решить эту положить счетчик на для читателя для делать семя, как это (это на для читателя карты):

int id = map.Layers[1].Tiles[i].Gid; 
      if (id == 172) 
      { 
       enemys.Add(new Hero.World.Entitys.Enemys.Octorock(new Vector2((int)position.X + map.Layers[1].Tiles[i].X * 16, (int)position.Y + map.Layers[1].Tiles[i].Y * 16),i)); 

      } 

И после этого для конструктора что-то вроде этого:

public Octorock(Vector2 position,int i) :base(position) 
    { 
     int seed = unchecked(System.DateTime.Now.Millisecond); 
     rand = new Random(seed*i);} 

 Смежные вопросы

  • Нет связанных вопросов^_^