ASCII迷路を実行するプログラムを作成しましたが、次の状況のフィルターを作成しません。
####
..X#
####
「#」は壁を意味します。
「X」は場所を意味します。
'。' 残された「ブレッドクラム」です。
次のように、マトリックスに配置されているため、これに似ている可能性もあります。
#### [(x-1, y-1)][(x-1, y)][(x-1, y+1)]
..X# --> [(x, y - 1)][( x, y )][(x, y + 1)]
#### [(x-1, y-1)][(x+1, y)][(x+1, y+1)]
可能な状況は4つあるので、Cでelseifステートメントを作成しました。
else if(mazePointer->matrix[curX-1][curY] == '#' &&
mazePointer->matrix[curX][curY+1] == '#' &&
mazePointer->matrix[curX+1][curY] == '#'){
walkPointer->newX = curX;
walkPointer->newY = curY-1;
mazePointer->matrix[curX][curY] = '+';
return 1;
}
var curX&curYは、その時点でのマトリックス調整です。
この例は、一番上の例の行列座標に適しています。この状況で私がやりたいのは、1スペース戻る前に、自分の場所に「+」を付けてからスペースを戻すことです。これは、「+」で「マークされた」場所に到達することはできないため、同じ状況に陥らないことを保証します。空か「。」で埋められた場所にしか着陸できません。
しかし、私の意見では、この「フィルター」は現在の状況をスキップするだけなので、奇妙なことが起こります。声明は真実ではありません。誰かが私が台無しにしていることを私に説明できますか?