我正在制作一个简单的随机生成的地牢爬虫,当我运行它时,有时端点或玩家不在地图中,而是在地图外生成的。修复它之后,我放了一些限制和检查程序来查看是否创建了Player和End,但是现在运行它之后,它就卡住了。
//Traps, Ending and Player generation
void TEPgen()
{
srand(time(0));
//Traps
for(i=0; i<22; i++)
{
a=(rand()%11);
b=(rand()%11);
map[a][b]='T';
}
//Ending
Egeneration:
a=(rand()%11);
b=(rand()%11);
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(((a+i)>9) && ((a-i)<0) && ((b+j)>9) && ((b-j)<0) )
goto Egeneration;
}
}
y=a;x=b;
map[y][x]='E';
//Player
Pgeneration:
a=(rand()%11);
b=(rand()%11);
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
if(map[a+i][b+j]=='E' && map[a-i][b-j]=='E' && ((a+i)>9) && ((a-i)<0) && ((b+j)>9) && ((b-j)<0))
goto Pgeneration;
}
}
//Generation checker
Gencheck:
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
if(map[i][j]=='E')
E+=1;
else
goto Egeneration;
if(map[i][j]=='P')
P+=1;
else
goto Egeneration;
}
}
next:
map[a][b]='P';
mapview();
}
答案 0 :(得分:0)
您的代码还有其他问题,但是您问题中的问题是由Gencheck
标签下的代码引起的。如果您遵循逻辑,则(大致)执行以下操作:
Egeneration
希望这可以阐明您的代码为何进入无限循环的原因:单元永远不会等于“ E”和“ P”,因此程序将始终无法通过这两项检查之一,并返回到Egeneration
。