地牢搜寻器无法运作

时间:2018-08-19 13:05:55

标签: c++

我正在制作一个简单的随机生成的地牢爬虫,当我运行它时,有时端点或玩家不在地图中,而是在地图外生成的。修复它之后,我放了一些限制和检查程序来查看是否创建了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();
}

1 个答案:

答案 0 :(得分:0)

您的代码还有其他问题,但是您问题中的问题是由Gencheck标签下的代码引起的。如果您遵循逻辑,则(大致)执行以下操作:

  1. 遍历地图中的每个单元格
  2. 如果它等于'E',则增加E计数器
  3. 如果它等于'P',则增加P计数器
  4. 如果这些测试中的任何一个失败,请返回Egeneration

希望这可以阐明您的代码为何进入无限循环的原因:单元永远不会等于“ E”和“ P”,因此程序将始终无法通过这两项检查之一,并返回到Egeneration