#include <stdio.h>
#include <getch.h>
#include <stdlib.h>
??获取方向键的功能:使用头文件?getch.h?中的?getch?函数
??1.在widows中把getch.h的头文件放入共享文件夹
??2.终端进入共享文件夹??
??cd?/media/sf_share/
??3.复制头文件到标准库:
??sudo?cp?getch.h?/usr/include/
??4.加读权限
??sudo?chmod?+r?/usr/include/getch.h
开始程序
一.定义地图
1,确定数字与字符的对应关系
?????目标点:0
?????路:1
?????人:2
?????箱子:3
?????墙壁:4
? ?然后定义地图
?//定义地图 ? 8 ? ? char arr[8][8]={ ? 9 ? ? ? ? {1,1,4,4,4,4,1,1}, ?10 ? ? ? ? {1,1,4,0,0,4,1,1}, ?11 ? ? ? ? {1,4,4,1,0,4,4,1}, ?12 ? ? ? ? {1,4,1,1,3,0,4,1}, ?13 ? ? ? ? {4,4,1,3,1,1,4,4}, ?14 ? ? ? ? {4,1,1,4,3,3,1,4}, ?15 ? ? ? ? {4,1,1,2,1,1,1,4}, ?16 ? ? ? ? {4,4,4,4,4,4,4,4}, ?17 ? ? ? ? };
?2,定义人的坐标
//定义返回值数组 ? ? ? ? ? int a[300]={}; ? ? ? ? int i = 0; ? ? ? ? //定义初始坐标 ? ? ? ? int x=6,y=3; ? ? ? ? //定义步数 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int step=0; ?
3,如果没有人或箱子在目标点上就重置目标点,要放在死循环前面
?for(;;) ? ? ? ? { ? ? ? ? ? ? if(1== arr[1][3]) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? arr[1][3]=0; ? ? ? ? ? ? } ? ? ? ? ? ? if(1== arr[1][4]) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? arr[1][4]=0; ? ? ? ? ? ? } ? ? ? ? ? ? if(1== arr[2][4]) ? ? ? ? ? ? { ?? ? ? ? ? ? ? ? ? arr[2][4]=0; ? ? ? ? ? ? } ? ? ? ? ? ? if(1==arr[3][5]) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? arr[3][5]=0; ? ? ? ? ? ? } ?
4.清理屏幕,进入死循环,显示地图
//清理屏幕 ? ? ? ? ? ? system("clear"); ? ? ? ? ? ? for(int i=0;i<8;i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? for(int j=0;j<8;j++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? switch(arr[i][j]) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? case 0: printf("* ");break; ? ? ? ? ? ? ? ? ? ? ? ? case 1: printf(" ?");break; ? ? ? ? ? ? ? ? ? ? ? ? case 2: printf("@ ");break; ? ? ? ? ? ? ? ? ? ? ? ? case 3: printf("# ");break; ? ? ? ? ? ? ? ? ? ? ? ? case 4: printf("& ");break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? printf("\n"); ? ? ? ? ? ? } ?
5.判断是否完成游戏,
//判断是否到达出口 ? ? ? ? ? ? if(3 == arr[1][3] && 3==arr[1][4] && 3==arr[2][4] && 3==arr[3][5]) ? ? ? ? ? ? { ?? ? ? ? ? ? ? ? ? printf("用了%d步\n",step); ? ? ? ? ? ? ? ? printf("恭喜完成"); ? ? ? ? ? ? ? ? return 0; ? ? ? ? ? ? } ?
6.获取返回键
//获取方向键并处理 ? ? ? ? ? ? switch(getch()) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? //利用a[i]记录上次的行动,按返回建127去获得之前的a[i] ? ? ? ? ? ? ? ? case 127: ? ? ? ? ? ? ? ? if(i>0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? i--; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(1==a[i]) ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x+1][y]=2; ? ? ? ? ? ? ? ? ? ? x++; ? ? ? ? ? ? ? ? ? ? step--; ? ? ? ? ? ? ? ? ? ? a[i]=0; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(11==a[i]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=3; ? ? ? ? ? ? ? ? ? ? arr[x+1][y]=2; ? ? ? ? ? ? ? ? ? ? arr[x-1][y]=1; ? ? ? ? ? ? ? ? ? ? x++; ? ? ? ? ? ? ? ? ? ? step--; ? ? ? ? ? ? ? ? ? ? a[i]=0; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(2==a[i]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x-1][y]=2; ? ? ? ? ? ? ? ? ? ? x--; ? ? ? ? ? ? ? ? ? ? step--; ? ? ? ? ? ? ? ? ? ? a[i]=0; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(22==a[i]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=3; ? ? ? ? ? ? ? ? ? ? arr[x+1][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x-1][y]=2; ? ? ? ? ? ? ? ? ? ? x--; ? ? ? ? ? ? ? ? ? ? step--; ? ? ? ? ? ? ? ? ? ? a[i]=0;
? ? ? ? ? ? ? ? ? ?} ? ? ? ? ? ? ? ? if(3==a[i]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x][y-1]=2; ? ? ? ? ? ? ? ? ? ? y--; ? ? ? ? ? ? ? ? ? ? step--; ? ? ? ? ? ? ? ? ? ? a[i]=0; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(33==a[i]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=3; ? ? ? ? ? ? ? ? ? ? arr[x][y+1]=1; ? ? ? ? ? ? ? ? ? ? arr[x][y-1]=2; ? ? ? ? ? ? ? ? ? ? y--; ? ? ? ? ? ? ? ? ? ? step--; ? ? ? ? ? ? ? ? ? ? a[i]=0; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(4==a[i]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x][y+1]=2; ? ? ? ? ? ? ? ? ? ? y++; ? ? ? ? ? ? ? ? ? ? step--; ? ? ? ? ? ? ? ? ? ? a[i]=0; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(44==a[i]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=3; ? ? ? ? ? ? ? ? ? ? arr[x][y-1]=1; ? ? ? ? ? ? ? ? ? ? arr[x][y+1]=2; ? ? ? ? ? ? ? ? ? ? y++; ? ? ? ? ? ? ? ? ? ? step--; ? ? ? ? ? ? ? ? ? ? a[i]=0; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? break; ?
7,获取方向键
向上:如果上一格是目标点或者路,上一格变成人物,自身格子变成路
如果上一格是箱子,且上上格不是箱子或墙壁,箱子和人物都往上一个,自身格变成路
case 183: ? ? ? ? ? ? ? ? if(0==arr[x-1][y] || ?1==arr[x-1][y]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x-1][y]=2; ? ? ? ? ? ? ? ? ? ? x-=1; ? ? ? ? ? ? ? ? ? ? step++; ? ? ? ? ? ? ? ? ? ? a[i]=1; ? ? ? ? ? ? ? ? ? ? i++; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else if(3==arr[x-1][y] && 4!=arr[x-2][y] && 3!=arr[x-2][y]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x-2][y]=arr[x-1][y]; ? ? ? ? ? ? ? ? ? ? arr[x-1][y]=2; ? ? ? ? ? ? ? ? ? ? x--; ? ? ? ? ? ? ? ? ? ? step++; ? ? ? ? ? ? ? ? ? ? a[i]=11; ? ? ? ? ? ? ? ? ? ? i++; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? break;?
}
向下同理
case 184: ? ? ? ? ? ? ? ? if(0==arr[x+1][y] || 1==arr[x+1][y]) ? ? ? ? ? ? ? ? { ?? ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x+1][y]=2; ? ? ? ? ? ? ? ? ? ? x++; ? ? ? ? ? ? ? ? ? ? step++; ? ? ? ? ? ? ? ? ? ? a[i]=2; ? ? ? ? ? ? ? ? ? ? i++; ? ? ? ? ? ? ? ? } ?? ? ? ? ? ? ? ? ? else if(3==arr[x+1][y] && 4!=arr[x+2][y] && 3!=arr[x+2][y]) ? ? ? ? ? ? ? ? { ?? ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x+2][y]=arr[x+1][y]; ? ? ? ? ? ? ? ? ? ? arr[x+1][y]=2; ? ? ? ? ? ? ? ? ? ? x++; ? ? ? ? ? ? ? ? ? ? step++; ? ? ? ? ? ? ? ? ? ? a[i]=22; ? ? ? ? ? ? ? ? ? ? i++; ? ? ? ? ? ? ? ? } ?? ? ? ? ? ? ? ? ? break; ?
向右同理
case 185: ? ? ? ? ? ? ? ? if(0==arr[x][y+1] || 1==arr[x][y+1]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x][y+1]=2; ? ? ? ? ? ? ? ? ? ? y++; ? ? ? ? ? ? ? ? ? ? step++; ? ? ? ? ? ? ? ? ? ? a[i]=3; ? ? ? ? ? ? ? ? ? ? i++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else if(3==arr[x][y+1] && 4!=arr[x][y+2] && 3!=arr[x][y+2]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x][y+2]=arr[x][y+1]; ? ? ? ? ? ? ? ? ? ? arr[x][y+1]=2; ? ? ? ? ? ? ? ? ? ? y++; ? ? ? ? ? ? ? ? ? ? step++; ? ? ? ? ? ? ? ? ? ? a[i]=33; ? ? ? ? ? ? ? ? ? ? i++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? break; ?
向左同理
?case 186: ? ? ? ? ? ? ? ? if(0==arr[x][y-1] || 1==arr[x][y-1]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x][y-1]=2; ? ? ? ? ? ? ? ? ? ? y--; ? ? ? ? ? ? ? ? ? ? step++; ? ? ? ? ? ? ? ? ? ? a[i]=4; ? ? ? ? ? ? ? ? ? ? i++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else if(3==arr[x][y-1] && 4!=arr[x][y-2] && 3!=arr[x][y-2]) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? arr[x][y]=1; ? ? ? ? ? ? ? ? ? ? arr[x][y-2]=arr[x][y-1]; ? ? ? ? ? ? ? ? ? ? arr[x][y-1]=2; ? ? ? ? ? ? ? ? ? ? y--; ? ? ? ? ? ? ? ? ? ? step++; ? ? ? ? ? ? ? ? ? ? a[i]=44; ? ? ? ? ? ? ? ? ? ? i++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? break; ?
这样代码就结束了,运行
?乱走一下,
按删除键返回,如上图?
也能多次返回,如下图
?通关提示步数
?
?
|