我列出了在2d阵列中放置着陆垫的潜在站点。它们保持2个整数,一个用于行,一个用于列。我需要从此列表中随机添加一些登陆站点,但由于某种原因,它经常使用相同的点。我想以某种方式排除这些点,所以我使用了这个循环,但由于某种原因它锁定了无限循环,我只是无法找出原因!
for(int j = 0; j < amountLandingPads; j++)
{
int r = Random.Range(0,potSitesC.Length-1);
while(roomType[potSitesR[r],potSitesC[r]] == (int)room.Landing)
{
r = Random.Range(0,potSitesC.Length-1);
}
roomType[potSitesR[r],potSitesC[r]] = (int)room.Landing;
//do more stuff
}
对我而言,如果当前网站已经被指定为登陆网站,则随机选择另一个网站,直到找到不是登陆平台的网站,我做错了什么?
potSites.Length总是20+,ammountLandingPads总是potites.Length / 4和最小1.
roomtype是该位置的房间类型(在2d int数组中)
答案 0 :(得分:1)
看起来您正在使用相同的int r
和potSitesR.Length
来决定着陆站点的行坐标和列坐标。这最终将始终从potSitesR
和potSitesC
选择具有相同索引的位置,即(potSitesR [1],potSitesC [1])或(potSitesR [2],potSitesC [2])等等......总是在potSitesR.Length范围内。
尝试使用不同的值进行更多随机化。这是示例代码:
for(int j = 0; j < amountLandingPads; j++)
{
//In the following statement
//Removed -1 because int version is exclusive of second parameter
//Changed it to potSitesR.Length (from potSitesC.Length)
int r = Random.Range(0, potSitesR.Length);
//second randomized number for column-randomization.
int c = Random.Range(0, potSitesC.Length);
while (roomType[potSitesR[r],potSitesC[c]] == (int)room.Landing) //using both randomized numbers
{
r = Random.Range(0, potSitesR.Length); // r from potSitesR.Length
c = Random.Range(0, potSitesC.Length); // c from potSitesC.Length
}
roomType[potSitesR[r], potSitesC[c]] = (int)room.Landing;
//do more stuff
}
我希望有所帮助!