#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//0: 空地:
//1: 目的地: ☆
//2: 墙壁:■
//4: 箱子:□
//8: 玩家:♂
enum state //枚举
{
space = 0,
mudi = 1,
wall = 2,
box = 4,
player=8
}state;
int hang = 0, lie = 0;
int map[13][14] =
{
{ space, space, space, space, wall, wall, wall, wall, wall, wall, space, space, space, space },
{ space, space, space, space, wall, space, space, space, space, wall, space, space, space, space },
{ wall, wall, wall, wall, wall, wall, space, box, box, wall, wall, wall, wall, wall },
{ wall, space, space, space, space, wall, space, space, space, wall, space, space, space, wall },
{ wall, space, space, box, space, space, space, box, space, space, space, box, space, wall },
{ wall, space, space, wall, wall, wall, wall, space, wall, wall, wall, wall, wall, wall },
{ wall, space, space, space, box, space, space, space, space, space, mudi, mudi, mudi, wall },
{ wall, space, space, space, box, space, wall, space, space, space, player, space, space, wall },
{ wall, space, box, space, box, space, wall, space, wall, wall, wall, wall, wall, wall },
{ wall, wall, space, space, box, space, wall, space, wall, mudi, mudi, mudi, wall, space },
{ space, wall, space, wall, wall, space, space, space, space, mudi, mudi, mudi, wall, space },
{ space, wall, space, space, space, space, wall, wall, space, space, space, mudi, wall, space },
{ space, wall, wall, wall, wall, wall, wall, wall, wall, wall, wall, wall, wall, space }
};
void DrawMap(int map[][14])
{
int i = 0, j = 0;
for (i = 0; i < 13; i++) //行
{
for (j = 0; j < 14; j++) //列
{
switch (map[i][j])
{
case space:
printf(" ");
break;
case mudi:
printf("☆");
break;
case mudi+box:
printf("★");
break;
case wall:
printf("■");
break;
case box:
printf("□");
break;
case player: //角色和目的都显示为♂
case player+mudi:
printf("♂");
hang = i; lie = j;//记录玩家位置
break;
default:
break;
}
}
printf("\n");
}
}
void MoveLeft(int map[][14])
{
map[hang][lie] -= player;
map[hang][lie- 1] += player;
}
void BoxLeft(int map[][14])
{
map[hang][lie - 2] += box;
map[hang][lie - 1] -= box;
}
void MoveRight(int map[][14])
{
map[hang][lie] -= player;
map[hang][lie + 1] += player;
}
void BoxRight(int map[][14])
{
map[hang][lie + 2] += box;
map[hang][lie + 1] -= box;
}
void MoveUp(int map[][14])
{
map[hang][lie] -= player;
map[hang - 1][lie] += player;
}
void BoxUp(int map[][14])
{
map[hang - 2][lie] += box;
map[hang - 1][lie] -= box;
}
void MoveDown(int map[][14])
{
map[hang][lie] -= player;
map[hang + 1][lie] += player;
}
void BoxDown(int map[][14])
{
map[hang + 2][lie] += box;
map[hang + 1][lie] -= box;
}
bool ShengliYN() //判断玩家是否把箱子推进目的地
{
int i, j;
for (i = 0; i < 13; i++)
{
for (j = 0; j < 14; j++)
{
if (map[i][j] == box)//还有箱子就不会结束
{
return 0;
}
}
}
return 1; //否则结束
}
int main()
{
printf("\n");
printf("请随意输入按钮显示操作提示(PS:注意输入法大小写)\n");
printf("\n");
DrawMap(map);
char key = 0;
while (1)
{
if (ShengliYN())
{
return 0;
}
key = _getch();
switch (key)
{
case 'A':
case 'a':
switch (map[hang][lie - 1])
{
case mudi:
case space:
MoveLeft(map);
break;
case box:
case box+mudi:
if (map[hang][lie - 2] == space || map[hang][lie - 2] == mudi) //玩家的左边的左边为空地或者目的地
{
BoxLeft(map);
MoveLeft(map);
}
break;
}
break;
case 'D':
case 'd':
switch (map[hang][lie + 1])
{
case mudi:
case space:
MoveRight(map);
break;
case box:
case box + mudi:
if (map[hang][lie + 2] == space || map[hang][lie + 2] == mudi)
{
BoxRight(map);
MoveRight(map);
}
break;
}
break;
case 'W':
case 'w':
switch (map[hang-1][lie])
{
case mudi:
case space:
MoveUp(map);
break;
case box:
case box + mudi:
if (map[hang-2][lie] == space || map[hang-2][lie] == mudi)
{
BoxUp(map);
MoveUp(map);
}
break;
}
break;
case 'S':
case 's':
switch (map[hang +1][lie])
{
case mudi:
case space:
MoveDown(map);
break;
case box:
case box + mudi:
if (map[hang + 2][lie] == space || map[hang + 2][lie] == mudi)
{
BoxDown(map);
MoveDown(map);
}
break;
}
break;
}
system("cls"); /////清空屏幕
DrawMap(map);
printf("\n");
printf("操作为:WSAD 上下左右\n");
}
return 0;
}
#include <conio.h>
#include <stdlib.h>
//0: 空地:
//1: 目的地: ☆
//2: 墙壁:■
//4: 箱子:□
//8: 玩家:♂
enum state //枚举
{
space = 0,
mudi = 1,
wall = 2,
box = 4,
player=8
}state;
int hang = 0, lie = 0;
int map[13][14] =
{
{ space, space, space, space, wall, wall, wall, wall, wall, wall, space, space, space, space },
{ space, space, space, space, wall, space, space, space, space, wall, space, space, space, space },
{ wall, wall, wall, wall, wall, wall, space, box, box, wall, wall, wall, wall, wall },
{ wall, space, space, space, space, wall, space, space, space, wall, space, space, space, wall },
{ wall, space, space, box, space, space, space, box, space, space, space, box, space, wall },
{ wall, space, space, wall, wall, wall, wall, space, wall, wall, wall, wall, wall, wall },
{ wall, space, space, space, box, space, space, space, space, space, mudi, mudi, mudi, wall },
{ wall, space, space, space, box, space, wall, space, space, space, player, space, space, wall },
{ wall, space, box, space, box, space, wall, space, wall, wall, wall, wall, wall, wall },
{ wall, wall, space, space, box, space, wall, space, wall, mudi, mudi, mudi, wall, space },
{ space, wall, space, wall, wall, space, space, space, space, mudi, mudi, mudi, wall, space },
{ space, wall, space, space, space, space, wall, wall, space, space, space, mudi, wall, space },
{ space, wall, wall, wall, wall, wall, wall, wall, wall, wall, wall, wall, wall, space }
};
void DrawMap(int map[][14])
{
int i = 0, j = 0;
for (i = 0; i < 13; i++) //行
{
for (j = 0; j < 14; j++) //列
{
switch (map[i][j])
{
case space:
printf(" ");
break;
case mudi:
printf("☆");
break;
case mudi+box:
printf("★");
break;
case wall:
printf("■");
break;
case box:
printf("□");
break;
case player: //角色和目的都显示为♂
case player+mudi:
printf("♂");
hang = i; lie = j;//记录玩家位置
break;
default:
break;
}
}
printf("\n");
}
}
void MoveLeft(int map[][14])
{
map[hang][lie] -= player;
map[hang][lie- 1] += player;
}
void BoxLeft(int map[][14])
{
map[hang][lie - 2] += box;
map[hang][lie - 1] -= box;
}
void MoveRight(int map[][14])
{
map[hang][lie] -= player;
map[hang][lie + 1] += player;
}
void BoxRight(int map[][14])
{
map[hang][lie + 2] += box;
map[hang][lie + 1] -= box;
}
void MoveUp(int map[][14])
{
map[hang][lie] -= player;
map[hang - 1][lie] += player;
}
void BoxUp(int map[][14])
{
map[hang - 2][lie] += box;
map[hang - 1][lie] -= box;
}
void MoveDown(int map[][14])
{
map[hang][lie] -= player;
map[hang + 1][lie] += player;
}
void BoxDown(int map[][14])
{
map[hang + 2][lie] += box;
map[hang + 1][lie] -= box;
}
bool ShengliYN() //判断玩家是否把箱子推进目的地
{
int i, j;
for (i = 0; i < 13; i++)
{
for (j = 0; j < 14; j++)
{
if (map[i][j] == box)//还有箱子就不会结束
{
return 0;
}
}
}
return 1; //否则结束
}
int main()
{
printf("\n");
printf("请随意输入按钮显示操作提示(PS:注意输入法大小写)\n");
printf("\n");
DrawMap(map);
char key = 0;
while (1)
{
if (ShengliYN())
{
return 0;
}
key = _getch();
switch (key)
{
case 'A':
case 'a':
switch (map[hang][lie - 1])
{
case mudi:
case space:
MoveLeft(map);
break;
case box:
case box+mudi:
if (map[hang][lie - 2] == space || map[hang][lie - 2] == mudi) //玩家的左边的左边为空地或者目的地
{
BoxLeft(map);
MoveLeft(map);
}
break;
}
break;
case 'D':
case 'd':
switch (map[hang][lie + 1])
{
case mudi:
case space:
MoveRight(map);
break;
case box:
case box + mudi:
if (map[hang][lie + 2] == space || map[hang][lie + 2] == mudi)
{
BoxRight(map);
MoveRight(map);
}
break;
}
break;
case 'W':
case 'w':
switch (map[hang-1][lie])
{
case mudi:
case space:
MoveUp(map);
break;
case box:
case box + mudi:
if (map[hang-2][lie] == space || map[hang-2][lie] == mudi)
{
BoxUp(map);
MoveUp(map);
}
break;
}
break;
case 'S':
case 's':
switch (map[hang +1][lie])
{
case mudi:
case space:
MoveDown(map);
break;
case box:
case box + mudi:
if (map[hang + 2][lie] == space || map[hang + 2][lie] == mudi)
{
BoxDown(map);
MoveDown(map);
}
break;
}
break;
}
system("cls"); /////清空屏幕
DrawMap(map);
printf("\n");
printf("操作为:WSAD 上下左右\n");
}
return 0;
}