因此,我分配了一个使用2D数组按用户指定尺寸构建迷宫的任务。迷宫必须随机生成,并且还包括死角。然后,我必须编写一种方法来解决所述迷宫并打印出解决方案。我决定创建迷宫,方法是先在2D数组中填充0以表示墙壁,然后使用通过将0更改为1以刻画墙壁以表示有效路径的方法。下面只是我的方法和构造函数之一,因为在userLength
语句中收到userWidth
,maze
和if
的“使用未声明的标识符”错误。我所有的其他方法都有使用相同变量的相似if
语句,但没有给出任何错误。 isWithinDimensions
用于检查空间是否未超出迷宫的范围。
我对C ++还是陌生的,如果对任何人来说这都是一场噩梦,我深表歉意,因为我敢肯定它可能会更高效,更干净,但是我正在尽力而为。此外,对于构造函数中do / while
循环的任何帮助,或者如果我将其移至方法中以避免在构造函数中使用过多的方法,将不胜感激。同样,我对此很陌生。
bool isWithinDimensions(int x, int y){
bool isValid = true;
if(x<0 || x>userLength-1){
isValid = false;
}else if(y<0 || y>userWidth-1){
isValid = false;
}
return isValid;
}
MazeSolver::MazeSolver(){
int userLength = 0;
int userWidth = 0;
std:: cout << "Please enter the length you would like the maze to be:";
cin >> userLength;
std:: cout << "Please enter the width you would like the maze to be:";
cin >> userWidth;
int** maze = new int*[userLength];
for(auto i=0;i<userLength;i++){
maze[i] = new int[userWidth];
}
for(auto i=0;i<userLength;i++){
for(auto j=0; j<userWidth;j++){
maze[i][j] = 0;
}
}
isValidStart();
do{
int a = x;
int b = y;
int direction = rand() % 4;
if(direction == 1){
b = y+1;
}else if(direction == 2){
a = x+1;
}else if(direction == 3){
b = y-1;
}else{
a = x-1;
}
if(isValidPath(a,b) == true){
maze[a][b] = 1;
}
}while(!isDone);
}
userLength
,userWidth
和maze
在您的功能范围内不存在。您应该考虑将所需的变量添加为参数。
例如
bool isWithinDimensions(int x, int y, int userLength, int userWidth){
bool isValid = true;
if(x<0 || x>userLength-1){
isValid = false;
}else if(y<0 || y>userWidth-1){
isValid = false;
}
return isValid;
}