我正在c++中创建一个棋盘游戏(stratego),并想知道是否认为从类方法返回整数以确定切换语句中向用户显示哪种情况是一种糟糕的做法。
在stratego中,你不能攻击属于你自己军队的棋子,所以当用户试图攻击你的军队时,我有一条信息“你不能攻击你自己的军队”。
同样的事情,如果一个动作被执行,会导致球员跳板,移动太多的空间,等等。
这些无效的动作都有它自己的唯一消息,但是为了避免从Class.cpp文件中打印它们,这是验证玩家移动的地方,我让Class.cpp文件在main()中将一个整数返回给调用它的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;
}发布于 2015-06-18 19:13:08
这种技术没什么问题。如果您想要更明确,您可以始终创建一个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;
}https://stackoverflow.com/questions/30923785
复制相似问题