示例#1
0
int DirToMask(POINT dir)
{
    return
    (dir.imag()==+1)?1:
    (dir.imag()==-1)?2:
    (dir.real()==-1)?4:
    (dir.real()==+1)?8:
    0;
}
示例#2
0
void Walk(const char*  path,POINT &pos,POINT &dir, POINT &minpt,POINT &maxpt)
{
    POINT enter_dir=dir;///enter direction for cell

    path++;
    pos+=dir;
    ///enter maze


    for(;*path;path++)
    {

        switch(*path)
        {
            case 'W':

                if(minpt.real()>pos.real())minpt.real()=pos.real();
                if(minpt.imag()>pos.imag())minpt.imag()=pos.imag();

                if(maxpt.real()<pos.real())maxpt.real()=pos.real();
                if(maxpt.imag()<pos.imag())maxpt.imag()=pos.imag();

                ///break walls in enter and exit directions
                maze[std::make_pair(pos.real(),pos.imag())]|=DirToMask(-enter_dir);
                maze[std::make_pair(pos.real(),pos.imag())]|=DirToMask(+dir);

                pos+=dir;

                enter_dir=dir;

                break;

            case 'L':
                dir*=POINT(0,1);
                break;

            case 'R':
                dir*=POINT(0,-1);
                break;
        }
    }

}