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

时间:2015-06-18 19:09:57

标签: c++ exception-handling switch-statement user-feedback

我正在用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;
}

1 个答案:

答案 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;
}