Случайное исследование в Array c программированием - PullRequest
0 голосов
/ 28 февраля 2019

Я создал массив, состоящий из букв, и я застрял в реализации функции для случайного перемещения ячейки в одном из 8 направлений (N, NE, E, SE, S, SW, W, NW).Я использовал оператор switch для основного 4 направления, но не смог понять остальные 4 направления.

void randomStep()
{
    if ((island[ro][co + 1] != ('B'||'L') || co == NUMROWS - 1 )&& (island[ro + 1][co] != ('B'||'L') || ro == NUMCOLS -1) && (island[ro - 1][co] != ('B'||'L') || ro == 0)
        && (island[ro][co - 1] != ('B'||'L') || co == 0))
        break;
    int direction = rand() % 8;
    switch (direction) {
    case 0: if (co < NUMROWS - 1 && island[ro][co + 1] == 'B'||'L'){  //move right
            co++;
            break;
        }
    case 1: if (ro < NUMCOLS -1 && island[co + 1][ro] == 'B'||'L') {  //move down
            ro++;
            break;
        }
    case 2: if (ro > 0 && island[ro - 1][co] == 'B'||'L'){  //move up
            ro--;
            break;
        }
    case 3: if (co > 0 && island[ro][co - 1] == 'B'||'L') { //move left
            co--;
            break;
        }

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы можете переместить части своего кода в функции:

bool mayGoUp(int ro, int co)
{
    return ro > 0;
}

bool mayGoDown(int ro, int co)
{
    return ro < NUMROWS - 1;
}

bool mayGoLeft(int ro, int co)
{
    return co > 0;
}

bool mayGoRight(int ro, int co)
{
    return co < NUMCOLS - 1;
}

Примечание: я немного изменил логику: с co < NUMROWS - 1 до co < NUMCOLS - 1;не уверен, какой из них правильный.

Затем вы можете объединить их простым способом:

bool mayGoUpLeft(int ro, int co)
{
    return mayGoUp(ro, co) && mayGoLeft(ro, co);
}

Затем, используя их в своем коде, ваш код станет понятнее:

    switch (direction) {
    case 0:
        if (MayGoRight(ro, co) && island[ro][co + 1] == ...
        {  //move right
            co++;
            break;
        }
...
    case 99:
        if (MayGoUpRight(ro, co) && ...
        {  // move up and right
            ro--;
            co++;
            break;
        }
0 голосов
/ 28 февраля 2019

Вы можете просто объединить условия и результаты двух других случаев.Вот пример для NW (влево и вверх)

case 4: if (ro > 0 && co > 0 && island[ro - 1][co - 1] == 'B'||'L') { //move up & left
            ro--;
            co--;
        }
        break;

Обратите внимание, что я переместил положение break; на вне кодового блока if.

Я думаю, что у вас также может быть ошибка с

... island[ro - 1][co - 1] == 'B'||'L' ...

, которая, я думаю, должна быть

... island[ro - 1][co - 1] == 'B' || island[ro - 1][co - 1] == 'L' ...

, и аналогично в других случаях.

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