2014-03-02 36 views
2

我正在制作一个版本的“尖峰时刻”,这是一个游戏,您可以在其中移动汽车以便让特定的汽车通过。对于我的程序,如果用户输入......比如说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

什么是a和c在这里。从你的例子中,我假设a ='G'和c ='1'。 'GR1'中'R'的输入变量在哪里。 – Joe

+0

b ='R'的意思是“正确的”,但在我将用户的输入转移到该车的位置之前,我想确保我可以让汽车一起移动。所以,我没有把代码放在变量b中。 – Funbar

回答

1

正如您在输入G中给出的位置板[0]和板[1]右边?但是当你通过电路板循环时,由于被检查的条件是i> 0,所以你不会直到board [0]。因此G [board]中的G不移动。所以做这个改变。

for(i=64; i>0; i--) 

用于向

for(i=64; i>=0; i--) 

记住数组索引变化从0做大小-1。所以请检查大约64.是否是array_size-1。
错误是语句的原因= I

if(board[i] == a)// if user input is found checks board 
    { 
     a = i; 

获得第一匹配g当被执行。因为a = i会改变a的值,所以G的其余部分不会被检测到,因此在获得第一个匹配后,它就是a = i了。

使用其他变量并避免更改a的值= I。或者在获得匹配的'G'后在下一次迭代开始之前恢复a ='G'的值。

+0

事实上,如果我通过数组直到位置[0]搜索并不重要。所以,我可能一直很模糊,但是如果'G'位于[10]和[12]中,那么这并不重要,因为我的程序目前只处理[12]。我试图让我的代码能够在输入用户输入 – Funbar

+0

@ user3370224的一个命令后,移动[10]和[12]的位置。得到错误的原因是当获得第一个匹配的G时执行的语句a = i。因为a = i会改变a的值,所以G的其余部分不会被检测到,因此在得到第一个匹配后,它就不再是a = i了!='G'。 – LearningC