摘要:1.模板2.模板分析组成要素:清理墙壁人目的地框背景3.如何操作通过WASD键盘操作人,推动箱子,到达目的地。游戏结束。如果盒子卡在死角,游戏就会失败。4.如何,C++学习项目推箱子游戏 推箱子c语言课程设计

1.模板2.模板分析组成要素:清理墙壁人目的地框背景3.如何操作通过WASD键盘操作人,推动箱子,到达目的地。游戏结束。如果盒子卡在死角,游戏就会失败。4.如何绘制地图将绘图存储在数组中数组中的0代表空白1表示墙2代表人3表示盒子4表示目的地移动时人在目的地:人+目的地=2+4=6箱子在目的地:箱子+目的地=3+4+7(o)…嗯,就这样了(其实只是我做的时候做的一些笔记,等以后用的时候再看)1//先改变多字节2#include//预处理头文件3#include//控制台输入输出,定义了通过控制台进行数据输入和数据输出的函数,主要是对应一些用户通过按下键盘产生的操作4#include//图形库头文件5#include//多媒体库头文件6#pragmacomment(lib,'winmm.lib')//多媒体库8/*91.音乐播放10mciSendStringmp3wav格式音乐请勿使用网易云下载音乐11#include//多媒体库头文件12#pragmacomment(lib,'winmm.lib')//多媒体库13PlaySound只能播放WAV格式音乐142.推箱子素材:照片--jpg或bmp格式音乐15个图形库18推箱子的过程--地图--推箱子--箱子到达目的地游戏结束。20个操作每个操作对应一个功能211.准备地图材料222.推箱子233.判断游戏是否结束24数据存储部分25推箱子26空地0墙1人2盒子3目的地4(存储在数组中)27人到达目的地:人+目的地=2+4=628盒子在目的地:盒子+目的地=3+4+732*/34int地图[8][8]={350,0,1,1,1,0,0,0,360,0,1,4,1,0,0,0,370,0,1,0,1,1,1,1,381,1,1,3,0,3,4,1,391,4,0,3,2,1,1,1,401,1,1,1,3,1,0,0,410,0,0,1,4,1,0,0,420,0,0,1,1,1,0,043};//地图有8行8列,0个空地,1堵墙,2个人,3个箱子,4个目的地44//8*8地图--每张图片尺寸为80*80,总地图尺寸为640*64045IMAGEimg[6];//数组中存放了总共6个素材47voidinit()//自定义函数,用于加载素材,全局的,所有人都可以使用48{49//加载图片。窗口尺寸为640*640,小网格尺寸为80*80。50loadimage(img[0],'背景.jpg');51loadimage(img[1],'destination.jpg',80,80);//将盒子推送到目的地52loadimage(img[2],'wall.jpg',80,80);53loadimage(img[3],'角色.jpg',80,80);54loadimage(img[4],'box.jpg',80,80);55loadimage(img[5],'Genji.jpg',80,80);//清空目的地57}58voiddrawMap()//绘制地图59{60putimage(0,0,img[0]);61for(inti=0;i8;++i)//数组大小为862{63for(intj=0;j8;++j)64{65switch(map[i][j])//循环遍历数组66{67case0://没有地图的空位68打破;69箱1://墙70putimage(i*80,j*80,img[2]);//用于映射的前两个是坐标(图形库的坐标)71打破;72例2://人73putimage(i*80,j*80,img[3]);74打破;75箱3://箱76putimage(i*80,j*80,img[4]);77打破;78case4://目的地79putimage(i*80,j*80,img[5]);80休息;81case6://人+目的地82putimage(i*80,j*80,img[3]);83打破;84箱7://箱+目的地85putimage(i*80,j*80,img[1]);86打破;87}88}89}90}91voidplay()//操作部分92{93intx,y;//求出字符的位置94for(inti=0;i8;++i)95{96for(intj=0;j8;++j)97{98if(map[i][j]==2||map[i][j]==6)//等于2或6找到人99{100x=我;101y=j;//保存人的位置102}103}104}105//然后判断用户输入106//getch--获取用户密钥conion.h107switch(getch())//人移动时遇到墙无法移动。108{109case'w'://向上,可能是空地,可能是墙,可能是盒子//可能是目的地,可能是盒子加目的地110箱'W':111if(地图[x][y-1]==0||地图[x][y-1]==4)112{113地图[x][y]-=2;114地图[x][y-1]+=2;115}116elseif(map[x][y-1]==3||map[x][y-1]==7)117{118if(地图[x][y-2]==0||地图[x][y-2]==4)119{120地图[x][y]-=2;第121章地图[x][y-1]-=1;122地图[x][y-2]+=3;123}124}125打破;128case'://下载129箱'S':130if(地图[x][y+1]==0||地图[x][y+1]==4)131{132地图[x][y]-=2;133映射[x][y+1]+=2;134}135elseif(map[x][y+1]==3||map[x][y+1]==7)136{137if(地图[x][y+2]==0||地图[x][y+2]==4)138{139地图[x][y]-=2;140地图[x][y+1]-=1;141地图[x][y+2]+=3;142}143}144打破;146case'a'://向左走147案例'A':148if(map[x-1][y]==0||map[x-1][y]==4)//上方是空地或者目的地149{150map[x][y]-=2;//相当于map[x][y]=map[x][y]-2;151地图[x-1][y]+=2;//人走上来152}153elseif(map[x-1][y]==3||map[x-1][y]==7)//人的上方是一个盒子或者一个盒子加一个目的地154{155if(map[x-2][y]==0||map[x-2][y]==4)//盒子上方有空位,可以推156{157map[x][y]-=2;//人向上走158map[x-1][y]-=1;//人来+2,箱子上-3,所以是-3+2=-1159map[x-2][y]+=3;//盒子上升160}161}162打破;164case'd'://向右走165箱‘D’:166if(地图[x+1][y]==0||地图[x+1][y]==4)167{168地图[x][y]-=2;169地图[x+1][y]+=2;170}171elseif(map[x+1][y]==3||map[x+1][y]==7)172{173if(地图[x+2][y]==0||地图[x+2][y]==4)174{175地图[x][y]-=2;176地图[x+1][y]-=1;177地图[x+2][y]+=3;178}179}180断;182}185}186无效gameOver()187{188//游戏什么时候结束?189//1。赢。将所有箱子推到目的地——外面没有箱子。190//2.失去。有些盒子没有被推到目的地或者游戏超时。191int标志=0;192for(inti=0;i8;++i)193{194for(intj=0;j8;++j)195{196if(map[i][j]==3)//盒子找到了,游戏还没有赢197{198++标志;199if(map[i-1][j]==1||map[i+1][j]==1)//上面或者下面都有一个200{201if(map[i][j-1]==1||map[i][j+1]==1)//左右各有一个202{203//游戏结束失败204MessageBox(GetHWnd(),'丢失','伤心',MB_OK);205关闭图();206退出(0);207}208}209}210}211}212if(标志==0)213{214//没有盒子,游戏结束215//返回第216章217//第一个参数句柄(可以理解为指向窗口的指针)用于将窗口带到前面。您可以为其写入NULL或0。218//第二个是文本,第三个是标题,第四个是按钮[第219章]220exit(0);//表示退出程序221}223}226intmain()227{228//音乐播放示例1229//mciSendString('打开bgm.mp3',0,0,0);//打开音乐230//mciSendString('playbgm.mp3Repeat',0,0,0);//先打开再播放repeat循环231//关闭音乐停止暂停音乐暂停232//音乐播放示例2233mciSendString('openbgm.mp3aliasbgm',0,0,0);//打开音乐别名bgm并取个名字234mciSendString('播放bgm重复',0,0,0);//先打开再播放重复。236initgraph(640,640);//创建窗口237init();//加载图像239//启动界面==================================240putimage(0,0,img[0]);//背景图片241settextstyle(40,0,'宋体');242settextcolor(黑色);243setbkmode(TRANSPARENT);//字体背景透明244//或者setbkmode(1);设置背景模式设置背景模式246矩形(200,200,400,400);247outtextxy(200,200,'开始游戏');248MOUSEMSG消息;249int标志=1;250同时(标志)251{252msg=GetMouseMsg();//获取鼠标消息253switch((msg.uMsg))//判断鼠标消息254{255caseWM_LBUTTONDOWN://左键按下256if(msg.x200msg.x400msg.y200msg.y400)257{258//点击的区域在框内,可以退出循环259标志=0;260}262默认:263打破;264}265}266//outtextxy(400,400,'按任意键开始游戏');第267章270/*第271章鼠标操作272MouseHit()判断是否有鼠标消息273MOUSEMSG类型存储鼠标信息274GetMouseMsg()函数获取鼠标信息第275章276//==============================================[第278章]279while(1)//循环函数调用280{281播放();第282章283游戏结束();第284章第285章[第286章]287返回0;第288章运行结果推箱子1推箱子2推箱子3