\n";
cout<<"1.进行下一关\n"
"2.返回主菜单\n";
charnext=getch();
system("cls");
if(next=='1')
flag=true;
level++;
break;
}
}
}
}
推箱子方法类:
头文件
#ifndefPush_H_
#definePush_H_
#include"Map.h"
classPush
{
private:
intposX;
intposY;
public:
Push();
voidgetPos(Map&myMap);
voidtoLeft(Map&myMap);//向左推
voidtoRight(Map&myMap);//向右推
voidtoTop(Map&myMap);//向上推
voidtoBottom(Map&myMap);//向下推
};
#endif
CPP文件:
#include"Push.h"
Push:
:
Push()
{
}
voidPush:
:
getPos(Map&myMap)
{
//myMap=Map();
posX=myMap.getPersonX();
posY=myMap.getPersonY();
}
voidPush:
:
toLeft(Map&myMap)
{
intpresentPos,nextPos,lastPos;
presentPos=myMap.getUnit(posX,posY);
if(presentPos==2)
{
nextPos=myMap.getUnit(posX,posY-1);
if(nextPos==0)
{
posY--;
myMap.setUnit(posX,posY+1,0);
myMap.setUnit(posX,posY,2);
}
elseif(nextPos==3)
{
lastPos=myMap.getUnit(posX,posY-2);
if(lastPos==0)
{
posY--;
myMap.setUnit(posX,posY+1,0);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX,posY-1,3);
}
elseif(lastPos==4)
{
posY--;
myMap.setUnit(posX,posY+1,0);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX,posY-1,7);
}
}
elseif(nextPos==4)
{
posY--;
myMap.setUnit(posX,posY+1,0);
myMap.setUnit(posX,posY,6);
}
elseif(nextPos==7)
{
lastPos=myMap.getUnit(posX,posY-2);
if(lastPos==0)
{
posY--;
myMap.setUnit(posX,posY+1,0);
myMap.setUnit(posX,posY,6);
myMap.setUnit(posX,posY-1,3);
}
}
}
elseif(presentPos==6)
{
nextPos=myMap.getUnit(posX,posY-1);
if(nextPos==0)
{
posY--;
myMap.setUnit(posX,posY+1,4);
myMap.setUnit(posX,posY,2);
}
elseif(nextPos==3)
{
lastPos=myMap.getUnit(posX,posY-2);
if(lastPos==0)
{
posY--;
myMap.setUnit(posX,posY+1,4);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX,posY-1,3);
}
}
}
}
voidPush:
:
toRight(Map&myMap)
{
intpresentPos,nextPos,lastPos;
presentPos=myMap.getUnit(posX,posY);
if(presentPos==2)
{
nextPos=myMap.getUnit(posX,posY+1);
if(nextPos==0)
{
posY++;
myMap.setUnit(posX,posY-1,0);
myMap.setUnit(posX,posY,2);
}
elseif(nextPos==3)
{
lastPos=myMap.getUnit(posX,posY+2);
if(lastPos==0)
{
posY++;
myMap.setUnit(posX,posY-1,0);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX,posY+1,3);
}
elseif(lastPos==4)
{
posY++;
myMap.setUnit(posX,posY-1,0);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX,posY+1,7);
}
}
elseif(nextPos==4)
{
posY++;
myMap.setUnit(posX,posY-1,0);
myMap.setUnit(posX,posY,6);
}
elseif(nextPos==7)
{
lastPos=myMap.getUnit(posX,posY+2);
if(lastPos==0)
{
posY++;
myMap.setUnit(posX,posY-1,0);
myMap.setUnit(posX,posY,6);
myMap.setUnit(posX,posY+1,3);
}
}
}
elseif(presentPos==6)
{
nextPos=myMap.getUnit(posX,posY+1);
if(nextPos==0)
{
posY++;
myMap.setUnit(posX,posY-1,4);
myMap.setUnit(posX,posY,2);
}
if(nextPos==3)
{
lastPos=myMap.getUnit(posX,posY+2);
if(lastPos==0)
{
posY++;
myMap.setUnit(posX,posY-1,4);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX,posY+1,3);
}
}
}
}
voidPush:
:
toTop(Map&myMap)
{
intpresentPos,nextPos,lastPos;
presentPos=myMap.getUnit(posX,posY);
if(presentPos==2)
{
nextPos=myMap.getUnit(posX-1,posY);
if(nextPos==0)
{
posX--;
myMap.setUnit(posX+1,posY,0);
myMap.setUnit(posX,posY,2);
}
elseif(nextPos==3)
{
lastPos=myMap.getUnit(posX-2,posY);
if(lastPos==0)
{
posX--;
myMap.setUnit(posX+1,posY,0);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX-1,posY,3);
}
elseif(lastPos==4)
{
posX--;
myMap.setUnit(posX+1,posY,0);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX-1,posY,7);
}
}
elseif(nextPos==4)
{
posX--;
myMap.setUnit(posX+1,posY,0);
myMap.setUnit(posX,posY,6);
}
elseif(nextPos==7)
{
lastPos=myMap.getUnit(posX-2,posY);
if(lastPos==0)
{
posX--;
myMap.setUnit(posX+1,posY,0);
myMap.setUnit(posX,posY,6);
myMap.setUnit(posX-1,posY,3);
}
}
}
elseif(presentPos==6)
{
nextPos=myMap.getUnit(posX-1,posY);
if(nextPos==0)
{
posX--;
myMap.setUnit(posX+1,posY,4);
myMap.setUnit(posX,posY,2);
}
if(nextPos==3)
{
lastPos=myMap.getUnit(posX-2,posY);
if(lastPos==0)
{
posX--;
myMap.setUnit(posX+1,posY,4);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX-1,posY,3);
}
}
}
}
voidPush:
:
toBottom(Map&myMap)
{
intpresentPos,nextPos,lastPos;
presentPos=myMap.getUnit(posX,posY);
if(presentPos==2)
{
nextPos=myMap.getUnit(posX+1,posY);
if(nextPos==0)
{
posX++;
myMap.setUnit(posX-1,posY,0);
myMap.setUnit(posX,posY,2);
}
elseif(nextPos==3)
{
lastPos=myMap.getUnit(posX+2,posY);
if(lastPos==0)
{
posX++;
myMap.setUnit(posX-1,posY,0);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX+1,posY,3);
}
elseif(lastPos==4)
{
posX++;
myMap.setUnit(posX-1,posY,0);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX+1,posY,7);
}
}
elseif(nextPos==4)
{
posX++;
myMap.setUnit(posX-1,posY,0);
myMap.setUnit(posX,posY,6);
}
elseif(nextPos==7)
{
lastPos=myMap.getUnit(posX+2,posY);
if(lastPos==0)
{
posX++;
myMap.setUnit(posX-1,posY,0);
myMap.setUnit(posX,posY,6);
myMap.setUnit(posX+1,posY,3);
}
}
}
elseif(presentPos==6)
{
nextPos=myMap.getUnit(posX+1,posY);
if(nextPos==0)
{
posX++;
myMap.setUnit(posX-1,posY,4);
myMap.setUnit(posX,posY,2);
}
if(nextPos==3)
{
lastPos=myMap.getUnit(posX+2,posY);
if(lastPos==0)
{
posX++;
myMap.setUnit(posX-1,posY,4);
myMap.setUnit(posX,posY,2);
myMap.setUnit(posX+1,posY,3);
}
}
}
}
地图类:
#ifndefMAP_H_
#defineMAP_H_
constintSIZE=10;
classMap
{
private:
intmap[SIZE][SIZE];
intpersonX;
intpersonY;
intlevel;
public:
Map();
intgetPersonX();
intgetPersonY();
intgetLevel();//得到关卡
voidsetLevel(intl);//设置关卡
intgetUnit(intx,inty);//得到单元值
voidsetUnit(intx,inty,intval);//设置单元值
voiddownloadMap();//载入地图
voidfindPerson();//得到人物的位置
voidprintMap(intlevel);//打印地图
boolis_win();//判段是否过关
};
#endif
CPP文件
#include"Map.h"
#include
#include
#include
#include
usingnamespacestd;
//externconstintSIZE;
Map:
:
Map()
{
}
voidMap:
:
downloadMap()
{
charname[20]={"map"};
charstr[10];
itoa(level,str,10);
strcat(name,str);
strcat(name,".txt");
ifstreammapFile;
mapFile.open(name);
if(!
mapFile.is_open())
{
cout<<"无法打开地图文件!
\n";
}
for(inti=0;i{
for(intj=0;jmapFile>>map[i][j];
}
mapFile.close();
findPerson();
}
voidMap:
:
findPerson()
{
for(inti=0;ifor(intj=0;jif(map[i][j]==2)
{
personX=i;
personY=j;
return;
}
}
voidMap:
:
printMap(intlevel)
{
inti,j;
printf("=======第%d关======\n",level);
for(i=0;i{
for(j=0;j{
switch(map[i][j])
{
case0:
printf("");break;
case1:
printf("■");break;
case2:
case6:
printf("☆");break;
case3:
case7:
printf("●");break;
case4:
printf("○");
}
}
printf("\n");
}
if(!
is_win())
printf("==请按q键返回主菜单==\n");
}
intMap:
:
getPersonX()
{
returnpersonX;
}
intMap:
:
getPersonY()
{
returnpersonY;
}
intMap:
:
getLevel()
{
returnlevel;
}
voidMap:
:
setLevel(intl)
{
level=l;
}
intMap:
:
getUnit(intx,inty)
{
returnmap[x][y];
}
voidMap:
:
setUnit(intx,inty,intval)
{
map[x][y]=val;
}
boolMap:
:
is_win()
{
for(inti=0;ifor(intj=0;jif(map[i][j]==3)
returnfalse;
returntrue;
}