【问题标题】:Random enemy pattern随机敌人模式
【发布时间】:2015-08-13 03:01:49
【问题描述】:

我想要一个完全随机移动敌人的模式,因为当我有 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);
    }

但是这段代码只是对房间里的所有敌人执行相同的模式。 谢谢帮助我。

【问题讨论】:

  • rand = new Random(seed) 行在哪里?
  • 您可能会发现将rand.Next(0, 3) 更改为rand.Next(0, 4) 很有用,因为第二个参数是独占 上限。换句话说,rand.Next(0, 3) 只返回来自{ 0, 1, 2 } 的值。
  • 您可以尝试将单个new Random()(没有不必要的种子代码)实例化为static 字段吗?
  • 对于一些敌人我认为这不起作用

标签: c# random xna-4.0 monogame


【解决方案1】:

我相信问题在于这个

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

检查您是否多次调用它的时间太近了。如果是这样,您将获得相同的随机数

rand.Next(0, 3)

每次你调用它时,你都会得到相同的数字,因此你会在每个敌人身上得到相同的图案。

Similar question

【讨论】:

    【解决方案2】:

    好的,我解决了这个问题,在 for reader 上放置一个计数器,以便像这样做种子(这是在 for map reader 上):

    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);}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      相关资源
      最近更新 更多