2015-06-18 21 views
1

我正在C++中创建棋盘游戏(stratego),并且想知道是否它考虑了一个糟糕的做法以从类方法返回一个整数,以便确定在哪个情况下切换语句以向用户显示。返回一个整数以确定要显示哪个switch语句

例如: 在战略中,你不能攻击属于你自己部队的棋子,所以当用户试图这样做时,我有一条信息“你不能攻击你自己的军队”。

如果进行运动同样的事情,这会导致球员跳下板,动太多的空间,等等

每个无效运动有它自己独特的消息,但要避免它们打印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; 
} 
+3

这是好的做法,但它可能是最好使用'enum'而不是'int'(或'枚举class'用C++ 11) – dwcanillas

+0

'bool isValid(int valid){if(valid> 0 && valid <5)return true;如果(有效> 5)返回false;的std ::中止(); }',然后'Test obj; if(obj.isValid(entry)){/*...*/}' –

+0

你的程序总体上具有未定义的行为,因为你没有从声明为返回int的函数返回一个值。 –

回答

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; 
} 
+0

谢谢,我给了一个镜头。看起来它会让事情变得更加清晰 – nonce