2015-06-18 25 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