这是任务:
Project U6:Array Walker 编写一个程序,计算10x10阵列的“步行”(可爱的机器人)。该 数组包含字符(最初都是'。')。用户可以输入四个不同的方向 北,东,南,西,通过输入字符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;
}
我知道我甚至不接近解决方案,但我真的想知道如何制作它。 我无法理解如何改变&#39;。&#39;在接下来的信中,记住所有这些职位。
答案 0 :(得分: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)
我想象左上角的网格有坐标(0,0),右下角有坐标(-9,-9)。然后,创建一个在direction
为x
时终止的循环。扫描用户输入并将其存储在direction
中。然后,检查它是否为n
。如果是,请检查y
是否为0,a[x][y-1]
是否不是.
。如果是,那么打印&#34;你不能去那里&#34;并继续循环。否则,执行y--
,然后ptr
Z
,ptr=let
和[x][y-1]=ptr;
其他,ptr++;
,然后a[x][y-1]=ptr;
。之后继续循环。
现在,实现上述想法,在direction
为e
w
,s
和{{1}}时需要更改相应的变量。
答案 1 :(得分: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);
}