我创建了一个由字母组成的数组,我坚持要实现该函数以使其在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;
}
答案 0 :(得分:1)
您可以简单地合并其他两种情况的条件和结果。这是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' ...
,在其他情况下类似。
答案 1 :(得分:0)
您可以将部分代码移入函数中
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;
}