写了一个推箱子 运行后问题
程序代码:
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define n 10//地图大小 #define x 3//箱子数 #define y 6//位置 #define b 4//箱子 #define r 7//人 int a[n][n]={ {9,9,9,9,9,9,9,9,9,9}, {9,8,1,1,1,1,9,y,y,9}, {9,1,9,1,1,1,9,1,1,9}, {9,1,9,1,y,9,9,1,1,9}, {9,1,1,1,1,1,b+1,1,1,9}, {9,1,1,1,1,b+1,1,1,1,9}, {9,1,1+b,1,1,1,9,1,1,9}, {9,1,1,1,1,1,1,9,1,9}, {9,1,1,1,1,1,1,9,1,9}, {9,9,9,9,9,9,9,9,9,9} }; int cont; void move(int m,int g,int i,int j);//移动函数 void huatu(int a[n][n]);//画图 int system(const char*string); int main(void) { char ch; int m=1; int g=1; huatu(a); while(1) { fflush(stdin); ch=getch(); if(ch!=EOF) system("cls"); switch(ch) { case 'w': move( m, g,-1,0);break; case 's': move( m, g,1,0);break; case 'a': move( m, g,0,-1);break; case 'd': move( m, g,0,1);break; }; huatu(a); if(cont==x) printf("成功\n");}; return 0; } void move(int m,int g,int i,int j) { if(a[m+i][g+j]==9)//撞墙 a[m][g]=r+1; else if(a[m+i][g+j]==b+1&&a[m+2*i][g+2*j]==9)//箱子撞墙 a[m][g]=r+1; else if(a[m+i][g+j]==b+1&&a[m+2*i][g+2*j]==y)//箱子入位子 { a[m][g]-=r; a[m+i][g+j]-=b; a[m+i][g+j]+=r; a[m+2*i][g+2*g]+=b; m+=i; g+=j; } else if(a[m+i][g+j]==b+1&&a[m+2*i][g+2*j]==1)//推动箱子 { a[m][g]-=r; a[m+i][g+j]-=b; a[m+i][g+j]+=r; a[m+2*i][g+2*j]+=b; m+=i; g+=j; } else {a[m][g]-=r; a[m+i][g+j]+=r; m+=i; g+=j; } } void huatu(int a[n][n]) { int cont=0; int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(a[i][j]==b+y) {cont++;} switch (a[i][j]) { case 9:printf("■");break; case 8:printf("◎");break; case 5:printf("◇");break; case y:printf("○");break; case y+b:printf("※");break; case r+y:printf("※");break; default: printf("□");} };printf("\n"); }; //return cont; printf("\n\n\n"); printf("■是墙;◎是人;◇是箱子;○是目的地;"); }
以上是源码;
运行后按d没错 在左移就发生人不见了