C++小游戏BrickHit实例代码
打砖块小游戏。材料:EasyX图形库。
碰撞的处理,木板移动方法还需要优化。
//定义Circle,Brick,Broad #include#include #ifndef_PROPERTY_H_ #define_PROPERTY_H_ structCircle{ intx0,y0,r; intmvX,mvY; COLORREFcolor; virtual~Circle(){} Circle(intx0_,inty0_,intr_,intmvX_,intmvY_,COLORREFcolor_) :x0(x0_),y0(y0_),r(r_),mvX(mvX_),mvY(mvY_),color(color_){} //小球起始位置 voidprtCirl(){ setfillcolor(color); solidcircle(x0,y0,r); } //小球的移动 voidCirlMove(){ setfillcolor(BLACK); solidcircle(x0,y0,r); x0+=mvX; y0+=mvY; setfillcolor(color); solidcircle(x0,y0,r); } //判断小球是否离开宽口内。 //参数:窗口左上坐标、宽、高。 //离开返回真。 boolIsCirlQuit(intx,inty,intwidth,intheight){ if(x0-x<=r&&mvX<0){ mvX=-mvX; returnfalse; } elseif(x+width-x0<=r&&mvX>0){ mvX=-mvX; returnfalse; } elseif(y0-y<=r&&mvY<0){ mvY=-mvY; returnfalse; } elseif(y+height-y0<=r) returntrue; returnfalse; } }; structBrick{ intx0,y0; COLORREFcolor; intheight,width; virtual~Brick(){} Brick(intx0_,inty0_,intwidth_,intheight_,COLORREFcolor_) :x0(x0_),y0(y0_),width(width_),height(height_),color(color_){} //砖块的绘制 voidprtBrick(){ setfillcolor(color); solidrectangle(x0,y0,x0+width,y0+height); } //判断砖块是否与小球发生碰撞 //参数:小球 //发生碰撞返回真 boolIsCrashCirl(Circle&arg){ if(arg.x0+arg.r 0){ arg.mvY=-arg.mvY; returntrue; } returnfalse; } //木板移动 voidBroadMove(){ POINTpoint; GetCursorPos(&point); if(x0<=point.x&&point.x<=x0) return; BrickClr(); if(point.x //Main.cpp #include#include
#include"property.cpp" usingnamespacestd; constintWndW=400,WndH=400;//窗口大小 list CreatBricks(); booltheGame(list &MyBrks,Broad&MyBrd,Circle&MyCirl); intmain(){ //brick布局 list MyBrks=move(CreatBricks()); //broad:60*20,移速5,WHITE BroadMyBrd(WndW/2-30,WndH-20,60,20,5,0,WndW,WHITE); //circle:半径5,移速5,DARKGRAY CircleMyCirl(WndW/2-10,WndH-20-10,10,5,5,DARKGRAY); HWNDHwnd=initgraph(WndW,WndH); boolGameOver=theGame(MyBrks,MyBrd,MyCirl); if(GameOver) MessageBox(Hwnd,L"uWin!",L"BrickHit",MB_OK); else MessageBox(Hwnd,L"default!",L"BrickHit",MB_OK); closegraph(); return0; } //bricks的实现 list CreatBricks(){ //brick信息:5行10列,40*10 intRow=5,Col=10; intBrickW=WndW/Col; intBrickH=10; list MyBrks; boolColChoice=true; for(inti=Row-1;i>=0;i--){ ColChoice=!ColChoice; for(intj=0;j &MyBrks,Broad&MyBrd,Circle&MyCirl){ //游戏起始界面 for_each(MyBrks.begin(),MyBrks.end(),[](Brickit){it.prtBrick();}); MyBrd.prtBrick(); MyCirl.prtCirl(); //游戏循环 while(!MyBrks.empty()){ MyCirl.CirlMove(); MyBrd.BroadMove(); if(MyCirl.IsCirlQuit(0,0,WndW,WndH)) returnfalse; MyBrd.IsCrashCirl(MyCirl); autotheBrick=find_if(MyBrks.begin(),MyBrks.end(), [&MyCirl](Brickit){returnit.IsCrashCirl(MyCirl);}); if(theBrick!=MyBrks.end()){ theBrick->BrickClr(); MyBrks.erase(theBrick); } Sleep(30); } returntrue; } 总结
以上所述是小编给大家介绍的C++小游戏BrickHit实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。