2014-10-26 128 views
-2

这里是任务:阵列沃克C语言

项目U6:数组沃克 收件,计算跨越10×10阵列的“行走”(一个可爱的机器人的)中的程序。 数组包含字符(全部最初为'。')。通过输入字符n,e,s,w来控制步行,用户可以输入北,东,南,西四个不同方向 。如果用户 进入x程序退出。在每个方向命令之后,打印阵列的步骤以从A到Z开始的大写字母显示。我们使用A作为起始点, ,其余25个字母表示步骤。使用字母Z表示一个步骤后,我们环绕并从A开始。为了让步行更有趣,用户不允许重新访问某个位置。在这种情况下,程序不打印阵列,但 打印出“你不能去那里!” - 是的,你可以陷入困境。 在左上角开始(位置0,0):

多数民众赞成我到目前为止有:

#include <stdio.h> 
#include <conio.h> 
#define M 26 
#define N 10 
#define K 10 

int main() 
{ 
    char A[N][K],direction; 
    char let[26] =  {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 
    int i=0,j=0,m=0; 
    for(i=0; i<N; ++i) 
     for(j=0; j<K; ++j) 
      A[i][j]='.'; 
    for(i=0; i<N; ++i) 
    { A[0][0]=let[0]; 
     for(j=0; j<K; ++j) 
      printf("%c",A[i][j]); 
      printf("\n"); 
    } 
    getch(); 

    scanf("%c",&direction); 
     for(m=1;m<26;m++){ 
      if (direction=='E') 

      for(i=0; i<N; ++i){  //i don't think that the way that im thinking here is rigth 
       A[0][0]=let[0]; 
       m=i+1; 
       A[m][j++]=let[m]; 
      for(j=0; j<K; ++j) 
       printf("%c",A[i][j]); 
       printf("\n");} 
       return direction; 
      } 

    return 0; 
} 

我知道,我还没有接近解决方案,但我想RLY知道如何做到这一点。 我无法理解如何更改'。'写下一封信,记住所有的职位。

+0

'm = i + 1'在当前位置看起来非常错误。你应该使用'i + 1'而不是'm'。 – 2014-10-26 15:39:11

+0

另外,“返回方向”(你向谁回来)有什么意义? – 2014-10-26 15:40:34

回答

0

我做到了!

#include <stdio.h> 
#include <conio.h> 
#include <ctype.h> 
#define M 26 
#define N 10 
#define K 10 

int main() 
{ 
    char A[N][K],direction; 
    char let[M] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 
    char start='A'; 
    int x=0,y=0; 
    int i=0,j=0,m,k; 

    for(i=0; i<N; ++i){ 
     for(j=0; j<K; ++j) 
      A[i][j]='.';} 

     for(i=0; i<N; ++i){ 
       A[0][0]=let[0]; 
      for(j=0; j<K; ++j) 
       printf("%c",A[i][j]); 
       printf("\n"); 
        } 

    k=0; 
    A[x][y]=let[k]; 

if (direction == 's' && x==9 || direction=='e' && y==9 || direction=='w' && y==0 || direction=='n' && x==0){ 
      printf("You cannot go there!\n");} 

do{ 
     if (direction =='x'){break;} 

     if (direction!='\n'){ 
      printf("Enter direction command: ");} 
      direction=getchar(); 

     if (direction=='s' && A[x+1][y]!='.'){ 
       printf("You cannot go there!\n"); 

     }else if(direction=='s') { 
       x++; 
       k++; 
       A[x][y]=let[k]; 
        for(i=0; i<N; ++i){ 
         for(j=0; j<K; ++j) 
          printf("%c",A[i][j]); 
          printf("\n");} 
     } 

     if (direction=='e' && A[x][y+1]!='.'){ 
       printf("You cannot go there!\n"); 

     }else if (direction=='e'){ 
      y++; 
      k++; 
      A[x][y]=let[k]; 
       for(i=0; i<N; ++i){ 
         for(j=0; j<K; ++j) 
          printf("%c",A[i][j]); 
          printf("\n");} 
     } 

     if (direction=='w' && A[x][y-1]!='.'){ 
       printf("You cannot go there!\n"); 

     }else if (direction=='w'){ 
      y--; 
      k++; 
      A[x][y]=let[k]; 
        for(i=0; i<N; ++i){ 
         for(j=0; j<K; ++j) 
          printf("%c",A[i][j]); 
          printf("\n");} 

     } 

     if (direction=='n' && A[x-1][y]!='.'){ 
       printf("You cannot go there!\n"); 

     }else if (direction=='n'){ 
      x--; 
      k++; 
      A[x][y]=let[k]; 
        for(i=0; i<N; ++i){ 
         for(j=0; j<K; ++j) 
          printf("%c",A[i][j]); 
          printf("\n");} 
      } 
     } while (k!=26); 
    } 
1

我不会给你整个代码,只是给你一些提示和提示。

首先,拨打

A[0][0]=let[0]; 

一次main。然后开始时,使用创建一个名为dispgrid或类似的东西函数

for(i=0; i<N; ++i) 
    { 
     for(j=0; j<K; ++j) 
      printf("%c",A[i][j]); 
      printf("\n"); 
    } 

在它的身上。请记住,

char A[N][K]; 

应该声明为全局的,因为其他函数也需要它。你将需要一个指针来遍历字母数组。所以申报

char *ptr=let; 

您还需要两个变量,表示当前x和机器人的y坐标。所以声明

int x=0,y=0; //starting at position (0,0) 

我想象左上角有coodinates(0,0)和右下角有坐标(-9,-9)的网格。然后,创建一个当directionx时终止的循环。扫描用户输入并将其存储在direction中。然后,检查它是否是n。如果是,请检查y是否为0,如果a[x][y-1]不是.。如果是,则打印出“你不能去那里”并继续循环。否则,请执行y--,然后如果ptrZ,ptr=let[x][y-1]=ptr; else,ptr++;然后a[x][y-1]=ptr;。之后继续循环。

现在,执行上面的想法,当directione,ws时改变各个变量。

+0

非常感谢您的帮助!没有你的提示,我不会这样做,先生。 – 2014-10-27 16:36:09

+0

完成您的任务的好工作! :) – 2014-10-27 16:40:33