首页 > 解决方案 > 数组 c 编程中的随机探索

问题描述

我创建了一个充满字母的数组,我一直坚持实现单元格在 8 个方向之一(N、NE、E、SE、S、SW、W、NW)中随机移动的功能。我已经为基本的 4 个方向使用了 switch 语句,但无法弄清楚其他 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;
        }

标签: c

解决方案


您可以简单地结合其他两种情况的条件和结果。这是 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' ...

在其他情况下也是如此。


推荐阅读