Prim のアルゴリズムを実装することで、迷路の作成に成功しました。結果はセルの 2D 配列に格納され、各セルには北、南、東、西 (4 つの異なる壁を表します) があります。
私が本当に苦労している部分は、キューブを使用してこれを 3D でレンダリングすることです。各立方体は壁を表し、その壁がある場合にのみ立方体をレンダリングしたいと考えています。以下は私が持っている現在のコードですが、正しく動作していません (描画されるキューブが多すぎる/存在しない迷路になります)。
どんな助けでも大歓迎です。さらに情報が必要な場合はお知らせください。できるだけ早く投稿します。
void Maze::drawMaze(vector<vector<Cell> > maze) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (maze[i][j].south == 1) {
glColor4f(0, .2, 0, 0);
glPushMatrix();
glTranslatef(j * 2 - 2, 0, i * 2);
glutSolidCube(2);
glPopMatrix();
}
if (maze[i][j].north == 1) {
glColor4f(0, .2, 0, 0);
glPushMatrix();
glTranslatef(j * 2 + 2, 0, i * 2);
glutSolidCube(2);
glPopMatrix();
}
if (maze[i][j].east == 1) {
glColor4f(0, .2, 0, 0);
glPushMatrix();
glTranslatef(j * 2, 0, i * 2 + 2);
glutSolidCube(2);
glPopMatrix();
}
if (maze[i][j].west == 1) {
glColor4f(0, .2, 0, 0);
glPushMatrix();
glTranslatef(j * 2, 0, i * 2 - 2);
glutSolidCube(2);
glPopMatrix();
}
}
}
}
これは、正しい迷路を表示するための印刷方法です。適切なopenglに変換する方法がわかりません。
void Maze::PrintMaze(){
for(int i = 0; i < 2*10; ++i){
cout << "_";
}
cout << endl;
for (int i = 0; i < 10; ++i){
cout << "|";
for (int j = 0; j < 10; ++j){
Cell c = maze[i][j];
cout << (c.south == 0 ? " " : "_");
if (c.east == 0)
cout << " ";
else cout << "|";
}
cout << endl;
}
}
____________________
| | | |_ | | | _ |
| _|_ _ _ | |_|
| _|_ |_ | |
| |_| | |_ _ |_|_ _|
| | _ _ |_ _| _|
|_|_| _| |_| _| _|
|_ _ _ | |_ | |
| |_| | | _ _ _ |
| _|_| _| |
|_|_|_ _|_ _|_|_|_ _|