1

私は C++ でボード ゲーム (ストラテゴ) を作成していますが、switch ステートメントでどのケースをユーザーに表示するかを決定するために、クラス メソッドから整数を返すのは不適切な方法であると考えられるかどうか疑問に思っていました。

例: ストラテゴでは、自分の軍の一部であるボード ピースを攻撃できないため、ユーザーが攻撃しようとすると「自分の軍を攻撃することはできません」というメッセージが表示されます。

プレイヤーがボードから飛び降りたり、スペースを移動しすぎたりするような動きが行われた場合も同様です。

これらの無効な動きにはそれぞれ固有のメッセージがありますが、プレイヤーの動きが検証される Class.cpp ファイルから出力されないようにするために、Class.cpp ファイルで 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;
}
4

1 に答える 1

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;
}
于 2015-06-18T19:13:08.720 に答える