【问题标题】:I want to randomize the succession of enemies spawned from the number of different enemies that will spawn in a wave. (TD GAME), How do I do this?我想根据将在一波中产生的不同敌人的数量随机产生一系列敌人。 (TD GAME),我该怎么做?
【发布时间】:2020-06-11 18:29:26
【问题描述】:
    private void DetermineEnemySelection()
    {
        int _totalCount = 0;
        for(int i = 0; i < enemyCounts.Length; i++)
        {
            _totalCount += enemyCounts[i];
        }

        Stack<int> rn = new Stack<int>();

        for(int i = 0; i < _totalCount; i++)
        {
            int _sel = Random.Range(0, 5);
            if(enemyCounts[_sel] == 0)
            {

            }
        }
    }

上下文:enemyCounts[] 包含每种类型的敌人数量(enemyCounts[0] 是将在波中生成的类型 1 的敌人数量)

_totalCount 是波中生成的敌人总数,包括所有敌人类型。 我的想法是有一堆数字作为敌人的类型 ID。数字从 0 到 6,将随机推送。如果enemyCounts[_sel] 为空,我想创建一个新的随机数,并在可能的情况下从范围中排除该随机数(因此如果enemyCounts[3] 为空,则可能生成数字0 1 2 4 5)

我找不到解决方案。我已经有一个涉及while循环的游戏,但由于某种原因,这导致游戏在一段时间后崩溃,尝试生成下一个敌人导致崩溃的次数达到2701470。我有点想要一个最终具有 _totalCount 长度的堆栈(这样你就不会得到重复的敌人)并且看起来有点像这样 {0,1,2,0,4,1,0,3,2,0,3 ,5,1,5,3,3,2,2,0} 等表示这将是一系列敌人。

没有任何无限循环的最佳方法是什么?

【问题讨论】:

    标签: loops random crash stack


    【解决方案1】:

    我自己找到了解决此问题的方法:

     private void DetermineEnemySelection()
        {
            int _totalCount = 0;
            for(int i = 0; i < enemyCounts.Length; i++)
            {
                _totalCount += enemyCounts[i];
            }
    
            Stack<int> _rn = new Stack<int>();
            List<int> _available = new List<int>();
            _available.Add(0);
            _available.Add(1);
            _available.Add(2);
            _available.Add(3);
            _available.Add(4);
    
    
            for (int i = 0; i < _totalCount; i++)
            {
                int _sel = _available[Random.Range(0, _available.Count)];
                if(enemyCounts[_sel] == 0)
                {
                    _available.Remove(_sel);
                    i--;
                } else
                {
                    _rn.Push(_sel);
                }
    
            }
            enemySelection = _rn;
        }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-27
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2022-11-01
      相关资源
      最近更新 更多