#include <stdio.h>
#include<stdbool.h>
#include “get_keyboard.h”
//座位 排 每一排 多少列 7行8列 两个维度 行和列 编号索引 行[0-6] 列[0-7]
//0 路
//1 墙
//2 箱子
//3 终点
//4 小老鼠
//5 小老鼠站在终止上
//6 箱子到达终点上
//7
int g_boards[7][8] =
{
{0,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,1},
{1,3,0,1,1,2,0,1},
{1,0,3,3,2,0,0,1},
{1,0,0,1,2,0,0,1},
{1,0,0,4,0,1,1,1},
{1,1,1,1,1,0,0,0}
};
int boards[7][8];
//记录小老鼠的位置 控制移动 改变小老鼠在地图中的位置
int row = 0;
int col = 0;
int cnt = 0;//箱子 个数
//数组 容器
//一维 只有一行 有多少个取决于长度 编号索引 [0-数组长度-1]
//二维 行和列
void showboard(){
system(“clear”);
int i=0,j=0;
for(i=0;i<7;i++){
for(j=0;j<8;j++){
switch(boards[i][j]){
case 0:printf(" “);break;
case 1:printf(”#");break;
case 6:
case 2:printf("@");break;
case 3:printf(“o”);break;
case 5:
case 4:printf("$");break;
}
}
printf("\n");
}
}
void move(int nrow,int ncol,int nnrow,int nncol){
int body=boards[nrow][ncol];
switch(boards[nrow][ncol]){
case 0://前方为路
boards[row][col]=boards[row][col]4?0:3;
row=nrow;
col=ncol;
boards[row][col]=4;
break;
case 6:
case 2:{//前方为箱
int nn=boards[nnrow][nncol];
if(nn0||nn3){
if(nn0){
boards[nnrow][nncol]=2;
if(body6){
cnt++;
}
}else if(nn3){
boards[nnrow][nncol]=6;
if(body!=6){
cnt–;
}
}
boards[row][col]=boards[row][col]==4?0:3;
row=nrow;
col=ncol;
boards[row][col]=(body==2)?4:5;
}
break;
}
case 3://前方为终点
boards[row][col]=boards[row][col]==4?0:3;
row=nrow;
col=ncol;
boards[row][col]=5;
break;
/* case 6://箱子在终点上
if(boards[nnrow][nncol]==0){
boards[nnrow][nncol]=2;
boards[row][col]=boards[row][col]==4?0:3;
row=nrow;
col=ncol;
boards[row][col]=5;
}else if(boards[nnrow][nncol]==3){
boards[nnrow][nncol]=6;
boards[row][col]=boards[row][col]==4?0:3;
row=nrow;
col=ncol;
boards[row][col]=5;
}
break;*/
}
}
void init(){
int i=0,j=0;
for(i=0;i<7;i++){
for(j=0;j<8;j++){
if(boards[i][j]==4){
row=i;
col=j;
}
if(boards[i][j]2){
cnt++;
}
}
}
}
void reset(){
int i=0,j=0;
cnt=0;
for(i=0;i<7;i++){
for(j=0;j<8;j++){
boards[i][j]=g_boards[i][j];
}
}
init();
}
void start(){
while(true){
showboard();
if(cnt0){
printf(“congratulation!\n”);
exit(0);
}
int opt=get_keyboard();
switch(opt){
case KEY_UP:move(row-1,col,row-2,col);break;
case KEY_DOWN:move(row+1,col,row+2,col);break;
case KEY_LEFT:move(row,col-1,row,col-2);break;
case KEY_RIGHT:move(row,col+1,row,col+2);break;
case KEY_ENTER:reset();break;
case KEY_q:return;break;
}
}
}
int main(){
reset();
start();
return 0;
}