Переключите goto, не следуя через, чтобы исправить случай - PullRequest
0 голосов
/ 22 января 2019

, поэтому я пытаюсь создать монопольную игру в C #.Игра работает по большей части, однако я пытаюсь бороться с игроками, которые выходят из игры, когда они обанкротились, и это не работает, как ожидалось.Я пытаюсь использовать goto для перехода к следующему игроку, если текущий банкрот, хотя, похоже, он не подходит к правильному случаю.

    private void changeActivePlayer()
    {

        switch (activePlayerID)
        {
            case 1:
                if (player1Bankrupt == true)
                {
                    goto case 2;
                }
                else
                {
                    activePlayerID = 2;
                    break;
                }
            case 2:
                if (player2Bankrupt == true)
                {
                    goto case 3;
                }
                else
                {
                    activePlayerID = 3;
                    break;
                }
            case 3:
                if (player3Bankrupt == true)
                {
                    goto case 4;
                }
                else
                {
                    activePlayerID = 4;
                    break;
                }
            case 4:
                if (player4Bankrupt == true)
                {
                    goto case 1;
                }
                else
                {
                    activePlayerID = 1;
                    break;
                }
        }
    }

Я пыталсятестирую мой код, сразу делая двух игроков банкротами при запуске игры.Игроки 1 и 2 могут ходить по очереди нормально.Однако, как только он попадает в ход игрока 3, вместо того, чтобы следовать инструкции переключения в дело 4, а затем снова в дело 1, он вместо этого позволяет игроку 3 по-прежнему брать свой ход, и как только он заканчивается, он возвращается к ходу игрока 2 и создаети бесконечный цикл.Я понимаю, что это, вероятно, не лучший способ решить эту проблему, но любая помощь в решении этой проблемы будет высоко оценена, так как я не могу понять, что не так.Спасибо.

1 Ответ

0 голосов
/ 22 января 2019
case 2:
    if (player2Bankrupt == true)
    {
        goto case 3;
    }
    else
    {
        activePlayerID = 3;
        break;
    }

Вы входите в этот переключатель как игрок 2 и проверяете, не обанкротился ли игрок 2, а затем решаете, кто следует, основываясь на этом.

Но вам нужно проверить, не обанкротился ли игрок 3, а затем принять решение на основании этого.

case 2:
    if (player3Bankrupt == true)
    {
        goto case 3;
    }
    else
    {
        activePlayerID = 3;
        break;
    }

И аналогичные исправления для других случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...