#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
///*
// //1.墙: ■
// //0.空地 :两个空格
// //3.目的地 ☆
// //4.箱子 ★
// //5:人 ※
// //3+4:箱子到达目的地 ●
//*/
int map[8][8] = {
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 0, 1, 1,
1, 0, 0, 0, 5, 0, 0, 1,
1, 0, 4, 0, 0, 4, 0, 1,
1, 0, 3, 0, 0, 3, 0, 1,
1, 1, 0, 4, 4, 0, 1, 1,
1, 1, 1, 3, 3, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1
};
void gotoxy(int x, int y) //光标移动到(x,y)位置,在游戏中打印一张画面后将光标拉到(x,y)处进行打印。
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
int main(void)
{
while (1)
{
gotoxy(0, 0);
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
switch (map[i][j])
{
case 0:
printf(" ");//打印空地
break;
case 1:
printf("■");//打印墙
break;
case 3:
printf("☆");//打印目的地
break;
case 4:
printf("★");//打印箱子
break;
case 5:
case 8://人到达目的地
printf("※");//打印人
break;
case 7:
printf("●");//箱子到达目的地
break;
}
}
printf("\n");
}
//定位
int i;
int j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
if (map[i][j] == 5 || map[i][j] == 8)
{
break;
}
}
if (map[i][j] == 5 || map[i][j] == 8)
{
break;
}
}
printf("%d%d", i, j);
char userKey = _getch();
switch (userKey)
{
case 'W':
case 'w':
case 72:
if (map[i - 1][j] == 0 || map[i - 1][j] == 3)
{
map[i - 1][j] += 5;
map[i][j] -= 5;
}
else if (map[i - 1][j] == 4 && (map[i - 2][j] == 0 || map[i - 2][j] == 3))
{
map[i - 2][j] += 4;
map[i - 1][j] += 1;
map[i][j] -= 5;
}
else if (map[i - 1][j] == 7 && map[i - 2][j] == 0)
{
map[i - 2][j] += 4;
map[i - 1][j] += 1;
map[i][j] -= 5;
}
break;
case 'S':
case 's':
case 80:
if (map[i + 1][j] == 0 || map[i + 1][j] == 3)
{
map[i + 1][j] += 5;
map[i][j] -= 5;
}
else if (map[i + 1][j] == 4 && (map[i + 2][j] == 0 || map[i + 2][j] == 3))
{
map[i + 2][j] += 4;
map[i + 1][j] += 1;
map[i][j] -= 5;
}
else if (map[i + 1][j] == 7 && map[i + 2][j] == 0)
{
map[i + 2][j] += 4;
map[i + 1][j] += 1;
map[i][j] -= 5;
}
break;
case 'A':
case 'a':
case 75:
if (map[i][j - 1] == 0 || map[i][j - 1] == 3)
{
map[i][j - 1] += 5;
map[i][j] -= 5;
}
else if (map[i][j - 1] == 4 && (map[i][j - 2] == 0 || map[i][j - 2] == 3))
{
map[i][j - 2] += 4;
map[i][j - 1] += 1;
map[i][j] -= 5;
}
else if (map[i][j - 1] == 7 && map[i][j - 2] == 0)
{
map[i][j - 2] += 4;
map[i][j - 1] += 1;
map[i][j] -= 5;
}
break;
case 'D':
case 'd':
case 77:
if (map[i][j + 1] == 0 || map[i][j + 1] == 3)
{
map[i][j + 1] += 5;
map[i][j] -= 5;
}
else if (map[i][j + 1] == 4 && (map[i][j + 2] == 0 || map[i][j + 2] == 3))
{
map[i][j + 2] += 4;
map[i][j + 1] += 1;
map[i][j] -= 5;
}
else if (map[i][j + 1] == 7 && map[i][j + 2] == 0)
{
map[i][j + 2] += 4;
map[i][j + 1] += 1;
map[i][j] -= 5;
}
break;
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
//模块设计理念:尽量避免功能交叉,做到高内聚,底耦合。
///*
// //1.墙: ■
// //0.空地 :两个空格
// //3.目的地 ☆
// //4.箱子 ★
// //5:人 ※
// //3+4:箱子到达目的地 ●
//*/
int cas = 0;
int map[3][8][8] = {
1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 3, 4, 0, 0, 1,
1, 0, 1, 0, 5, 1, 0, 1,
1, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 4, 3, 0, 4, 1,
1, 4, 1, 0, 0, 1, 3, 1,
1, 3, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 1, 0, 0, 0, 0, 1,
1, 0, 1, 0, 5, 1, 0, 1,
1, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 4, 3, 0, 4, 1,
1, 4, 1, 0, 0, 1, 3, 1,
1, 3, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 3, 0, 0, 0, 4, 3, 1,
1, 4, 1, 0, 5, 1, 0, 1,
1, 0, 0, 0, 0, 0, 0, 1,
1, 1, 0, 4, 3, 0, 4, 1,
1, 0, 4, 0, 0, 1, 3, 1,
1, 0, 3, 1, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1
};
void gotoxy(int x, int y) //光标移动到(x,y)位置,在游戏中打印一张画面后将光标拉到(x,y)处进行打印。
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void drawGraph()
{
printf("推箱子第%d关\n", cas+1);
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
switch (map[cas][i][j])
{
case 0:
printf(" ");//打印空地
break;
case 1:
printf("■");//打印墙
break;
case 3:
printf("☆");//打印目的地
break;
case 4:
printf("★");//打印箱子
break;
case 5:
case 8://人到达目的地
printf("※");//打印人
break;
case 7:
printf("●");//箱子到达目的地
break;
}
}
printf("\n");
}
}
void keyDown()
{
//定位
int i;
int j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
{
break;
}
}
if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
{
break;
}
}
printf("%d%d", i, j);
char userKey = _getch();
switch (userKey)
{
case 'W':
case 'w':
case 72:
if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3)
{
map[cas][i - 1][j] += 5;
map[cas][i][j] -= 5;
}
else if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7)
{
if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3)
{
map[cas][i][j] -= 5;
map[cas][i - 1][j] += 1;
map[cas][i - 2][j] += 4;
}
}
break;
case 'S':
case 's':
case 80:
if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3)
{
map[cas][i + 1][j] += 5;
map[cas][i][j] -= 5;
}
else if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7)
{
if (map[cas][i + 2][j] == 0 || map[cas][i + 2][j] == 3)
{
map[cas][i][j] -= 5;
map[cas][i + 1][j] += 1;
map[cas][i + 2][j] += 4;
}
}
break;
case 'A':
case 'a':
case 75:
if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3)
{
map[cas][i][j - 1] += 5;
map[cas][i][j] -= 5;
}
else if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7)
{
if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3)
{
map[cas][i][j] -= 5;
map[cas][i][j - 1] += 1;
map[cas][i][j - 2] += 4;
}
}
break;
case 'D':
case 'd':
case 77:
if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3)
{
map[cas][i][j + 1] += 5;
map[cas][i][j] -= 5;
}
else if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7)
{
if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3)
{
map[cas][i][j] -= 5;
map[cas][i][j + 1] += 1;
map[cas][i][j + 2] += 4;
}
}
break;
}
}
int gameOver()
{
int flag = 1;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (map[cas][i][j] == 4)
{
flag = 0;
}
}
}
return flag;
}
int main(void)
{
while (1)
{
gotoxy(0, 0);
drawGraph();
keyDown();
if (gameOver() == 1)
{
cas++;
if (cas == 3)
{
//drawGraph();
break;
}
}
}
system("cls");
printf("Victory\n");
return 0;
}