推箱子C语言小游戏代码.docx
《推箱子C语言小游戏代码.docx》由会员分享,可在线阅读,更多相关《推箱子C语言小游戏代码.docx(17页珍藏版)》请在冰点文库上搜索。
推箱子C语言小游戏代码
#include
#include
#include
#include
//打印地图
voidDrawMap();
//设置颜色
voidSetColor(intnColor);
//获取玩家坐标
POINTGetGamerPosition();
//上
voidUp();
//下
voidDown();
//左
voidLeft();
//右
voidRight();
//获取空箱子个数
intGetSpareBox();
//地图
//0:
空地;3箱子的目的地4箱子
//6人7箱子与目的地的集合
//1:
墙壁;9人在箱子的目的地
intg_map[2][10][12]=
{
{
{0,0,0,0,1,1,1,0,0,0,0,0},
{0,0,0,0,1,3,1,0,0,0,0,0},
{0,0,0,0,1,0,1,1,1,1,1,1},
{1,1,1,1,1,4,0,4,0,0,3,1},
{1,3,0,0,0,4,6,1,1,1,1,1},
{1,1,1,1,1,1,4,1,0,0,0,0},
{0,0,0,0,0,1,0,1,0,0,0,0},
{0,0,0,0,0,1,0,1,0,0,0,0},
{0,0,0,0,0,1,3,1,0,0,0,0},
{0,0,0,0,0,1,1,1,0,0,0,0},
},
{
{1,1,1,1,1,0,0,0,0,0,0,0},
{1,0,0,0,1,0,1,1,1,0,0,0},
{1,0,4,0,1,0,1,1,1,1,1,1},
{1,0,4,6,1,0,1,0,0,0,3,1},
{1,1,1,4,1,1,1,0,0,0,3,1},
{1,1,1,0,0,0,0,0,0,0,3,1},
{0,1,0,0,0,1,0,0,0,0,0,1},
{0,1,0,0,0,1,0,0,0,0,0,1},
{0,1,0,0,0,1,1,1,1,1,1,1},
{1,1,1,1,1,1,0,0,0,0,0,0},
}
};
intg_nCurrentLevel=0;//当前管卡
intmain()
{
//设置窗口大小
system("modeconcols=26lines=11");
//设置标题
//SetConsoLeTitle("推箱子");
charnInput=0;//输入字符
while
(1)
{
//如果箱子推完了过关
if(0==GetSpareBox())
g_nCurrentLevel++;
//清屏
system("cls");
//如果没有关卡,那就恭喜你成功通关。
if(g_nCurrentLevel>=sizeof(g_map)/sizeof(g_map[0]))
{
printf("恭喜你已经通关!
");
break;
}
//打印地图
DrawMap();
nInput=_getch();
switch(nInput)
{
//往上
case'w':
case72:
Up();
break;
case's':
case80:
Down();
break;
case'a':
case75:
Left();
break;
case'd':
case77:
Right();
break;
}
}
system("pause");
return0;
}
//打印地图
voidDrawMap()
{
for(inti=0;i<10;i++)
{
for(intj=0;j<12;j++)
{
switch(g_map[g_nCurrentLevel][i][j])
{
case0:
//道路,空地
printf("");
break;
case1:
SetColor(FOREGROUND_RED|FOREGROUND_INTENSITY);
printf("■");
break;
case3:
SetColor(FOREGROUND_GREEN|FOREGROUND_INTENSITY);
printf("☆");
break;
case4:
SetColor(FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
printf("□");
break;
case6:
SetColor(FOREGROUND_GREEN|FOREGROUND_INTENSITY);
printf("♂");
break;
case7:
SetColor(FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
printf("★");
break;
case9:
SetColor(FOREGROUND_GREEN|FOREGROUND_INTENSITY);
printf("♂");
break;
}
}
printf("\n");
}
}
//设置颜色
voidSetColor(intnColor)
{
HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);
//MSD
SetConsoleTextAttribute(hConsole,nColor);
}
//获取玩家的坐标
POINTGetGamerPosition()
{
POINTpos={-1,-1};
for(inti=0;i<10;i++)
{
for(intj=0;j<12;j++)
{
if(g_map[g_nCurrentLevel][i][j]==6||g_map[g_nCurrentLevel][i][j]==9)
{
pos.x=i;
pos.y=j;
returnpos;
}
}
}
returnpos;
}
//上
voidUp()
{
//获取玩家坐标
POINTpos=GetGamerPosition();
//1.人的前面是空地
if(g_map[g_nCurrentLevel][pos.x-1][pos.y]==0)
{
g_map[g_nCurrentLevel][pos.x-1][pos.y]=6;//空地改为人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//2,人前是目的地
if(g_map[g_nCurrentLevel][pos.x][pos.y]==3)
{
g_map[g_nCurrentLevel][pos.x-1][pos.y]=9;//人在目的地
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//3.人前是箱子
if(g_map[g_nCurrentLevel][pos.x-1][pos.y]==4)
{
//a.箱子前面是空地
if(g_map[g_nCurrentLevel][pos.x-2][pos.y]==0)
{
g_map[g_nCurrentLevel][pos.x-2][pos.y]=4;//空地变箱子
g_map[g_nCurrentLevel][pos.x-1][pos.y]=6;//箱子变人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//b.箱子前面是目的地
if(g_map[g_nCurrentLevel][pos.x-2][pos.y]==3)
{
g_map[g_nCurrentLevel][pos.x-2][pos.y]=7;//箱子到达目的地重合
g_map[g_nCurrentLevel][pos.x-1][pos.y]=6;//箱子位子变成人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
}
//4.人的前面是箱子和目的地的重合
if(g_map[g_nCurrentLevel][pos.x-1][pos.y]==7)
{
//a.箱子前面是空地
if(g_map[g_nCurrentLevel][pos.x-2][pos.y]==0)
{
g_map[g_nCurrentLevel][pos.x-2][pos.y]=4;
g_map[g_nCurrentLevel][pos.x-1][pos.y]=6;
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;
}
//b.箱子前面是目的地
if(g_map[g_nCurrentLevel][pos.x-2][pos.y]==3)
{
g_map[g_nCurrentLevel][pos.x-2][pos.y]=7;//箱子到达目的地
g_map[g_nCurrentLevel][pos.x-1][pos.y]=9;//箱子变成人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
}
}
//下
voidDown()
{
//获取玩家坐标
POINTpos=GetGamerPosition();
//1.人的前面是空地
if(g_map[g_nCurrentLevel][pos.x+1][pos.y]==0)
{
g_map[g_nCurrentLevel][pos.x+1][pos.y]=6;//空地改为人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//2,人前是目的地
if(g_map[g_nCurrentLevel][pos.x+1][pos.y]==3)
{
g_map[g_nCurrentLevel][pos.x+1][pos.y]=9;//人在目的地
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//3.人前是箱子
if(g_map[g_nCurrentLevel][pos.x+1][pos.y]==4)
{
//a.箱子前面是空地
if(g_map[g_nCurrentLevel][pos.x+2][pos.y]==0)
{
g_map[g_nCurrentLevel][pos.x+2][pos.y]=4;//空地变箱子
g_map[g_nCurrentLevel][pos.x+1][pos.y]=6;//箱子变人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//b.箱子前面是目的地
if(g_map[g_nCurrentLevel][pos.x+2][pos.y]==3)
{
g_map[g_nCurrentLevel][pos.x+2][pos.y]=7;//箱子到达目的地重合
g_map[g_nCurrentLevel][pos.x+1][pos.y]=6;//箱子位子变成人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
}
//4.人的前面是箱子和目的地的重合
if(g_map[g_nCurrentLevel][pos.x+1][pos.y]==7)
{
//a.箱子前面是空地
if(g_map[g_nCurrentLevel][pos.x+2][pos.y]==0)
{
g_map[g_nCurrentLevel][pos.x+2][pos.y]=4;
g_map[g_nCurrentLevel][pos.x-1][pos.y]=6;
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;
}
//b.箱子前面是目的地
if(g_map[g_nCurrentLevel][pos.x+2][pos.y]==3)
{
g_map[g_nCurrentLevel][pos.x+2][pos.y]=7;//箱子到达目的地
g_map[g_nCurrentLevel][pos.x+1][pos.y]=9;//箱子变成人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
}
}
voidLeft()
{
//获取玩家坐标
POINTpos=GetGamerPosition();
//1.人的前面是空地
if(g_map[g_nCurrentLevel][pos.x][pos.y-1]==0)
{
g_map[g_nCurrentLevel][pos.x][pos.y-1]=6;//空地改为人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//2,人前是目的地
if(g_map[g_nCurrentLevel][pos.x][pos.y-1]==3)
{
g_map[g_nCurrentLevel][pos.x][pos.y-1]=9;//人站在目的地
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//3.人前是箱子
if(g_map[g_nCurrentLevel][pos.x][pos.y-1]==4)
{
//a.箱子前面是空地
if(g_map[g_nCurrentLevel][pos.x][pos.y-2]==0)
{
g_map[g_nCurrentLevel][pos.x][pos.y-2]=4;//空地变箱子
g_map[g_nCurrentLevel][pos.x][pos.y-1]=6;//箱子变人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
//b.箱子前面是目的地
if(g_map[g_nCurrentLevel][pos.x][pos.y-2]==3)
{
g_map[g_nCurrentLevel][pos.x][pos.y-2]=7;//箱子到达目的地重合
g_map[g_nCurrentLevel][pos.x][pos.y-1]=6;//箱子位子变成人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;//改成目的地
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;//改成空地
}
}
//4.人的前面是箱子和目的地的重合
if(g_map[g_nCurrentLevel][pos.x][pos.y-1]==7)
{
//a.箱子前面是空地
if(g_map[g_nCurrentLevel][pos.x][pos.y-2]==0)
{
g_map[g_nCurrentLevel][pos.x][pos.y-2]=4;
g_map[g_nCurrentLevel][pos.x][pos.y-1]=6;
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLevel][pos.x][pos.y]=3;
else
g_map[g_nCurrentLevel][pos.x][pos.y]=0;
}
//b.箱子前面是目的地
if(g_map[g_nCurrentLevel][pos.x][pos.y-2]==3)
{
g_map[g_nCurrentLevel][pos.x][pos.y-2]=7;//箱子到达目的地
g_map[g_nCurrentLevel][pos.x][pos.y-1]=9;//箱子变成人
//如果人原来站在目的地上面
if(g_map[g_nCurrentLevel][pos.x][pos.y]==9)
g_map[g_nCurrentLe