我有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;
}
}
答案 0 :(得分:3)
将Random ranNum = new Random();
移出周期。