0

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スペース戻る前に、自分の場所に「+」を付けてからスペースを戻すことです。これは、「+」で「マークされた」場所に到達することはできないため、同じ状況に陥らないことを保証します。空か「。」で埋められた場所にしか着陸できません。

しかし、私の意見では、この「フィルター」は現在の状況をスキップするだけなので、奇妙なことが起こります。声明は真実ではありません。誰かが私が台無しにしていることを私に説明できますか?

4

1 に答える 1

0

ビット単位の演算子である「&」を使用しています。代わりに、「&&」ブール値の「AND」演算子を使用します。

于 2013-02-24T01:26:14.350 に答える