用C++实现推箱子
本文实例为大家分享了C++实现推箱子游戏的具体代码,供大家参考,具体内容如下
//1.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。 // #include#include //■ #include #include usingstd::cout; constintrow=12; constintcol=13; intx=1; inty=11; intmap[row][col]={ {2,2,2,2,2,2,2,2,2,2,2,2,2}, {2,0,0,0,0,0,0,0,0,0,0,5,2}, {2,0,0,0,0,0,0,0,0,0,3,0,2}, {2,0,0,0,0,0,0,0,0,0,0,0,2}, {2,0,0,0,0,0,0,0,1,0,0,0,2}, {2,0,0,0,0,0,0,0,0,0,0,0,2}, {2,0,0,0,0,0,0,0,0,0,0,0,2}, {2,0,0,0,0,0,0,0,0,0,0,0,2}, {2,0,0,0,0,0,0,0,0,0,0,0,2}, {2,0,0,0,0,0,0,0,0,0,0,0,2}, {2,0,0,0,0,0,0,0,0,0,0,0,2}, {2,2,2,2,2,2,2,2,2,2,2,2,2}, }; voiddraw(){ inti; for(i=0;i<12;i++) { for(intj=0;j<13;j++) { switch(map[i][j]) { case0: { cout<<"";//0代表可以走的空格 break; } case1: { cout<<"★";//1代表箱子,用我就★代替了 break; } case2: { cout<<"■";//2代表了墙,不能逾越 break; } case3: { cout<<"☆"; break; } case5: { cout<<"♀";//5代表了人,可移动 break; } } } cout<<"\n"; } } voidmove(int_x,int_y){ if(map[x+_x][y+_y]==2||map[x+_x][y+_y]==3|| map[x+_x][y+_y]==5){//判断边界人不能走出墙外 return; } if(map[x+_x][y+_y]==1){ if(map[x+2*_x][y+2*_y]==2){ return; } map[x+_x][y+_y]=0; map[x+2*_x][y+2*_y]=1; move(_x,_y); return; } map[x][y]=0; x+=_x; y+=_y; map[x][y]=5; draw(); } voidstep(charo){ switch(o){ case'w':{//就像cf,cs那样,wsad代表上下左右移动 move(-1,0); break; } case's':{ move(1,0); break; } case'd':{ move(0,1); break; } case'a':{ move(0,-1); break; } } } intmain() { while(true){ draw();//根据二维数组的值来进行绘图 step(_getch());//直接获取屏幕输入 system("cls");//清屏来实现动画效果 } }
再为大家分享一段实现代码:谢谢原作者的分享
推箱子是一个经典的c++题目,用w,a,s,d移动,效果自看
#include#include #include inti,j; voiddraw_map(intmap[10][12]);//声明画图函数 intmain() { system("title李柏衡"); charinput; intcount=0;//定义记分变量 intmap[10][12]={{2,2,2,2,2,1,1,1,1,1,2,2}, {1,1,1,1,2,1,0,0,0,1,1,2}, {1,0,0,1,1,1,0,1,0,0,1,2}, {1,0,4,3,3,3,3,3,1,0,1,1}, {1,0,0,1,1,3,3,3,4,0,0,1}, {1,0,0,0,0,4,1,1,4,1,0,1}, {1,0,4,1,4,0,0,0,4,0,0,1}, {1,1,0,6,0,1,1,1,4,1,0,1}, {2,1,1,1,1,1,2,1,0,0,0,1}, {2,2,2,2,2,2,2,1,1,1,1,1} }; while(1)//死循环,等待用户命令 { system("CLS"); for(i=0;i<12;i++) { printf("%d",i); } printf("\n"); /*for(i=1;i<10;i++) { printf("%d\n",i); }*/ printf("\n"); draw_map(map); printf("当前得分:%d\n",count); //找初始位置 for(i=0;i<10;i++) { for(j=0;j<12;j++) { if(map[i][j]==6||map[i][j]==9) break; } if(map[i][j]==6||map[i][j]==9) break; } printf("您的当前坐标(%d,%d)",i,j); input=getch();//用getch()函数无需回车确认地获取用户输入,用于控制行走方向。 switch(input) { case'w': //如果人前面是空地。//0代表空地6代表人//3代表目的地 if(map[i-1][j]==0) { map[i-1][j]=6+0;//人往前走一步,ID为人的ID()加上空地的ID()。 if(map[i][j]==9)//如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。 map[i][j]=3;//将人往前走一步后原地的ID修改为空地ID()。 else map[i][j]=0;//否则原地ID修改为空地ID。 } //如果人前面是目的地。 elseif((map[i-1][j]==3)||(map[i-1][j]==9)) { map[i-1][j]=6+3;//人往前走一步,ID为人ID+目的地ID=9。 if(map[i][j]==9)//如果原地也是目的地(ID为)。 map[i][j]=3;//人走后把原地ID修改回目的地ID。 else map[i][j]=0;//否则原地ID修改为为空地ID } //如果人前面是箱子。//4代表箱子//7箱子进入目的地 elseif(map[i-1][j]==4) { //如果人前面是箱子,而箱子前面是空地。 if(map[i-2][j]==0) { map[i-2][j]=4;//人推箱子往前走一步,把空地ID修改为箱子ID() //下面是对箱子原地进行判断 if(map[i-1][j]==7)//如果箱子原地为目的地。 map[i-1][j]=9;//人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[i-1][j]=6;//否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[i][j]==9)//如果之前是目的地。 map[i][j]=3;//人走了之后修改回目的地ID。 else map[i][j]=0;//否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 elseif(map[i-2][j]==3) { map[i-2][j]=7;//ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。 count++; //下面是对箱子原先位置的判断,同上。 if(map[i-1][j]==7) map[i-1][j]=9; else map[i-1][j]=6; //下面是对人原先位置进行判断,同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 elseif(map[i-1][j]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[i-2][j]==0) { count--; map[i-2][j]=4;//把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[i-1][j]=9;//人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[i-2][j]==3) { map[i-2][j]=7;//把箱子推入了另一目的地,自然,ID也应是。 map[i-1][j]=9;//人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } } break; case's': //如果人前面是空地。 if(map[i+1][j]==0) { map[i+1][j]=6+0;//人往前走一步,ID为人的ID()加上空地的ID()。 if(map[i][j]==9)//如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。 map[i][j]=3;//将人往前走一步后原地的ID修改为空地ID()。 else map[i][j]=0;//否则原地ID修改为空地ID。 } //如果人前面是目的地。 elseif(map[i+1][j]==3) { map[i+1][j]=6+3;//人往前走一步,ID为人ID+目的地ID=9。 if(map[i][j]==9)//如果原地也是目的地(ID为)。 map[i][j]=3;//人走后把原地ID修改回目的地ID。 else map[i][j]=0;//否则原地ID修改为为空地ID } //如果人前面是箱子。 elseif(map[i+1][j]==4) { //如果人前面是箱子,而箱子前面是空地。 if(map[i+2][j]==0) { map[i+2][j]=4;//人推箱子往前走一步,把空地ID修改为箱子ID() //下面是对箱子原地进行判断 if(map[i+1][j]==7)//如果箱子原地为目的地。 map[i+1][j]=9;//人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[i+1][j]=6;//否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[i][j]==9)//如果之前是目的地。 map[i][j]=3;//人走了之后修改回目的地ID。 else map[i][j]=0;//否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 elseif(map[i+2][j]==3) { map[i-2][j]=7;//ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。 count++; //下面是对箱子原先位置的判断,同上。 if(map[i+1][j]==7) map[i+1][j]=9; else map[i+1][j]=6; //下面是对人原先位置进行判断,同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 elseif(map[i+1][j]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[i+2][j]==0) { count--; map[i+2][j]=4;//把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[i+1][j]=9;//人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[i+2][j]==3) { map[i+2][j]=7;//把箱子推入了另一目的地,自然,ID也应是。 map[i+1][j]=9;//人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } } break; case'a': //如果人前面是空地。 if(map[i][j-1]==0) { map[i][j-1]=6+0;//人往前走一步,ID为人的ID()加上空地的ID()。 if(map[i][j]==9)//如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。 map[i][j]=3;//将人往前走一步后原地的ID修改为空地ID()。 else map[i][j]=0;//否则原地ID修改为空地ID。 } //如果人前面是目的地。 elseif(map[i][j-1]==3) { map[i][j-1]=6+3;//人往前走一步,ID为人ID+目的地ID=9。 if(map[i][j]==9)//如果原地也是目的地(ID为)。 map[i][j]=3;//人走后把原地ID修改回目的地ID。 else map[i][j]=0;//否则原地ID修改为为空地ID } //如果人前面是箱子。 elseif(map[i][j-1]==4) { //如果人前面是箱子,而箱子前面是空地。 if(map[i][j-2]==0) { map[i][j-2]=4;//人推箱子往前走一步,把空地ID修改为箱子ID() //下面是对箱子原地进行判断 if(map[i][j-1]==7)//如果箱子原地为目的地。 map[i][j-1]=9;//人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[i][j-1]=6;//否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[i][j]==9)//如果之前是目的地。 map[i][j]=3;//人走了之后修改回目的地ID。 else map[i][j]=0;//否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 elseif(map[i][j-2]==3) { count++; map[i][j-2]=7;//ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。 //下面是对箱子原先位置的判断,同上。 if(map[i][j-1]==7) map[i][j-1]=9; else map[i][j-1]=6; //下面是对人原先位置进行判断,同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 elseif(map[i][j-1]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[i][j-2]==0) { count--; map[i][j-2]=4;//把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[i][j-1]=9;//人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[i][j-2]==3) { map[i][j-2]=7;//把箱子推入了另一目的地,自然,ID也应是。 map[i][j-1]=9;//人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } } break; case'd': //如果人前面是空地。 if(map[i][j+1]==0) { map[i][j+1]=6+0;//人往前走一步,ID为人的ID()加上空地的ID()。 if(map[i][j]==9)//如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。 map[i][j]=3;//将人往前走一步后原地的ID修改为空地ID()。 else map[i][j]=0;//否则原地ID修改为空地ID。 } //如果人前面是目的地。 elseif(map[i][j+1]==3) { map[i][j+1]=6+3;//人往前走一步,ID为人ID+目的地ID=9。 if(map[i][j]==9)//如果原地也是目的地(ID为)。 map[i][j]=3;//人走后把原地ID修改回目的地ID。 else map[i][j]=0;//否则原地ID修改为为空地ID } //如果人前面是箱子。 elseif(map[i][j+1]==4) { //如果人前面是箱子,而箱子前面是空地。 if(map[i][j+2]==0) { map[i][j+2]=4;//人推箱子往前走一步,把空地ID修改为箱子ID() //下面是对箱子原地进行判断 if(map[i][j+1]==7)//如果箱子原地为目的地。 map[i][j+1]=9;//人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。 else map[i][j+1]=6;//否则,人站在了原来的空地上,ID应该为+0=6。 //下面是对人原地进行判断 if(map[i][j]==9)//如果之前是目的地。 map[i][j]=3;//人走了之后修改回目的地ID。 else map[i][j]=0;//否则就是空地。 } //如果人的前面是箱子,而箱子前面是目的地。 elseif(map[i][j+2]==3) { count++; map[i][j+2]=7;//ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。 //下面是对箱子原先位置的判断,同上。 if(map[i][j+1]==7) map[i][j+1]=9; else map[i][j+1]=6; //下面是对人原先位置进行判断,同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } } //如果人前面是已经进入某目的地的箱子(ID=7)。 elseif(map[i][j+1]==7) { //如果人前面是已经进入某目的地的箱子,而箱子前面是空地。 if(map[i][j+2]==0) { count--; map[i][j+2]=4;//把箱子重新推到空地上,ID=箱子ID+空地ID=4。 map[i][j+1]=9;//人自然而然的就站在了原先的目的地上了。 //下面是对人原先地进行判断,方法同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } //如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。 if(map[i][j+2]==3) { map[i][j+2]=7;//把箱子推入了另一目的地,自然,ID也应是。 map[i][j+1]=9;//人站在了目的地上。 //下面是对人原先站立地进行判断,方法同上。 if(map[i][j]==9) map[i][j]=3; else map[i][j]=0; } } break; } if(count==8)//如果分数达到分 { system("CLS");//清屏 draw_map(map); break;//退出死循环 } } printf("\n恭喜你,过关了!!\n");//过关提示 return0; } voiddraw_map(intmap[10][12]) { for(i=0;i<10;i++) { for(j=0;j<12;j++) { switch(map[i][j]) { case0: printf("");//数字代表道路 break; case1: printf("#");//数字代表墙壁 break; case2: printf("");//数字是游戏边框的空白部分 break; case3: printf("!");//数字代表目的地 break; case4: printf("*");//数字代表箱子 break; case7: printf("$");//数字代表箱子进入目的地 break; case6: printf("@");//数字代表人 break; case9: printf("@");//数字代表人进入目的地 break; } } printf("\n");//分行输出 } }
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。