返回一个整数以确定显示哪个 switch 语句
Returning an integer to determine which switch statement to show
我正在用 C++ 创建一个棋盘游戏 (stratego),我想知道从 class 方法中 return 一个整数来确定哪种情况是一种不好的做法向用户显示的 switch 语句。
示例:
在 stratego 中,你不能攻击属于你自己军队的棋盘,所以当用户尝试这样做时,我会收到一条消息 "You cannot attack your own army"。
如果执行的移动会导致玩家跳出棋盘、移动太多空间等,情况也是如此。
这些无效动作中的每一个都有其自己独特的消息,但为了避免从 Class.cpp 文件中打印它们,这是验证玩家动作的地方,我有 Class.cpp 文件 return将一个整数传递给调用它的 main() 中的 switch 语句。
处理消息调用方式的最推荐方法是什么?
class Test
{
public:
Test()
{
}
int Validate_Move(int valid)
{
if (valid > 0 && valid < 5)
{
return 1;
}
else if (valid > 5)
{
return 2;
}
}
};
int main()
{
int entry;
std::cout << "Enter move: ";
std::cin >> entry;
Test obj;
switch (obj.Validate_Move(entry))
{
case 1:
std::cout << "Move is valid" << std::endl;
case 2:
std::cout << "Move is invalid" << std::endl;
default:
std::cout << "Error occured" << std::endl;
}
return 0;
}
这种技术没有任何问题。如果你想更明确,你总是可以做一个 enum
class Test
{
public:
Test() = default;
enum EValidity {eError, eValid, eInvalid};
EValidity Validate_Move(int valid)
{
if (valid > 0 && valid < 5)
{
return eValid;
}
else if (valid > 5)
{
return eInvalid;
}
else
{
return eError;
}
}
};
int main()
{
int entry;
std::cout << "Enter move: ";
std::cin >> entry;
Test obj;
switch (obj.Validate_Move(entry))
{
case Test::eValid:
std::cout << "Move is valid" << std::endl;
break;
case Test::eInvalid:
std::cout << "Move is invalid" << std::endl;
break;
case Test::eError:
std::cout << "Error occured" << std::endl;
break;
default:
assert(false);
}
return 0;
}
我正在用 C++ 创建一个棋盘游戏 (stratego),我想知道从 class 方法中 return 一个整数来确定哪种情况是一种不好的做法向用户显示的 switch 语句。
示例: 在 stratego 中,你不能攻击属于你自己军队的棋盘,所以当用户尝试这样做时,我会收到一条消息 "You cannot attack your own army"。
如果执行的移动会导致玩家跳出棋盘、移动太多空间等,情况也是如此。
这些无效动作中的每一个都有其自己独特的消息,但为了避免从 Class.cpp 文件中打印它们,这是验证玩家动作的地方,我有 Class.cpp 文件 return将一个整数传递给调用它的 main() 中的 switch 语句。 处理消息调用方式的最推荐方法是什么?
class Test
{
public:
Test()
{
}
int Validate_Move(int valid)
{
if (valid > 0 && valid < 5)
{
return 1;
}
else if (valid > 5)
{
return 2;
}
}
};
int main()
{
int entry;
std::cout << "Enter move: ";
std::cin >> entry;
Test obj;
switch (obj.Validate_Move(entry))
{
case 1:
std::cout << "Move is valid" << std::endl;
case 2:
std::cout << "Move is invalid" << std::endl;
default:
std::cout << "Error occured" << std::endl;
}
return 0;
}
这种技术没有任何问题。如果你想更明确,你总是可以做一个 enum
class Test
{
public:
Test() = default;
enum EValidity {eError, eValid, eInvalid};
EValidity Validate_Move(int valid)
{
if (valid > 0 && valid < 5)
{
return eValid;
}
else if (valid > 5)
{
return eInvalid;
}
else
{
return eError;
}
}
};
int main()
{
int entry;
std::cout << "Enter move: ";
std::cin >> entry;
Test obj;
switch (obj.Validate_Move(entry))
{
case Test::eValid:
std::cout << "Move is valid" << std::endl;
break;
case Test::eInvalid:
std::cout << "Move is invalid" << std::endl;
break;
case Test::eError:
std::cout << "Error occured" << std::endl;
break;
default:
assert(false);
}
return 0;
}