阵列C编程中的随机探索

  • 本文关键字:随机 探索 编程 阵列 c
  • 更新时间 :
  • 英文 :


我已经创建了一个装满字母的数组,并且我坚持实现该单元的功能,以随机移动8个方向之一(n,ne,ne,e,e,se,s,s,s,SW,W,NW)。我使用了基本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;
        }

您可以简单地结合另外两种情况的条件和结果。这是西北(左起)的示例

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' ...

,在其他情况下类似。

您可以将代码的一部分移至函数:

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 - 1co < 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;
        }

最新更新