推箱子一关简易劣质版

#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;
}

猜你喜欢

转载自blog.csdn.net/wyj1140112016/article/details/80650610
今日推荐