C#For Loop with Random Int Generator锁定程序

时间:2011-10-31 18:00:06

标签: c# loops random

我有2个一维数组,包含完全相同的值:

public int[] start = new int[21] { 0, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14 };

public int[] end = new int[21] { 0, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14 };

下面是我用来生成随机索引的代码,并使用所述索引从数组中获取元素,并将其粘贴在2D数组中,随机生成X和Y索引。

for (int i = 0; i < 21; i++)
        {
            Random ranNum = new Random();
            int genX = 0;
            int genY = 5;
            int indx = 1;

            while (gameBoard[genX, genY].rank > -1)
            {
                genX = ranNum.Next(0, 9);
                genY = ranNum.Next(5, 8);
            }
            while (start[indx] == -1)
            {
                indx = ranNum.Next(0, 21);
            }
            if (gameBoard[genX, genY].rank == -1)
            {
                gameBoard[genX, genY].rank = start[indx];
                start[indx] = -1;
            }
            while (gameBoard[genX, genY].rank > -1)
            {
                genX = ranNum.Next(0, 9);
                genY = ranNum.Next(0, 3);
            }
            while (end[indx] == -1)
            {
                indx = ranNum.Next(0, 21);
            }
            if (gameBoard[genX, genY].rank == -1)
            {
                gameBoard[genX, genY].rank = end[indx];
                end[indx] = -1;
            }                
        }

基本上,它从“开始”和“结束”数组中获取一个值,用'-1'替换它们(因此它们不再被拾取),扫描2D数组的'-1s'(所以它不会将数字放在已有的数字的位置,并将其放在那里。

请注意,“start”和“end”数组的random的min和max值不同。这是为了确保它们在2D阵列的另一侧远离彼此。

此代码有效。现在,我有一个代码将所有变量重置回以前的状态。复位功能也有效。请注意,如果用户不满意随机放置,他们可以重置阵列,然后再次随机化。

此时程序只是挂起/锁定。没有错误,没有消息,它只是停止工作。拜托,您能否分享一下如何/为何发生这种情况的想法?

注意:如果我删除了关于“end”数组的整个while循环,程序可以随机化并重置它想要的所有内容。

无论如何,重置代码:

int resVal = 0;
            for (int i = 0; i < 21; i++)
            {
                startBoard[i] = resVal;
                enemyBoard[i] = resVal;
                if (i == 0)
                    resVal++;
                else if (i >= 6 && i < 19)
                    resVal++;
            }

for (int y = 0; y < 8; y++)
            {
                for (int x = 0; x < 9; x++)
                {
                    gameBoard[x, y] = new classPiece();
                    gameBoard[x, y].rank = -1;
                }
            }

1 个答案:

答案 0 :(得分:3)

Random ranNum = new Random();移出周期。