一、地图:
二、重点难点:
1)小人在移动的时候,如何判断下一个是箱子
2)小人推箱子移动,箱子移动的下一个位置是路
3)要记录箱子的位置、小人的位置、箱子要移动的下一个位置
4)计算箱子的下一个位置
5)10*10地图,10*11存储
三、伪代码的实现
1)定义变量,保存地图,位置信息
2)打印地图
3)提示玩法
4)编写控制程序
5)接收用户输入的方向数据
6)判断小人移动的方向
7)判断小人将要移动的位置是否是路
a.如果是路,则移动小人:小人与路交换位置
b.不是路,判断是否是箱子
c.如果是箱子,计算下一步要移动的位置
d.在判断下一个位置是否是路
e.如果是路,则小人推箱子移动
核心代码:箱子和下一个位置交换
小人与箱子位置交换
重新调整小人与箱子的位置
f.不是箱子,什么也不做
8)重新绘制地图
9)判断是否推出来(如果箱子y方向的值==9)
四、具体实现
#include <stdio.h>
#define row 10
#define col 11 //包含\0
//打印地图
void printMap(char map[row][col]){
for (int i = 0; i < row; i ++) {
printf("%s\n",map[i]);
}
}
void swithPosition(char map[row][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;
}
/*核心代码:箱子和下一个位置交换
小人与箱子位置交换
重新调整小人与箱子的位置
*/
int main(int argc, const char * argv[])
{
//1)定义变量:保存地图,位置信息
char map[row][col] ={
"##########",
"#O ### #",
"# X### #",
"# #",
"###### #",
"# ### #",
"# #",
"# ######",
"# ",
"##########"
};
//小人当前位置
int currentManX = 1;
int currentManY = 1;
//小人下个位置
int nextManX = currentManX;
int nextManY = currentManY;
//箱子的当前位置
int currentBoxX = 2;
int currentBoxY = 2;
//箱子的下一个位置
int nextBoxX = currentBoxX;
int nextBoxY = currentBoxY;
//用户输入的方向
char direction ;//方向
char load = ' ';//路
char box = 'X';//箱子
//2)打印地图
printMap(map);
//3)提示玩法
printf("游戏玩法,w 向上 s 向左 x 向下 f向右,q 退出\n");
//4)编写控制程序
while(1){
//5)接收用户输入的方向数据
scanf("%c",&direction);
getchar();//获取一个字符
//防止穿墙
nextManX = currentManX;
nextManY = currentManY;
//6)判断小人移动的方向
switch (direction) {
case 'W':
case 'w': //上
nextManX --;
break;
case 'S':
case 's'://下
nextManX ++;
break;
case 'A':
case 'a'://左
nextManY --;
break;
case 'D':
case 'd':
nextManY ++;
break;
case 'q':
case 'Q':
printf("游戏正在推出....");
printf("游戏已经退出!");
return 0;
break;
}
//7)判断小人将要移动的位置是否是路
//a.如果是路,则移动小人:小人与路交换位置
//b.不是路,判断是否是箱子
//c.如果是箱子,计算下一步要移动的位置
//d.在判断下一个位置是否是路
//e.如果是路,则小人推箱子移动
//f.不是箱子,什么也不做
//判断是否是路
if (map[nextManX][nextManY] == load) {
//小人与路交换位置
swithPosition(map,currentManX,currentManY,nextManX,nextManY);
//调整小人的位置
currentManX = nextManX;
currentManY = nextManY;
}else if (map[nextManX][nextManY] == box) {//如果是箱子,
//计算下一步要移动的位置
nextBoxX = currentBoxX + (currentBoxX - currentManX);
nextBoxY = currentBoxY + (currentBoxY - currentManY);
if(map[nextBoxX][nextBoxY] == load){
//箱子与路交换位置
swithPosition(map,currentBoxX,currentBoxY,nextBoxX,nextBoxY);
//小人与路交换位置
swithPosition(map,currentManX,currentManY,currentBoxX,currentBoxY);
//调整小人的位置
currentManX = nextManX;
currentManY = nextManY;
//调整箱子的位置
currentBoxX = nextBoxX;
currentBoxY = nextBoxY;
}
}
//8)重新绘制地图
printf("\n");
printMap(map);
//9)判断是否推出来(如果箱子y方向的值==9)
if (currentBoxY == col - 2) {
printf("成功了,您推出来了");
break;
}
}
printf("\n");
return 0;
}
—————————————————–
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
请先拍 购买地址, 下载请用百度盘
目录如下:
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)
01高级架构师四十二个阶段高内容:
—————————————————–