#include#include #include #include //按键 *** 作 #define ROW 10 #define COL 10 #define SPACE 0 //空地 #define WALL 1 //墙 #define DEST 2 //目的地 #define BOX 3 //箱子 #define PLAYER 4 //玩家 //#define 5//目的地+箱子 //#define 6//目的地+玩家 //定义地图 //输出map[curLevel] //当前关卡 //int map[3][ROW][COL] = { 0 }; int curLevel = 0; //3个关卡 char map[3][ROW][COL] = { { {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,0,0,0,0}, {0,1,1,1,3,1,1,1,1,0}, {0,1,2,3,4,0,3,2,1,0}, {0,1,1,1,1,0,1,1,1,0}, {0,0,0,0,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,1,1,0,0,1,1,0,0}, {0,1,0,2,1,1,2,0,1,0}, {1,0,0,3,0,0,3,0,0,1}, {1,0,0,0,4,0,0,0,0,1}, {0,1,0,0,0,0,0,0,1,0}, {0,0,1,0,3,3,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} }, { {1,0,0,0,0,0,0,0,0,1}, {0,1,0,1,1,1,1,0,1,0}, {0,0,1,1,0,0,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,4,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,3,0,0,0,0,3,0,0}, {0,0,2,0,0,0,0,2,0,0}, {0,0,0,0,0,0,0,0,0,0} } }; void show() { for (int i = 0; i < ROW; i++) { for (int k = 0; k < COL; k++) { switch (map[curLevel][i][k]) { case SPACE: printf(" "); break; case WALL: printf("▓"); break; case DEST: printf("☆"); break; case BOX: printf("□"); break; case PLAYER: printf("♀"); break; case DEST + BOX: //箱子在目的地 printf("★"); break; case DEST + PLAYER: //玩家在目的地 printf("♂"); break; } } printf("n"); } } //移动 void move() { //查找玩家所在地下标 int r = -1, c = -1; for (int i = 0; i < ROW; i++) { for (int k = 0; k < COL; k++) { if (map[curLevel][i][k] == PLAYER || map[curLevel][i][k] == DEST + PLAYER) { r = i; c = k; goto endloop; } //break; } } //怎么样获取按键 getchar()输入后需要回车 //还有一个函数和getchar()很像,但是不需要按回车 _getch(),需要包含conio.h //int key=_getch(); //printf("%d %cn", key, key); endloop: if (r == -1 || c == -1) return; switch (_getch()) { case 72: case 'W': case 'w': //玩家的前面是否是空地或者目的地 if (map[curLevel][r - 1][c] == SPACE || map[curLevel][r - 1][c] == DEST) { //1.把玩家移动到空地 map[curLevel][r - 1][c] += PLAYER; //2.把玩家从原来的位置清楚掉 map[curLevel][r][c] -= PLAYER; } else if (map[curLevel][r - 1][c] == BOX)//玩家的前面是箱子 { //箱子的前面是空地或目的地 if (map[curLevel][r - 2][c] == SPACE || map[curLevel][r - 2][c] == DEST) { //1把箱子移动到前面 map[curLevel][r - 2][c] += BOX; //2把箱子从原来的地方清除 map[curLevel][r - 1][c] -= BOX; //3把玩家移动到空地 map[curLevel][r - 1][c] += PLAYER; //4把玩家从原来的位置清除 map[curLevel][r][c] -= PLAYER; } } break; case 80: case 'S': case 's': //玩家的前面是否是空地或者目的地 if (map[curLevel][r + 1][c] == SPACE || map[curLevel][r + 1][c] == DEST) { //1.把玩家移动到空地 map[curLevel][r + 1][c] += PLAYER; //2.把玩家从原来的位置清楚掉 map[curLevel][r][c] -= PLAYER; } else if (map[curLevel][r + 1][c] == BOX)//玩家的前面是箱子 { //箱子的前面是空地或目的地 if (map[curLevel][r + 2][c] == SPACE || map[curLevel][r + 2][c] == DEST) { //1把箱子移动到前面 map[curLevel][r + 2][c] += BOX; //2把箱子从原来的地方清除 map[curLevel][r + 1][c] -= BOX; //3把玩家移动到空地 map[curLevel][r + 1][c] += PLAYER; //4把玩家从原来的位置清除 map[curLevel][r][c] -= PLAYER; } } break; case 75: case 'A': case 'a': //玩家的前面是否是空地或者目的地 if (map[curLevel][r][c - 1] == SPACE || map[curLevel][r][c - 1] == DEST) { //1.把玩家移动到空地 map[curLevel][r][c - 1] += PLAYER; //2.把玩家从原来的位置清楚掉 map[curLevel][r][c] -= PLAYER; } else if (map[curLevel][r][c - 1] == BOX)//玩家的前面是箱子 { //箱子的前面是空地或目的地 if (map[curLevel][r][c - 2] == SPACE || map[curLevel][r][c - 2] == DEST) { //1把箱子移动到前面 map[curLevel][r][c - 2] += BOX; //2把箱子从原来的地方清除 map[curLevel][r][c - 1] -= BOX; //3把玩家移动到空地 map[curLevel][r][c - 1] += PLAYER; //4把玩家从原来的位置清除 map[curLevel][r][c] -= PLAYER; } } break; case 77: case 'D': case 'd': //玩家的前面是否是空地或者目的地 if (map[curLevel][r][c + 1] == SPACE || map[curLevel][r][c + 1] == DEST) { //1.把玩家移动到空地 map[curLevel][r][c + 1] += PLAYER; //2.把玩家从原来的位置清楚掉 map[curLevel][r][c] -= PLAYER; } else if (map[curLevel][r][c + 1] == BOX)//玩家的前面是箱子 { //箱子的前面是空地或目的地 if (map[curLevel][r][c + 2] == SPACE || map[curLevel][r][c + 2] == DEST) { //1把箱子移动到前面 map[curLevel][r][c + 2] += BOX; //2把箱子从原来的地方清除 map[curLevel][r][c + 1] -= BOX; //3把玩家移动到空地 map[curLevel][r][c + 1] += PLAYER; //4把玩家从原来的位置清除 map[curLevel][r][c] -= PLAYER; } } break; } } //什么情况下才过关,如果地图上没箱子了就过关了 bool judge() { for (int i = 0; i < ROW; i++) { for (int k = 0; k < COL; k++) { if (map[curLevel][i][k] == BOX) { return false; } } } return true; } //推箱子 int main() { while (true) { system("cls");//清屏 show(); if (judge()) { curLevel++; } //不断的检测键盘按键,不断的绘制 72 80 75 77 上下左右 move(); } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)