После первого выбора в коммутационном кейсе используется один и тот же кейс, как его сбросить или очистить перед использованием для правильной работы? - PullRequest
0 голосов
/ 17 января 2019

Switch-case работает правильно с первого раза, но продолжает использовать один и тот же первоначальный выбор снова и снова.Мне нужно сбросить его перед запуском этого блока кода, чтобы при необходимости он выбирал другой (или такой же) случай.

Это для школьного проекта, где лиса преследует кролика.Я должен кодировать кролика.У меня есть переключатель, разработанный таким образом, чтобы в качестве аргумента включался его близость к кусту.Это определяет, что кролик будет делать.Он работает правильно в первый раз, но продолжается с тем же случаем после его перемещения, и предыдущий случай снова запускается на кроликах в следующем ходу.После некоторого исследования я обнаружил, что должен завершить его в проверке состояния с некоторыми флагами, чтобы выйти из цикла, и я сделал, но та же проблема продолжается.

if (noMansLand == false) {
  needDirection = true;
  do{
      switch (directionToBush) {
        //N-------------------------------------------------------
        case 0:
            if (look(7) == Model.BUSH) {
                if (distance(7) == 1) {
                    currentDirection = 6;
                    if (look(6) == Model.BUSH) {
                        if (distance(6) == 1) {
                            currentDirection = 5;
                        }
                    }
                }
            } else {
                //WANTED DIRECTION
                currentDirection = 7;
            }
            //FOX ESCAPE PLAN
            //code...
            needDirection = false;
            return currentDirection;
        //E-------------------------------------------------------
        case 2:
            //similar code...
        //S--------------------------------------------------------
        case 4:
            //similar code...
        //W--------------------------------------------------------
        case 6:
            //similar code...
     }while(needDirection == true);
 }

Существует еще много кода, и я буду счастливпоказать все это для помощи.Игра работает на сеточном интерфейсе, где лиса и кролик по очереди «смотрят» и движутся по одной сетке в 1 из 6 направлений (в моем фрагменте кода переключателя я показываю только 4 кардинала).Мой кролик ищет ближайший кустарник, чтобы заставить лис преследовать его, пока не пройдет максимум поворотов.Кролик попадает в самый близкий кустарник и, достигнув 1 расстояния от куста, поворачивает «noMansLand» в «ложь» и запускает блок переключения.Первый поворот этого работает точно так, как написано, и кролик движется в правильном направлении, но на следующем повороте кроликов он продолжается в том же случае, как если бы кустарник находился в том же направлении, в котором он был в последнем повороте перед движением.Я предполагаю, что это сохраняет старое направление с делом переключателя, но я не знаю, как сбросить или сбросить эти данные.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Было бы полезно, если бы вы могли показать, где инициализируется переменная регистра переключателя directionToBush и как она изменяется в регистре коммутатора. Пока вы продолжаете изменять эту переменную в зависимости от ситуации, все будет в порядке. Там не нужно ничего сбрасывать. Удачи!

0 голосов
/ 17 января 2019
switch (directionToBush) {

directionToBush равно 0?

где это изменилось? Не в вашем фрагменте! Если он не изменяется, он остается равным 0 во всех итерациях цикла.

...