我被要求用c ++制作迷宫游戏(使用代码块)。我想出了大部分内容,但坚持使用Maze类的一种方法。我有这个功能,说你可以在任何方向(上,下,左,右)行驶,而不是在那里。
int Maze::mazeTraversal(int a, int b)
{
// If a,b is outside maze, return false.
if ( a < 0 || a > MCOLS - 1 || b < 0 || b > NROWS - 1 ) return FALSE;
// If a,b is the goal, return true.
if ( maze[b][a] == 'G' ) return TRUE;
// If a,b is not open, return false.
if ( maze[b][a] != '0' && maze[b][a] != 'S' ) return FALSE;
// Mark a,b part of solution path.
maze[b][a] = 'x';
// If find_path North of a,b is true, return true.
if ( mazeTraversal(a, b - 1) == TRUE ) return TRUE;
// If find_path East of a,b is true, return true.
if ( mazeTraversal(a + 1, b) == TRUE ) return TRUE;
// If find_path South of a,b is true, return true.
if ( mazeTraversal(a, b + 1) == TRUE ) return TRUE;
// If find_path West of a,b is true, return true.
if ( mazeTraversal(a - 1, b) == TRUE ) return TRUE;
// Unmark a,b as part of solution path.
maze[b][a] = '0';
return FALSE;
}
我将此功能称为:
Maze mo(maze,12); //creating maze game with 12/12 array
mo. mazeTraversal(0,2) // because the entry point is in 0,2 position of the game.
我刚才意识到我被要求将此mazeTraversal设为void
。没有任何回报。我的思绪在爆炸。请接受一些创意。
答案 0 :(得分:1)
使用:
void Maze::mazeTraversal(int a, int b, bool& Status)
然后在函数使用中代替return
: -
Status = false; // or true
或在类中使用数据成员bool Status
并更新其值
class Maze{
public :
bool Status;
//..
void Maze::mazeTraversal(int a, int b);
//...
};
答案 1 :(得分:0)
如果您的请求声明不能修改函数的签名,则签名不包括返回类型,因此,您可以更改返回类型。 如果作业没有告诉任何关于签名的内容,那么上游已经发布了解决方案:
这些是我要调查的解决方案。 无论哪种方式,您都必须调整遍历函数的实现。 因为看起来你的Maze对象是有状态的(即:确实保持一些关于它到达的位置的内部状态),第二个更有意义。
答案 2 :(得分:0)
这是另一种解决方案,它不会改变你的功能签名,但它根本不会返回任何内容:
bool g_Status = true;
void Maze::mazeTraversal(int a, int b)
{
if ( a < 0 || a > MCOLS - 1 || b < 0 || b > NROWS - 1 ) // If a,b is outside maze, return false.
g_Status=false;
else if ( maze[b][a] == 'G' ) // If a,b is the goal, return true.
g_Status=true;
else if ( maze[b][a] != '0' && maze[b][a] != 'S' ) // If a,b is not open, return false.
g_Status=false;
else{
maze[b][a] = 'x'; // Mark a,b part of solution path.
mazeTraversal(a, b - 1);
if (!g_Status) // If find_path North of a,b is true, return true.
mazeTraversal(a + 1, b); // If find_path East of a,b is true, return true.
if (!g_Status)
mazeTraversal(a, b + 1); // If find_path South of a,b is true, return true.
if (!g_Status)
mazeTraversal(a - 1, b); // If find_path West of a,b is true, return true.
if (!g_Status)
maze[b][a] = '0'; // Unmark a,b as part of solution path.
}
}
答案 3 :(得分:-1)
您可以像这样编写代码:
void Maze::mazeTraversal(int a, int b,bool* retValue)
{
// If a,b is outside maze, *retValue = false.
if ( a < 0 || a > MCOLS - 1 || b < 0 || b > NROWS - 1 ) {
*retValue= FALSE;
return;
}
// If a,b is the goal, return true.
if ( maze[b][a] == 'G' ) {
*retValue= TRUE;
return;
}
// If a,b is not open, return false.
if ( maze[b][a] != '0' && maze[b][a] != 'S' ) {
*retValue= FALSE;
return;
}
// Mark a,b part of solution path.
maze[b][a] = 'x';
// If find_path North of a,b is true, return true.
bool* ret1;
mazeTraversal(a + 1, b,ret1)
if ( *ret1 == TRUE ) {
*retValue= TRUE;
return;
}
// If find_path East of a,b is true, return true.
bool* ret2;
mazeTraversal(a + 1, b,ret2);
if ( *ret2 == TRUE ) {
*retValue= TRUE;
return;
}
// If find_path South of a,b is true, return true.
bool* ret3;
mazeTraversal(a, b + 1,ret3);
if ( *ret3 == TRUE ) {
*retValue= TRUE;
return;
}
// If find_path West of a,b is true, *retValue= true.
if ( mazeTraversal(a - 1, b) == TRUE ) {
*retValue= TRUE;
return;
}
// Unmark a,b as part of solution path.
maze[b][a] = '0';
*retValue= FALSE;
}
现在创建一个全局变量:
bool* retvalue;
此变量将始终保存返回值,您无需从函数
返回