相信各位都肯定完整这种推箱子的小游戏。游戏玩法很简单,那就是一个人把所有的箱子推动到对应的位置那就可以赢了。那么我们接下来看看这个推箱子的游戏改怎么写。
char map[10][10]=
{
{'#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#',' ',' ','!',' ',' ','#'},
{'#',' ',' ',' ',' ','o',' ',' ',' ','#'},
{'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
{'#','#',' ','#','#','#',' ','#','#','#'},
{'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
{'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
{'#','#',' ','#',' ','#','#','#','#','#'},
{'#','#',' ',' ',' ',' ',' ','x','#','#'},
{'#','#','#','#','#','#','#','#','#','#'}
};
void DrawMap(){
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
cout<<map[i][j];
}
cout<<endl;
}
}
首先先画出地图,这里面的#是墙壁,x是终点,o是推动的箱子,然后!是人,空的字符就是通道。别看界面比较简陋,我们学的是算法,只要思想学会了,随便移植到哪个有界面的程序都是可以的。
int r,l; //人的下标
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
if(map[i][j]=='!'){
r=i; //r,l相当于地图的宽度和长度
l=j;
}
}
}
在一开始我们需要遍历,并且获取人的坐标。
cout<<"please enter w(up) s(down) a(left) b(right)"<<endl;
char ch;
cin>>ch;
if(ch=='w'||ch=='W'){
if(map[r-1][l]==' '){ //若往上走没有障碍物
map[r][l]==' ';
map[r-1][l]='!'; //走上去
}
if(map[r-1][l]=='o'){ //若上面有箱子
if(map[r-2][l]==' '||map[r-2][l]=='x'){ //因为要推着箱子走,所以要确保上面的上面还可以走或者到达终点
map[r-2][l]='o';
map[r-1][l]='!';
map[r][l]=' ';
}
}
}
if(ch=='s'||ch=='S'){
if(map[r+1][l]==' '){
map[r][l]=' ';
map[r+1][l]='!';
}
if(map[r+1][l]=='o'){
if(map[r+2][l]==' '||map[r+2][l]=='x'){
map[r+2][l]='o';
map[r+1][l]='!';
map[r][l]=' ';
}
}
}
if(ch=='a'||ch=='A'){
if(map[r][l-1]=' '){
map[r][l]=' ';
map[r][l-1]='!';
}
if(map[r][l-1]=='o'){
if(map[r][l-2]==' '||map[r][l-2]=='x'){
map[r][l-2]='o';
map[r][l-1]='!';
map[r][l]=' ';
}
}
}
if(ch=='d'||ch=='D'){
if(map[r][l+1]==' '){
map[r][l+1]='!';
map[r][l]=' ';
}
if(map[r][l+1]=='o'){
if(map[r][l+2]==' '||map[r][l+2]=='x'){
map[r][l+2]='o';
map[r][l+1]='!';
map[r][l]=' ';
}
}
}
这里就是进行wsad的上下左右操作。然后操作时候需要判空,判断人是否可以走动。如果是墙壁就不能走动。如果是箱子,那还有判断箱子的前一格是否可以走动,可以的话就直接推箱子了。
总的来说这种游戏并不算太难。如果是多个关卡的话,可以选择加一个关卡地图配置文件。然后让游戏策划进行配置。设计游戏的地图才是这游戏的难点所在。
有想要学习如何做游戏的,可以关注公众号:诗一样的代码,找我一起学习。