1.调整控制台窗口大小
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
int main()
{
system("mode con lines=15 cols=25");//调整窗口大小
return 0;
}
2.清掉控制台屏幕上的字
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
int main()
{
system("mode con lines=15 cols=25");
system("cls");//清屏操作
getchar();//不让程序退出,等待读字符
return 0;
}
3. 枚举类型定义地图中空地,墙,目的地,箱子,玩家
enum Mine
{
SPACE, //空地
WALL,//墙
DEST, //目的地
BOX, //箱子
PLAYER//玩家
};
4.定义二维数组做地图,并且打印出来看看效果
//定义一个二维数组,做地图 空地0 墙1 目的地2 箱子3 玩家4 箱子在目的地 5 玩家在目的地6,与枚举类型对应上了
int map[10][10] =
{
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,1,2,1,1,1,1,0},
{0,1,1,1,3,0,3,2,1,0},
{0,1,2,3,4,0,1,1,1,0},
{0,1,1,1,1,3,1,0,0,0},
{0,0,0,0,1,2,1,0,0,0},
{0,0,0,0,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}
};
void printmap()
{for(int i=0;i<10;i++)
{
for (int j = 0; j < 10; j++)
{
printf("%d ", map[i][j]);
}
printf("\n");
}
}
int main()
{
while (1)
{
system("mode con lines=15 cols=25");
system("cls");//清屏操作
printmap();
getchar();//不让程序退出,等待读字符
}
return 0;
}
5.修改printmap函数为gamedraw()函数
void gamedraw()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
switch (map[i][j])
{case SPACE://如果二维数组元素为0
printf(" "); //空地 //一个中文字符相当于二个英文字符
break;
case WALL://如果二维数组元素为1
printf("■");//墙
break;
case DEST://如果二维数组元素为2
printf("☆");//目的地
break;
case BOX://如果二维数组元素为3
printf("□");//箱子
break;
case PLAYER://如果二维数组元素为4
printf("♀");//玩家
break;
case PLAYER+DEST://如果二维数组元素为6
printf("♂");//玩家在目的地
break;
case BOX+DEST://如果二维数组元素为5
printf("★");箱子在目的地
break;
}
}
printf("\n");
}
}
6.按键控制移动
int i = 0; int j = 0;//定义不要在for循环里面,要不然出作用域就会被销毁
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (map[i][j] == PLAYER||map[i][j] == PLAYER+DEST)
{
goto end;
}
}
}
end:;//找到直接来这里
void keyevent()
{
int i = 0; int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (map[i][j] == PLAYER || map[i][j] == PLAYER + DEST)
{
goto end;
}
}
}
end:;
char ch = _getch();
printf("%d %c", ch, ch);//w 119 a 97 s 115 d 100
}
switch (ch)
{
case 119:
case 'w ':
case 'W':
break;
case 97:
case 'a ':
case'A':
break;
case 115:
case 's ':
case'S':
break;
case 100:
case 'd ':
case'D':
break;
}
if (map[i - 1][j] == SPACE||map[i - 1][j] == DEST)
{
map[i - 1][j] += PLAYER;
map[i][j] -= PLAYER;
}
else if(map[i-1][j]==BOX||map[i-1][j]==BOX+DEST)
{
if (map[i - 2][j] == SPACE || map[i - 2][j] == DEST)
{//完成玩家上面有箱子,箱子的上面是空地或者是目的地都可以推动
map[i - 2][j] += BOX;//玩家上面的上面加一个箱子
map[i - 1][j] = map[i - 1][j] - BOX + PLAYER;//玩家的上面减去一个箱子加上一个玩家
map[i][j] -= PLAYER;//玩家消失在原来位置
}
}
处理完的函数上键
case 119:
case 'w ':
case 'W':
if (map[i - 1][j] == SPACE || map[i - 1][j] == DEST)
{
map[i - 1][j] += 4;
map[i][j] -= 4;
}
else if (map[i - 1][j] == BOX || map[i - 1][j] == BOX + DEST)
{
if (map[i - 2][j] == SPACE || map[i - 2][j] == DEST)
{
map[i - 2][j] += BOX;
map[i - 1][j] = map[i - 1][j] - BOX + PLAYER;
map[i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
向上推了一下,如果懂了上键怎么移动,别的也就会处理了
整体的keyevent()
void keyevent()
{
int i = 0; int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (map[i][j] == PLAYER || map[i][j] == PLAYER + DEST)
{
goto end;
}
}
}
end:;
char ch = _getch();
switch (ch)
{
case 119:
case 'w ':
case 'W':
if (map[i - 1][j] == SPACE || map[i - 1][j] == DEST)
{
map[i - 1][j] += PLAYER;
map[i][j] -= PLAYER;
}
else if (map[i - 1][j] == BOX || map[i - 1][j] == BOX + DEST)
{
if (map[i - 2][j] == SPACE || map[i - 2][j] == DEST)
{
map[i - 2][j] += BOX;
map[i - 1][j] = map[i - 1][j] - BOX + PLAYER;
map[i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 97:
case 'a ':
case'A':
if (map[i][j - 1] == SPACE || map[i][j - 1] == DEST)
{
map[i][j - 1] += PLAYER;
map[i][j] -= PLAYER;
}
else if (map[i][j - 1] == BOX || map[i][j - 1] == BOX + DEST)
{
if (map[i][j - 2] == SPACE || map[i][j - 2] == DEST)
{
map[i][j - 2] += BOX;
map[i][j - 1] = map[i][j - 1] - BOX + PLAYER;
map[i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 115:
case 's ':
case'S':
if (map[i + 1][j] == SPACE || map[i + 1][j] == DEST)
{
map[i + 1][j] += PLAYER;
map[i][j] -= PLAYER;
}
else if (map[i + 1][j] == BOX || map[i + 1][j] == BOX + DEST)
{
if (map[i + 2][j] == SPACE || map[i + 2][j] == DEST)
{
map[i + 2][j] += BOX;
map[i + 1][j] = map[i + 1][j] - BOX + PLAYER;
map[i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 100:
case 'd ':
case'D':
if (map[i][j + 1] == SPACE || map[i][j + 1] == DEST)
{
map[i][j + 1] += PLAYER;
map[i][j] -= PLAYER;
}
else if (map[i][j + 1] == BOX || map[i][j + 1] == BOX + DEST)
{
if (map[i][j + 2] == SPACE || map[i][j + 2] == DEST)
{
map[i][j + 2] += BOX;
map[i][j + 1] = map[i][j + 1] - BOX + PLAYER;
map[i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
}
}
7.多组地图的制作,修改map数组
int map[3][10][10] =
{
{
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,1,2,1,1,1,1,0},
{0,1,1,1,3,0,3,2,1,0},
{0,1,2,3,4,0,1,1,1,0},
{0,1,1,1,1,3,1,0,0,0},
{0,0,0,0,1,2,1,0,0,0},
{0,0,0,0,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,1,1,0,0,1,1,0,0},
{0,1,0,2,1,1,2,0,1,0},
{1,0,0,0,3,0,0,0,0,1},
{1,0,0,0,4,3,0,0,0,1},
{0,1,0,0,3,3,0,0,1,0},
{0,0,1,0,0,0,0,1,0,0},
{0,0,0,1,2,2,1,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
},
{
{0,0,0,0,1,0,0,0,0,0},
{0,0,0,1,0,1,0,0,0,0},
{0,0,1,2,3,0,1,0,0,0},
{0,1,0,0,0,0,0,1,0,0},
{1,2,3,0,4,0,0,0,1,0},
{0,1,0,0,0,0,0,3,2,1},
{0,0,1,0,3,0,0,0,1,0},
{0,0,0,1,2,0,0,1,0,0},
{0,0,0,0,1,0,1,0,0,0},
{0,0,0,0,0,1,0,0,0,0}
}
};
将所有map[][]改成map[level][][];每通过一关,level++;
8.通关判断
bool jude()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[level][i][j] == BOX)
{
return false;
}
}
}
}
if (jude())
{
level++;
if (level > 2)
{
printf("oioioioioioioioi奥哈呦学妹你通过了!");
_getch();
break;
}
}
9.程序源码(无图形库)
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
enum Mine
{
SPACE, //空地
WALL,//墙
DEST, //目的地
BOX, //箱子
PLAYER//玩家
};
int level = 0;
//定义一个二维数组,做地图 空地0 墙1 目的地2 箱子3 玩家4 箱子在目的地 5 玩家在目的地6,与枚举类型对应上了
int map[3][10][10] =
{
{
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,1,2,1,1,1,1,0},
{0,1,1,1,3,0,3,2,1,0},
{0,1,2,3,4,0,1,1,1,0},
{0,1,1,1,1,3,1,0,0,0},
{0,0,0,0,1,2,1,0,0,0},
{0,0,0,0,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,1,1,0,0,1,1,0,0},
{0,1,0,2,1,1,2,0,1,0},
{1,0,0,0,3,0,0,0,0,1},
{1,0,0,0,4,3,0,0,0,1},
{0,1,0,0,3,3,0,0,1,0},
{0,0,1,0,0,0,0,1,0,0},
{0,0,0,1,2,2,1,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
},
{
{0,0,0,0,1,0,0,0,0,0},
{0,0,0,1,0,1,0,0,0,0},
{0,0,1,2,3,0,1,0,0,0},
{0,1,0,0,0,0,0,1,0,0},
{1,2,3,0,4,0,0,0,1,0},
{0,1,0,0,0,0,0,3,2,1},
{0,0,1,0,3,0,0,0,1,0},
{0,0,0,1,2,0,0,1,0,0},
{0,0,0,0,1,0,1,0,0,0},
{0,0,0,0,0,1,0,0,0,0}
}
};
void gamedraw()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
switch (map[level][i][j])
{case SPACE:
printf(" "); //一个中文字符相当于二个英文字符
break;
case WALL:
printf("■");
break;
case DEST:
printf("☆");
break;
case BOX:
printf("□");
break;
case PLAYER:
printf("♀");
break;
case PLAYER+DEST:
printf("♂");
break;
case BOX+DEST:
printf("★");
break;
}
}
printf("\n");
}
}
void keyevent()
{
int i = 0; int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (map[level][i][j] == PLAYER || map[level][i][j] == PLAYER + DEST)
{
goto end;
}
}
}
end:;
char ch = _getch();
switch (ch)
{
case 119:
case 'w ':
case 'W':
if (map[level][i - 1][j] == SPACE || map[level][i - 1][j] == DEST)
{
map[level][i - 1][j] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i - 1][j] == BOX || map[level][i - 1][j] == BOX + DEST)
{
if (map[level][i - 2][j] == SPACE || map[level][i - 2][j] == DEST)
{
map[level][i - 2][j] += BOX;
map[level][i - 1][j] = map[level][i - 1][j] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 97:
case 'a ':
case'A':
if (map[level][i][j - 1] == SPACE || map[level][i][j - 1] == DEST)
{
map[level][i][j - 1] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i][j - 1] == BOX || map[level][i][j - 1] == BOX + DEST)
{
if (map[level][i][j - 2] == SPACE || map[level][i][j - 2] == DEST)
{
map[level][i][j - 2] += BOX;
map[level][i][j - 1] = map[level][i][j - 1] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 115:
case 's ':
case'S':
if (map[level][i + 1][j] == SPACE || map[level][i + 1][j] == DEST)
{
map[level][i + 1][j] += PLAYER;
map[level][i][j] -= PLAYER;
}
else if (map[level][i + 1][j] == BOX || map[level][i + 1][j] == BOX + DEST)
{
if (map[level][i + 2][j] == SPACE || map[level][i + 2][j] == DEST)
{
map[level][i + 2][j] += BOX;
map[level][i + 1][j] = map[level][i + 1][j] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 100:
case 'd ':
case'D':
if (map[level][i][j + 1] == SPACE || map[level][i][j + 1] == DEST)
{
map[level][i][j + 1] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i][j + 1] == BOX || map[level][i][j + 1] == BOX + DEST)
{
if (map[level][i][j + 2] == SPACE || map[level][i][j + 2] == DEST)
{
map[level][i][j + 2] += BOX;
map[level][i][j + 1] = map[level][i][j + 1] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
}
}
bool jude()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[level][i][j] == BOX)
{
return false;
}
}
}
}
int main()
{
system("mode con lines=15 cols=25");
//system("cls");//清屏操作
while (1)
{
gamedraw();
//_getch();
if (jude())
{
level++;
if (level > 2)
{
printf("oioioioioioioioi奥哈呦学妹你通过了!");
_getch();
break;
}
}keyevent();
}
getchar();//不让程序退出,等待读字符
return 0;
}
10.演示1
20231002_124830
11.加图形库版本
12.头文件增加
#include <graphics.h >
13.定义保存空地,目的地,玩家,箱子,墙,箱子推到目的地图片的类
IMAGE ima_all[6];
14.将图片image文件放在.cpp文件同目录下
image文件夹是自己创建的,用于放推箱子的素材,就是图片,图片可以在网上自己找推箱子的图片
15.加载图片函数
void loadimg()
{
for (int i = 0; i < 6; i++)
{
char file[20] = "";
sprintf(file,"./images/%d.png", i);
loadimage(ima_all + i,file, 40, 40);
}
}
16. gamedraw函数的修改
void gamedraw()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
int x = j * 40;
int y = i * 40;
switch (map[level][i][j])
{
case SPACE:
putimage(x, y, ima_all+2); //一个中文字符相当于二个英文字符
break;
case WALL:
putimage(x, y, ima_all+1);
break;
case DEST:
putimage(x, y, ima_all+4);
break;
case BOX:
putimage(x, y, ima_all+3);
break;
case PLAYER:
putimage(x, y, ima_all);
break;
case PLAYER + DEST:
putimage(x, y, ima_all);
break;
case BOX + DEST://就是箱子推到目的地
putimage(x, y, ima_all+5);
break;
}
}
}
}
17.主函数修改
int main()
{
initgraph(400, 400);
loadimg();
//system("mode con lines=15 cols=25");
//system("cls");//清屏操作
while (1)
{
gamedraw();
//_getch();
if (jude())
{
level++;
if (level > 2)
{
//printf("oioioioioioioioi奥哈呦学妹你通过了!");
_getch();
break;
}
}keyevent();
}
getchar();//不让程序退出,等待读字符
return 0;
}
18.游戏通关显示
settextcolor(BLACK);//字体颜色
settextstyle(25, 0, "微软雅黑");//字体风格
setbkmode(TRANSPARENT);//字体背景透明
outtextxy(100, 100, "oioioioioioioioi奥哈呦学妹你通过了!");//字体显示位置,以及内容
_getch();
break;
19.程序源码(带图形库版)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>//_getch()函数头文件
#include <stdbool.h>//bool类型的头函数
#include <graphics.h >//图形库头文件
//定义一个二维数组,做地图
//空地0 墙1 目的地2 箱子3 玩家4 箱子在目的地 5 玩家在目的地6
IMAGE ima_all[6];
int level = 0;
void loadimg()
{
for (int i = 0; i < 6; i++)
{
char file[20] = "";
sprintf(file,"./images/%d.png", i);
loadimage(ima_all + i,file, 40, 40);
}
}
enum Mine
{
SPACE, //空地
WALL,//墙
DEST, //目的地
BOX, //箱子
PLAYER//玩家
};
int map[3][10][10] =
{
{
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,1,2,1,1,1,1,0},
{0,1,1,1,3,0,3,2,1,0},
{0,1,2,3,4,0,1,1,1,0},
{0,1,1,1,1,3,1,0,0,0},
{0,0,0,0,1,2,1,0,0,0},
{0,0,0,0,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,1,1,0,0,1,1,0,0},
{0,1,0,2,1,1,2,0,1,0},
{1,0,0,0,3,0,0,0,0,1},
{1,0,0,0,4,3,0,0,0,1},
{0,1,0,0,3,3,0,0,1,0},
{0,0,1,0,0,0,0,1,0,0},
{0,0,0,1,2,2,1,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
},
{
{0,0,0,0,1,0,0,0,0,0},
{0,0,0,1,0,1,0,0,0,0},
{0,0,1,2,3,0,1,0,0,0},
{0,1,0,0,0,0,0,1,0,0},
{1,2,3,0,4,0,0,0,1,0},
{0,1,0,0,0,0,0,3,2,1},
{0,0,1,0,3,0,0,0,1,0},
{0,0,0,1,2,0,0,1,0,0},
{0,0,0,0,1,0,1,0,0,0},
{0,0,0,0,0,1,0,0,0,0}
}
};
void gamedraw()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
int x = j * 40;
int y = i * 40;
switch (map[level][i][j])
{
case SPACE:
putimage(x, y, ima_all+2); //一个中文字符相当于二个英文字符
break;
case WALL:
putimage(x, y, ima_all+1);
break;
case DEST:
putimage(x, y, ima_all+4);
break;
case BOX:
putimage(x, y, ima_all+3);
break;
case PLAYER:
putimage(x, y, ima_all);
break;
case PLAYER + DEST:
putimage(x, y, ima_all);
break;
case BOX + DEST:
putimage(x, y, ima_all+5);
break;
}
}
}
}
void keyevent()
{
int i = 0; int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (map[level][i][j] == PLAYER||map[level][i][j] == PLAYER+DEST)
{
goto end;
}
}
}
end:;
char ch = _getch();
//printf("%d %c", ch, ch);//w 119 a 97 s 115 d 100
switch (ch)
{case 119:
case 'w ':
case 'W':
if (map[level][i - 1][j] == SPACE||map[level][i - 1][j] == DEST)
{
map[level][i - 1][j] += 4;
map[level][i][j] -= 4;
}
else if(map[level][i-1][j]==BOX||map[level][i-1][j]==BOX+DEST)
{
if (map[level][i - 2][j] == SPACE || map[level][i - 2][j] == DEST)
{
map[level][i - 2][j] += BOX;
map[level][i - 1][j] = map[level][i - 1][j] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 97:
case 'a ':
case'A':
if (map[level][i][j-1] == SPACE || map[level][i][j-1] == DEST)
{
map[level][i][j-1] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i][j-1] == BOX || map[level][i][j-1] == BOX + DEST)
{
if (map[level][i][j-2] == SPACE || map[level][i][j-2] == DEST)
{
map[level][i][j-2] += BOX;
map[level][i][j-1] = map[level][i][j-1] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 115:
case 's ':
case'S':
if (map[level][i+1][j] == SPACE || map[level][i+1][j] == DEST)
{
map[level][i+1][j] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i+1][j] == BOX || map[level][i+1][j] == BOX + DEST)
{
if (map[level][i+2][j] == SPACE || map[level][i+2][j] == DEST)
{
map[level][i+2][j] += BOX;
map[level][i+1][j] = map[level][i+1][j] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 100:
case 'd ':
case'D':
if (map[level][i][j+1] == SPACE || map[level][i][j+1] == DEST)
{
map[level][i][j+1] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i][j+1] == BOX || map[level][i][j+1] == BOX + DEST)
{
if (map[level][i][j+2] == SPACE || map[level][i][j +2] == DEST)
{
map[level][i][j+2] += BOX;
map[level][i][j+1] = map[level][i][j+1] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
}
}
bool jude()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[level][i][j] == BOX)
{
return false;
}
}
}
}
int main()
{
initgraph(10 * 40, 10 * 40);
loadimg();
system("mode con lines=15 cols=25");//调整窗口大小
while (1)
{
//system("cls");
gamedraw();
if (jude())
{
level++;
if (level > 2)
{
settextcolor(BLACK);
settextstyle(25, 0, "微软雅黑");
setbkmode(TRANSPARENT);
outtextxy(100, 100, "oioioioioioioioi奥哈呦学妹你通过了!");
_getch();
break;
}
}
keyevent();
}
getchar();//不让程序退出
return 0;
}
20.演示2
20231002_153153
21.关卡的增加
22.关卡重开
int mapreset[3][10][10] =
{
{
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,1,2,1,1,1,1,0},
{0,1,1,1,3,0,3,2,1,0},
{0,1,2,3,4,0,1,1,1,0},
{0,1,1,1,1,3,1,0,0,0},
{0,0,0,0,1,2,1,0,0,0},
{0,0,0,0,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,1,1,0,0,1,1,0,0},
{0,1,0,2,1,1,2,0,1,0},
{1,0,0,0,3,0,0,0,0,1},
{1,0,0,0,4,3,0,0,0,1},
{0,1,0,0,3,3,0,0,1,0},
{0,0,1,0,0,0,0,1,0,0},
{0,0,0,1,2,2,1,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
},
{
{0,0,0,0,1,0,0,0,0,0},
{0,0,0,1,0,1,0,0,0,0},
{0,0,1,2,3,0,1,0,0,0},
{0,1,0,0,0,0,0,1,0,0},
{1,2,3,0,4,0,0,0,1,0},
{0,1,0,0,0,0,0,3,2,1},
{0,0,1,0,3,0,0,0,1,0},
{0,0,0,1,2,0,0,1,0,0},
{0,0,0,0,1,0,1,0,0,0},
{0,0,0,0,0,1,0,0,0,0}
}
};
void keyevent()
{
int i = 0; int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (map[level][i][j] == PLAYER || map[level][i][j] == PLAYER + DEST)
{
goto end;
}
}
}
end:;
char ch = _getch();
//printf("%d %c", ch, ch);//w 119 a 97 s 115 d 100
switch (ch)
{
case 119:
case 'w ':
case 'W':
if (map[level][i - 1][j] == SPACE || map[level][i - 1][j] == DEST)
{
map[level][i - 1][j] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i - 1][j] == BOX || map[level][i - 1][j] == BOX + DEST)
{
if (map[level][i - 2][j] == SPACE || map[level][i - 2][j] == DEST)
{
map[level][i - 2][j] += BOX;
map[level][i - 1][j] = map[level][i - 1][j] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 97:
case 'a ':
case'A':
if (map[level][i][j - 1] == SPACE || map[level][i][j - 1] == DEST)
{
map[level][i][j - 1] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i][j - 1] == BOX || map[level][i][j - 1] == BOX + DEST)
{
if (map[level][i][j - 2] == SPACE || map[level][i][j - 2] == DEST)
{
map[level][i][j - 2] += BOX;
map[level][i][j - 1] = map[level][i][j - 1] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 115:
case 's ':
case'S':
if (map[level][i + 1][j] == SPACE || map[level][i + 1][j] == DEST)
{
map[level][i + 1][j] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i + 1][j] == BOX || map[level][i + 1][j] == BOX + DEST)
{
if (map[level][i + 2][j] == SPACE || map[level][i + 2][j] == DEST)
{
map[level][i + 2][j] += BOX;
map[level][i + 1][j] = map[level][i + 1][j] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 100:
case 'd ':
case'D':
if (map[level][i][j + 1] == SPACE || map[level][i][j + 1] == DEST)
{
map[level][i][j + 1] += 4;
map[level][i][j] -= 4;
}
else if (map[level][i][j + 1] == BOX || map[level][i][j + 1] == BOX + DEST)
{
if (map[level][i][j + 2] == SPACE || map[level][i][j + 2] == DEST)
{
map[level][i][j + 2] += BOX;
map[level][i][j + 1] = map[level][i][j + 1] - BOX + PLAYER;
map[level][i][j] -= PLAYER;//玩家消失在原来位置
}
}
break;
case 'r':///新增
case'R' :///新增
for (int i = 0; i < 10; i++)///新增
{///新增
for (int j = 0; j < 10; j++)///新增
{
map[level][i][j] = mapreset[level][i][j];///新增
}///新增
}///新增
break;///新增
}///新增
}