C语言 推箱子
未使用其他库文件 因此偏向于简陋
一枚刚入门计算机的学生 还请多多指教
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int map[21][21]=//绘制 一张地图
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,0,8,0,8,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,8,1,5,0,0,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,4,3,0,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
/*
定义:
空白或者路 0
墙体 1
箱子 3
人 4
目的地 5
人+目的地 9
箱子+目的地 8
*/
void show()//将地图 从数字 转为 可视化字符
{
int i, j;
printf("\n欢迎您!以下是游戏规则:\n\n 空白或者路 为空白\n 墙体 是#\n 箱子 是*\n 人 是^\n 目的地 是.\n 人+目的地 是&\n 箱子+目的地 是$\n");
printf("\n若需移动人物,请采用W键位的上下左右进行操作\n");
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
if(map[i][j]==0) printf(" ");
else if (map[i][j]==1) printf("#");
else if (map[i][j]==3) printf("*");
else if (map[i][j]==4) printf("^");
else if (map[i][j]==5) printf(".");
else if (map[i][j]==9) printf("&");
else if (map[i][j]==8) printf("$");
}
printf("\n");
}
}
int x, y;
int local()//检测用户位置
{
int i, j;
for(i=0;i<21;i++)
{
for(j=0;j<21;j++)
{
if(map[i][j]==4||map[i][j]==9)
{
x=i;
y=j;
}
}
}
}
void jianceyidong()//检测用户输入的按键 且 进行移动
{
char dong=' ';
dong=_getch();
switch (dong)
{
case 'W':
case 'w':
if((map[x-1][y]==3||map[x-1][y]==8)&&(map[x-2][y]!=1&&(map[x-2][y]!=3&&map[x-2][y]!=8)))
{
map[x-2][y]+=3;
map[x-1][y]+=1;
map[x][y]-=4;
}
else if (map[x-1][y]==5||map[x-1][y]==0)
{
map[x-1][y]+=4;
map[x][y]-=4;
}
else if (((map[x-1][y]==3||map[x-1][y]==8)&&(map[x-2][y]==3||map[x-2][y]==8))&&map[x-3][y]==0)
{
map[x-3][y]+=3;
map[x-1][y]+=1;
map[x][y]-=4;
}
break;//向前行驶
case 'S':
case 's':
if((map[x+1][y]==3||map[x+1][y]==8)&&(map[x+2][y]!=1&&(map[x+2][y]!=3&&map[x+2][y]!=8)))
{
map[x+2][y]+=3;
map[x+1][y]+=1;
map[x][y]-=4;
}
else if (map[x+1][y]==5||map[x+1][y]==0)
{
map[x+1][y]+=4;
map[x][y]-=4;
}
else if (((map[x+1][y]==3||map[x+1][y]==8)&&(map[x+2][y]==3||map[x+2][y]==8))&&map[x+3][y]==0)
{
map[x+3][y]+=3;
map[x+1][y]+=1;
map[x][y]-=4;
}
break;//向后行驶
case 'A':
case 'a':
if((map[x][y-1]==3||map[x][y-1]==8)&&(map[x][y-2]!=1&&(map[x][y-2]!=3&&map[x][y-2]!=8)))
{
map[x][y-2]+=3;
map[x][y-1]+=1;
map[x][y]-=4;
}
else if (map[x][y-1]==5||map[x][y-1]==0)
{
map[x][y-1]+=4;
map[x][y]-=4;
}
else if (((map[x][y-1]==3||map[x][y-2]==8)&&(map[x][y-2]==3||map[x][y-2]==8))&&map[x][y-3]==0)
{
map[x][y-3]+=3;
map[x][y-1]+=1;
map[x][y]-=4;
}
break;//向左行驶
case 'D':
case 'd':
if((map[x][y+1]==3||map[x][y+1]==8)&&(map[x][y+2]!=1&&(map[x][y+2]!=3&&map[x][y+2]!=8)))
{
map[x][y+2]+=3;
map[x][y+1]+=1;
map[x][y]-=4;
}
else if (map[x][y+1]==5||map[x][y+1]==0)
{
map[x][y+1]+=4;
map[x][y]-=4;
}
else if (((map[x][y+1]==3||map[x][y+2]==8)&&(map[x][y+2]==3||map[x][y+2]==8))&&map[x][y+3]==0)
{
map[x][y+3]+=3;
map[x][y+1]+=1;
map[x][y]-=4;
}
break;//向右行驶
default:
break;
}
}
void wancheng()
{
int j, i, count=0;
for(i=0; i<21;i++)
{
for(j=0;j<21;j++)
if(map[i][j]==3) count++;
}
if (count=0) printf("You win!\n");
}
int main (void)
{
while(1)
{
show();
local();
jianceyidong();
wancheng();
system("cls");
}
system("pause");
return 0;
}