标签:c
大一寒假 1.写代码时我犯了一个很大的错误(不然早就搞定了)把&&与||混淆了;大忌啊 2.这里实现了数字化编码 3.上72 下80 左75 右77 4.特殊图形可以到QQ拼音符号里获取 #include <stdio.h> #include <stdlib.h> #include <conio.h> #define x 1//人的位置 #define y 5 #define n 10//地图大小 int cont; void move(int a[][10],int *m,int *g,int i,int j);//移动函数 int huatu(int a[n][n]);//画图 int main(void) { int m=x; int g=y; int a[n][n]={ {9,9,9,9,9,9,9,9,9,9}, {9,0,0,0,9,1,0,3,3,9}, {9,0,0,0,9,0,0,0,3,9}, {9,0,2,0,9,9,0,0,0,9}, {9,0,0,0,9,0,9,0,0,9}, {9,0,2,9,0,0,9,0,0,9}, {9,0,0,0,0,0,0,0,0,9}, {9,0,0,0,0,0,0,0,2,9}, {9,0,0,0,9,0,0,0,0,9}, {9,9,9,9,9,9,9,9,9,9} }; int ch; huatu(a); while(1) { ch=getch(); switch(ch) { case 72: move(a,&m,&g,-1,0);break; case 80: move(a,&m,&g,1,0);break; case 75: move(a,&m,&g,0,-1);break; case 77: move(a,&m,&g,0,1);break; }; system("cls"); cont=huatu(a); if(cont==3) printf("成功\n");}; return 0; } void move(int a[][10],int *m,int *g,int i,int j) { int k=0; if(a[*m+i][*g+j]==0||a[*m+i][*g+j]==3)//人->无/位 { a[*m][*g]-=1; a[*m+i][*g+j]+=1; *m+=i;*g+=j; return; } if(a[*m+i][*g+j]==9){printf("撞墙了");return;} //人->墙 if(a[*m+i][*g+j]==2||a[*m+i][*g+j]==5)//人->箱 { if(a[*m+2*i][*g+2*j]==2||a[*m+2*i][*g+2*j]==5||a[*m+2*i][*g+2*j]==9)return;//人->箱->箱/墙 if(a[*m+2*i][*g+2*j]==0||a[*m+2*i][*g+2*j]==3)//人->箱->无/位 { if(a[*m+2*i][*g+2*j]==3)k=3;//人->箱->位 if(a[*m][*g]==1&&a[*m+i][*g+j]==2) {a[*m][*g]=0;a[*m+i][*g+j]=1;}//只有人-》只有箱子 if(a[*m][*g]==1&&a[*m+i][*g+j]==5) {a[*m][*g]=0;a[*m+i][*g+j]=4;}//只有人-》含有箱子的位置 if(a[*m][*g]==4&&a[*m+i][*g+j]==2) {a[*m][*g]=3;a[*m+i][*g+j]=1;}//含有人的位置-》只有箱子 if(a[*m][*g]==4&&a[*m+i][*g+j]==5) {a[*m][*g]=3;a[*m+i][*g+j]=4;}//含有人的位置-》含有箱子的位置 a[*m+2*i][*g+2*j]=2+k; *m+=i;*g+=j; } } printf("%d",m); } int huatu(int a[n][n]) { int count=0; int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(a[i][j]==5)count++; switch (a[i][j]) {case 9:printf("■");break; case 0:printf(" ");break; case 2:printf("□");break; case 4: case 1:printf("㊣");break; case 3:printf("※");break; case 5:printf("☆");break; default: printf("?"); } } printf("\n"); } printf("\n\n按上下左右"); return count; } #include <stdio.h> #include <stdlib.h> #include <conio.h> #define n 10//地图大小 int m=1; int g=5; int cont; void move(int a[][10],int i,int j);//移动函数 int huatu(int a[n][n]);//画图 int main(void) { int a[n][n]={ {9,9,9,9,9,9,9,9,9,9}, {9,0,0,0,9,1,0,3,3,9}, {9,0,0,0,9,0,0,0,3,9}, {9,0,2,0,9,9,0,0,0,9}, {9,0,0,0,9,0,9,0,0,9}, {9,0,2,9,0,0,9,0,0,9}, {9,0,0,0,0,0,0,0,0,9}, {9,0,0,0,0,0,0,0,2,9}, {9,0,0,0,9,0,0,0,0,9}, {9,9,9,9,9,9,9,9,9,9} }; int ch; huatu(a); while(1) { ch=getch(); switch(ch) { case 72: move(a,-1,0);break; case 80: move(a,1,0);break; case 75: move(a,0,-1);break; case 77: move(a,0,1);break; }; system("cls"); cont=huatu(a); if(cont==3) printf("成功\n");}; return 0; } void move(int a[][10],int i,int j) { int k=0; if(a[m+i][g+j]==9)printf("撞墙了"); //人-墙 if(a[m+i][g+j]==0||a[m+i][g+j]==3)//人-无/位 { a[m][g]-=1; a[m+i][g+j]+=1; m+=i;g+=j; return; } if(a[m+i][g+j]==2||a[m+i][g+j]==5)//人-箱 { if(a[m+2*i][g+2*j]==2||a[m+2*i][g+2*j]==5||a[m+2*i][g+2*j]==9)return;//人-箱-箱墙 if(a[m+2*i][g+2*j]==0||a[m+2*i][g+2*j]==3)//人-箱-无/位 { if(a[m+2*i][g+2*j]==3)k=3; if(a[m][g]==1&&a[m+i][g+j]==2){a[m][g]=0;a[m+i][g+j]=1;a[m+2*i][g+2*j]=2+k;} if(a[m][g]==1&&a[m+i][g+j]==5){a[m][g]=0;a[m+i][g+j]=4;a[m+2*i][g+2*j]=2+k;} if(a[m][g]==4&&a[m+i][g+j]==2){a[m][g]=3;a[m+i][g+j]=1;a[m+2*i][g+2*j]=2+k;} if(a[m][g]==4&&a[m+i][g+j]==5){a[m][g]=3;a[m+i][g+j]=4;a[m+2*i][g+2*j]=2+k;} m+=i;g+=j; } } printf("%d",m); } int huatu(int a[n][n]) { int count=0; int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(a[i][j]==5)count++; switch (a[i][j]) { case 9:printf("■");break; case 0:printf(" ");break; case 2:printf("□");break; case 4: case 1:printf("㊣");break; case 3:printf("※");break; case 5:printf("☆");break; default: printf("?"); } };printf("\n"); }; printf("\n\n按上下左右"); return count; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:c
原文地址:http://blog.csdn.net/h1023417614/article/details/46790515