本帖最后由 你说呢 于 2015-7-17 17:59 编辑
#include<stdio.h>
#define Row 10
#define Col 11
int main(){
void printMap(char map[][Col]);
void move(char map[][Col],int oldX,int oldY,int newX, int newY);
//******** 定义变量
// 定义地图
char map[Row][Col]={
"##########",
"#0 #### #",
"# X#### #",
"# #",
"###### #",
"# #### #",
"# #",
"# ######",
"# ",
"##########"
};
// 定义变量保存位置信息
//小人的当前信息
int personX=1,personY=1;
// 箱子的位子
int boxX=2,boxY=2;
char box='X';
// 小人下移动的一个位置信息
int personNextX=1,personNextY=1;
// 定义变量接受用户输入的方向
char direction,ch,street=' ';
//***** 打印地图
// 打印一边地图
printMap(map);
// 编写循环控制程序
printf("请输入移动方向:w.上 s.下 a.左 d.右 q.退出\n");
// 接受用户的输入方向
// 根据用户输入的方向判断如何移动
// 判断方向
while(1){
// 输入方向
scanf("%c",&direction);scanf("%c",&ch);
// 防止穿墙
personNextX=personX;
personNextY=personY;
switch(direction){
case 'w':
case 'W':
personNextX--;break;
case 's':
case 'S':
personNextX++;break;
case 'A':
case 'a':
personNextY--;break;
case 'D':
case 'd':
personNextY++;break;
case 'Q':
case 'q':
printf("程序正在退出.....\n");
printf("程序已经退出!\n");
return 0;
default:
break;
}
// 先判断小人的下一个位置是否是路
if(map[personNextX][personNextY]==street){
move(map,personX,personY,personNextX,personNextY);
personX=personNextX;
personY=personNextY;
}else //不是路那么是不是箱子
if(map[personNextX][personNextY]==box){
int boxNextX=boxX+(boxX-personX);
int boxNextY=boxY+(boxY-personY);
// 箱子下面是不是路
if(map[boxNextX][boxNextY]==street){
move(map,boxX,boxY,boxNextX,boxNextY);
move(map,personX,personY,boxX,boxY);
personX=personNextX;
personY=personNextY;
boxX=boxNextX;
boxY=boxNextY;
}
}
printMap(map);
if(boxY==Col-2){
printf("喔喔!!你竟然出来了!\n");
break;
}
}
}
//打印地图
void printMap(char map[][Col]){
for(int i=0;i<Row;i++){
printf("%s\n",map); }
}
//move 小球移动位置
void move(char map[][Col],int oldX,int oldY,int newX, int newY){
char temp ;
temp = map[oldX][oldY];
map[oldX][oldY] = map[newX][newY];
map[newX][newY] = temp;
}
|
|