大一寒假
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;
}