基于C语言实现推箱子游戏
本文实例为大家分享了C语言实现推箱子游戏的具体代码,供大家参考,具体内容如下
代码在vs2013上测试运行。
思想:
1):地图用二维数组实现,箱子、墙壁、人等事物用不同的数字表示,遍历二维数组,遇到不同的数字打印相应的图案即可。
2):按键移动原理:判断要移动的方向是怎样的障碍物,如果理论上可以移动的话,只需把对应位置的数字作相应更改即可。
#include#include #include #include //二维数组:0表示地图上的空地,1代表墙壁,3代表箱子的目的地,4代表箱子,6代表人,7代表箱子与目的地重合;9代表人在箱子的目的地 intg_map[10][12]= { {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}, {0,1,1,1,1,1,0,0,0,0,0,0} };//g_开头代表全局变量m_代表成员变量n:整形 voiddrawMap();//画地图 voidup();//上移 voiddown();//下移 voidleft();//左移 voidright();//右移 voidgameOver();//结束游戏 POINTGetGamerPostion();//获取玩家坐标 intmain() { //设置窗口标题 SetConsoleTitleA("推箱子"); //修改窗口大小 system("modeconcols=30lines=12"); while(1) { //清屏 system("cls"); //打印地图 drawMap(); gameOver(); charch=_getch();//从控制台获取输入getchar()函数获取按键后要按enter确认,并且输入的字符要在控制台上显示 switch(ch) { 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[i][j]) { case0://空地 printf(""); break; case1://墙壁 printf("■"); break; case3://箱子的目的地 printf("☆"); break; case4://箱子 printf("□"); break; case6://人 printf("♀"); break; case7://箱子与目的地重合 printf("★"); break; case9://人站在目的地 printf("♀"); break; } } printf("\n"); } } voidup() { //获取玩家坐标 POINTpos=GetGamerPostion(); //1.人的前面是空地 if(g_map[pos.x-1][pos.y]==0) { g_map[pos.x-1][pos.y]=6;//空地变为人 if(g_map[pos.x][pos.y]==9)//还原原来人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //2.人的前面是目的地 if(g_map[pos.x-1][pos.y]==3) { g_map[pos.x-1][pos.y]=9;//原来目的地的位置变为人站在目的地 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //3.人的前面是箱子, if(g_map[pos.x-1][pos.y]==4) { //a.箱子前面是空地 if(g_map[pos.x-2][pos.y]==0) { g_map[pos.x-2][pos.y]=4;//空地变为箱子 g_map[pos.x-1][pos.y]=6;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //b.箱子前面目的地 if(g_map[pos.x-2][pos.y]==3) { g_map[pos.x-2][pos.y]=7;//目的地变为箱子和目的地重合 g_map[pos.x-1][pos.y]=6;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } } //4.人的前面是箱子和目的地的重合 if(g_map[pos.x-1][pos.y]==7) { //a.箱子和目的地的重合前面是空地 if(g_map[pos.x-2][pos.y]==0) { g_map[pos.x-2][pos.y]=4;//空地变为箱子 g_map[pos.x-1][pos.y]=9;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //b.箱子和目的地的重合前面是另一个目的地 if(g_map[pos.x-2][pos.y]==3) { g_map[pos.x-2][pos.y]=7;//目的地变为箱子和目的地重合 g_map[pos.x-1][pos.y]=9;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } } } //下移 voiddown() { //获取玩家坐标 POINTpos=GetGamerPostion(); //1.人的前面是空地 if(g_map[pos.x+1][pos.y]==0) { g_map[pos.x+1][pos.y]=6;//空地变为人 if(g_map[pos.x][pos.y]==9)//还原原来人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //2.人的前面是目的地 if(g_map[pos.x+1][pos.y]==3) { g_map[pos.x+1][pos.y]=9;//原来目的地的位置变为人站在目的地 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //3.人的前面是箱子, if(g_map[pos.x+1][pos.y]==4) { //a.箱子前面是空地 if(g_map[pos.x+2][pos.y]==0) { g_map[pos.x+2][pos.y]=4;//空地变为箱子 g_map[pos.x+1][pos.y]=6;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //b.箱子前面目的地 if(g_map[pos.x+2][pos.y]==3) { g_map[pos.x+2][pos.y]=7;//目的地变为箱子和目的地重合 g_map[pos.x+1][pos.y]=6;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } } //4.人的前面是箱子和目的地的重合 if(g_map[pos.x+1][pos.y]==7) { //a.箱子和目的地的重合前面是空地 if(g_map[pos.x+2][pos.y]==0) { g_map[pos.x+2][pos.y]=4;//空地变为箱子 g_map[pos.x+1][pos.y]=9;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //b.箱子和目的地的重合前面是另一个目的地 if(g_map[pos.x+2][pos.y]==3) { g_map[pos.x+2][pos.y]=7;//目的地变为箱子和目的地重合 g_map[pos.x+1][pos.y]=9;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } } } //右移 voidright() { //获取玩家坐标 POINTpos=GetGamerPostion(); //1.人的前面是空地 if(g_map[pos.x][pos.y+1]==0) { g_map[pos.x][pos.y+1]=6;//空地变为人 if(g_map[pos.x][pos.y]==9)//还原原来人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //2.人的前面是目的地 if(g_map[pos.x][pos.y+1]==3) { g_map[pos.x][pos.y+1]=9;//原来目的地的位置变为人站在目的地 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //3.人的前面是箱子, if(g_map[pos.x][pos.y+1]==4) { //a.箱子前面是空地 if(g_map[pos.x][pos.y+2]==0) { g_map[pos.x][pos.y+2]=4;//空地变为箱子 g_map[pos.x][pos.y+1]=6;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //b.箱子前面目的地 if(g_map[pos.x][pos.y+2]==3) { g_map[pos.x][pos.y+2]=7;//目的地变为箱子和目的地重合 g_map[pos.x][pos.y+1]=6;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } } //4.人的前面是箱子和目的地的重合 if(g_map[pos.x][pos.y+1]==7) { //a.箱子和目的地的重合前面是空地 if(g_map[pos.x][pos.y+2]==0) { g_map[pos.x][pos.y+2]=4;//空地变为箱子 g_map[pos.x][pos.y+1]=9;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //b.箱子和目的地的重合前面是另一个目的地 if(g_map[pos.x][pos.y+2]==3) { g_map[pos.x][pos.y+2]=7;//目的地变为箱子和目的地重合 g_map[pos.x][pos.y+1]=9;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } } } //左移 voidleft() { //获取玩家坐标 POINTpos=GetGamerPostion(); //1.人的前面是空地 if(g_map[pos.x][pos.y-1]==0) { g_map[pos.x][pos.y-1]=6;//空地变为人 if(g_map[pos.x][pos.y]==9)//还原原来人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //2.人的前面是目的地 if(g_map[pos.x][pos.y-1]==3) { g_map[pos.x][pos.y-1]=9;//原来目的地的位置变为人站在目的地 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //3.人的前面是箱子, if(g_map[pos.x][pos.y-1]==4) { //a.箱子前面是空地 if(g_map[pos.x][pos.y-2]==0) { g_map[pos.x][pos.y-2]=4;//空地变为箱子 g_map[pos.x][pos.y-1]=6;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //b.箱子前面目的地 if(g_map[pos.x][pos.y-2]==3) { g_map[pos.x][pos.y-2]=7;//目的地变为箱子和目的地重合 g_map[pos.x][pos.y-1]=6;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } } //4.人的前面是箱子和目的地的重合 if(g_map[pos.x][pos.y-1]==7) { //a.箱子和目的地的重合前面是空地 if(g_map[pos.x][pos.y-2]==0) { g_map[pos.x][pos.y-2]=4;//空地变为箱子 g_map[pos.x][pos.y-1]=9;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } //b.箱子和目的地的重合前面是另一个目的地 if(g_map[pos.x][pos.y-2]==3) { g_map[pos.x][pos.y-2]=7;//目的地变为箱子和目的地重合 g_map[pos.x][pos.y-1]=9;//原来箱子位置变为人 if(g_map[pos.x][pos.y]==9)//还原人的位置 { g_map[pos.x][pos.y]=3; } else g_map[pos.x][pos.y]=0; } } } //结束游戏 voidgameOver() { if(g_map[3][10]==7&&g_map[4][10]==7&&g_map[5][10]==7) { MessageBox(NULL,L"获得胜利",L"提示",0); } } //寻找玩家位置 POINTGetGamerPostion() { POINTpos={-1,-1};//表示没有找到玩家 for(inti=0;i<10;i++) { for(intj=0;j<12;j++) { if(g_map[i][j]==6||g_map[i][j]==9) { pos.x=i; pos.y=j; returnpos; } } } returnpos; }
是不是觉得一点都不美观?和正常的推箱子游戏差太多了?其实很简单,只需要把箱子那些图片准备好,用贴图技术贴在这个框架里就OK啦!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。