我正在制作一个“尖峰时刻”的版本,这是一个游戏,你想要移动汽车以允许特定的汽车通过。对于我的程序,如果用户输入...让我们说GR1(G代表哪辆车要移动,R代表方向(右),1代表有多少空间朝这个方向移动)那么汽车假设为1空间向右。我注意到,对于我的程序,它只会移动汽车的一部分。我认为发生的事情是我的循环没有通过我的整个数组。一旦找到汽车的第一部分,它就会移动它,然后直接回到循环中。我该如何移动整辆车?
以下是一个示例:
--------
|GG...Y|
|P..B.Y|
|PRRB.Y>
|P..B..|
|O...TT|
|O.FFF.|
--------
//输入GR1应该给我
--------
|.GG..Y|
|P..B.Y|
|PRRB.Y>
|P..B..|
|O...TT|
|O.FFF.|
--------
//而是给我这个
--------
|G.G..Y|
|P..B.Y|
|PRRB.Y>
|P..B..|
|O...TT|
|O.FFF.|
--------
//代码a和c是用户输入
for(i=64; i>0; i--)
{
if(board[i] == a)// if user input is found checks board
{
a = i;
tmp = board[a];
board[a] = board[a+c];
//printf("The value of the swapping position is %c\n", board[a+c]);
if(board[a+c]!= '.' || board[a+c]=='|')
{
printf("Invalid move. exiting..\n");
return 0;
}
board[a+c] = tmp;
printf("the value of a is %c\n", a);
}
}
答案 0 :(得分:1)
正如您在输入G中给出的位置板[0]和板[1]正确?但是当你循环通过电路板时,你不会直到电路板[0],因为检查的条件是i> 0.因此,电路板[0]位置的G不移动。所以做出这个改变。
for(i=64; i>0; i--)
将for更改为
for(i=64; i>=0; i--)
请记住,数组索引从0到大小为1。所以检查大约64.是否是array_size-1 错误是陈述a = i
的原因if(board[i] == a)// if user input is found checks board
{
a = i;
在获得第一个匹配G时执行。因为a = i改变了一个值,所以没有检测到G的其余部分,因为在得到第一个匹配的G之后它不再是a!='G',它是a = i。
使用其他变量并避免通过a = i更改a的值。在获得匹配的'G'后,在下一次迭代开始之前恢复a ='G'的值。