我正在用c ++创建一个棋盘游戏(stratego),并且想知道从类方法返回一个整数是否是一种不好的做法,以确定在switch语句中向用户显示哪种情况。
实施例: 在战略中,你不能攻击属于你自己军队的棋盘碎片,因此当用户试图这样做时,我会发出一条消息“你无法攻击自己的军队”。
同样的事情,如果进行的运动会导致玩家跳板,移动太多空间等。
这些无效动作中的每一个都有它自己唯一的消息,但是为了避免从Class.cpp文件中打印它们,这是验证玩家移动的位置,我让Class.cpp文件将一个整数返回到switch语句中调用它的main()。 处理消息调用方式的最佳推荐方法是什么?
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;
}
答案 0 :(得分:3)
这种技术没有错。如果您想更明确,可以随时制作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;
}