返回一个整数以确定要显示的 switch 语句

Returning an integer to determine which switch statement to show

本文关键字:显示 语句 switch 整数 一个 返回      更新时间:2023-10-16

我正在用 c++ 创建一个棋盘游戏(stratego),想知道它是否认为从类方法返回整数以确定在 switch 语句中向用户显示哪种情况是一种糟糕的做法。

例:在 stratego 中,你不能攻击属于你自己军队的棋盘,所以当用户尝试这样做时,我有一条消息"你不能攻击自己的军队"。

如果执行的移动会导致玩家跳下棋盘、移动太多空间等,则也是如此。

这些无效动作中的每一个都有其自己唯一的消息,但为了避免从 Class.cpp 文件中打印它们,这是验证玩家移动的地方,我有 Class.cpp 文件向 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;
}