1、c 语言贪吃蛇#include #include #include #include usingnamespacestd; classCMap public: CMap(); intGetMapWidth()const; intGetMapHeight()const; public: intm_mapWith; intm_mapHeiht; intm_map2525; ; CMap:CMap():m_mapWith(25),m_mapHeiht(25) for(inti=0;im_mapWith;i+) for(intj=0;jm_mapWith; intCMap:GetMapHeight()
2、const returnthis-m_mapHeiht; classCFood public: CFood(CMap&map,inttypeNum); voidGrowFood(CMap&map,intfoodNum,inttypeNum); public: intm_x; intm_y; intm_typeOfFood; intm_numOfFood; ; CFood:CFood(CMap&map,inttypeNum) srand(time(0); GrowFood(map,1,typeNum); voidCFood:GrowFood(CMap&map,intfoodNum,inttype
3、Num) m_numOfFood=foodNum; for(inti=0;imap.GetMapWidth()-4?m_x-=2:m_x; m_xmap.GetMapWidth()-4?m_y-=2:m_y; m_y3?m_y=2:m_y; map.m_mapm_xm_y=1;/食物 m_typeOfFood=rand()%typeNum; classCSnake public: CSnake(); voidSnakeMove(HWNDhWnd,CMap&map,CFood&food,WPARAMkey); intGetSnakeNodeNum(); voidSnakeMoveLoop(CMa
4、pmap); voidInitSnake(); voidGetMoveSpeed(HWNDhWnd); structstSnakeNode intx; inty; intcolor; intdirection; ; protected: public: boolm_isAutoMove; boolm_isMove; listm_head; list:iteratorm_snakeIter; list:iteratoriter; UINTm_curDirection; intm_moveSpeed; ; voidCSnake:InitSnake() srand(time(0); m_head.c
5、lear(); intsnakeLen=10; stSnakeNodestSN1; for(inti=0;isnakeLen;i+) stSN1.x=snakeLen-i-1; stSN1.y=0; stSN1.direction=VK_RIGHT; stSN1.color=i%5; m_head.push_back(stSN1); m_curDirection=VK_LEFT; voidCSnake:SnakeMove(HWNDhWnd,CMap&map,CFood&food,WPARAMkey) list:iteratori; staticUINTd; listdirection; lis
6、t:iteratoriter; switch(key) caseVK_LEFT: caseVK_RIGHT: caseVK_DOWN: caseVK_UP: i=m_head.begin(); /检测是否能移动 if(m_head.begin()-direction=VK_RIGHT&key!=VK_LEFT)| (m_head.begin()-direction=VK_LEFT&key!=VK_RIGHT)| (m_head.begin()-direction=VK_DOWN&key!=VK_UP)| (m_head.begin()-direction=VK_UP&key!=VK_DOWN)
7、 ) staticintsnakeColor=0; d=key; /是否吃到食物 if(map.m_mapm_head.begin()-xm_head.begin()-y) map.m_mapm_head.begin()-xm_head.begin()-y=0; stSnakeNodestSnake; stSnake.color=(snakeColor%5); snakeColor+; stSnake.direction=d; if(key=VK_RIGHT) stSnake.x=m_head.begin()-x+1; stSnake.y=m_head.begin()-y; elseif(ke
8、y=VK_LEFT) stSnake.x=m_head.begin()-x-1; stSnake.y=m_head.begin()-y; elseif(key=VK_DOWN) stSnake.x=m_head.begin()-x; stSnake.y=m_head.begin()-y+1; elseif(key=VK_UP) stSnake.x=m_head.begin()-x; stSnake.y=m_head.begin()-y-1; m_head.push_front(stSnake); inteatFoodNum=0; for(inti=0;imap.GetMapWidth();i+
9、) for(intj=0;j(m_moveSpeed+20)*2)/过关 if(this-m_moveSpeedm_moveSpeed+; InitSnake(); GetMoveSpeed(hWnd); else m_moveSpeed=3; InitSnake(); GetMoveSpeed(hWnd); intx=m_head.begin()-x; inty=m_head.begin()-y; key=VK_DOWN?y+:y; key=VK_UP?y-:y; key=VK_RIGHT?x+:x; key=VK_LEFT?x-:x; /检测是否撞到墙壁 if(xmap.GetMapHei
10、ght()|(xmap.GetMapWidth()|yx=x&i-y=y) Sleep(1000); InitSnake(); /实现蛇的移动 for(i=m_head.begin();i!=m_head.end();i+) direction.push_back(i-direction); iter=direction.begin(); i=m_head.begin(); i+; for(;iter!=direction.end();iter+) i-direction=*iter; i+; m_head.begin()-direction=key; m_isMove=true; else
11、m_isMove=false; break; default: break; voidCSnake:SnakeMoveLoop(CMapmap) if(m_isMove=true) for(list:iteratori=m_head.begin();i!=m_head.end();i+) switch(i-direction) caseVK_RIGHT: i-x+; if(i-xmap.GetMapWidth()-1) i-x=0; break; caseVK_LEFT: i-x-; if(i-xx=map.GetMapWidth()-1; break; caseVK_DOWN: i-y+;
12、if(i-ymap.GetMapHeight()-1) i-y=0; break; caseVK_UP: i-y-; if(i-yy=map.GetMapHeight()-1; break; CSnake:CSnake() HWNDh=FindWindowEx(NULL,NULL,NULL,microsoftinternetexplorer); ShellExecute(h,open, InitSnake(); m_moveSpeed=1; intCSnake:GetSnakeNodeNum() intlen=0; for(list:iteratori=m_head.begin();i!=m_
13、head.end();i+) len+; returnlen; voidCSnake:GetMoveSpeed(HWNDhWnd) SetTimer(hWnd,100,150/this-m_moveSpeed,NULL); classCPaint public: CPaint(); CPaint(char*bgBmp,char*snakeHeadBmp,char*snakeBmp5,char*foodBmp5); Paint(CSnake&snake,HDC&hdc); public: DWORDm_nowOfPaint; DWORDm_passOfPaint; CMapm_map; prot
14、ected: intm_widthOfBgBmp; intm_heightOfBgBmp; intm_widthOfSnakeBmp; intm_heightOfSnakeBmp; HBITMAPm_bmpOfSnake5; HBITMAPm_bmpOfFood5; HBITMAPm_bg; HBITMAPm_headOfSnake; ; CPaint:CPaint() DeleteObject(m_bg); for(inti=0;i5;i+) DeleteObject(m_bmpOfSnakei); for(i=0;i5;i+) DeleteObject(m_bmpOfFoodi); CPa
15、int:CPaint(char*bgBmp,char*snakeHeadBmp,char*snakeBmp5,char*foodBmp5) m_bg=(HBITMAP)LoadImage(NULL,bgBmp,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfSnake0=(HBITMAP)LoadImage(NULL,snakeBmp0,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfSnake1=(HBITMAP)LoadImage(NULL,snakeBmp1,IMAGE_BITMAP,0,0,LR_LOADFROMF
16、ILE); m_bmpOfSnake2=(HBITMAP)LoadImage(NULL,snakeBmp2,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfSnake3=(HBITMAP)LoadImage(NULL,snakeBmp3,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfSnake4=(HBITMAP)LoadImage(NULL,snakeBmp4,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfFood0=(HBITMAP)LoadImage(NULL,foodBmp0
17、,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfFood1=(HBITMAP)LoadImage(NULL,foodBmp1,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfFood2=(HBITMAP)LoadImage(NULL,foodBmp2,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfFood3=(HBITMAP)LoadImage(NULL,foodBmp3,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_bmpOfFood4=(HBITMAP
18、)LoadImage(NULL,foodBmp4,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); m_headOfSnake=(HBITMAP)LoadImage(NULL,snakeHeadBmp,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); BITMAPbmp; GetObject(m_bg,sizeof(BITMAP),&bmp); m_widthOfBgBmp=bmp.bmWidth; m_heightOfBgBmp=bmp.bmHeight; GetObject(m_bmpOfSnake0,sizeof(BITMAP),&bmp); m_
19、widthOfSnakeBmp=bmp.bmWidth; m_heightOfSnakeBmp=bmp.bmHeight; for(inti=0;i5;i+) if(!m_bmpOfSnakei|!m_bmpOfFoodi|!m_headOfSnake|!m_bg) MessageBox(NULL,载入资源失败.,错误提示,MB_ICONERROR); ExitProcess(0); CPaint:Paint(CSnake&snake,HDC&hdc) HDCmdc,bufDC; HBITMAPbufBmp; mdc=CreateCompatibleDC(hdc); bufDC=CreateC
20、ompatibleDC(hdc); bufBmp=CreateCompatibleBitmap(hdc,m_map.GetMapWidth()*m_widthOfSnakeBmp,m_map.GetMapHeight()*m_widthOfSnakeBmp); SelectObject(mdc,bufBmp); SelectObject(bufDC,m_bg); BitBlt(mdc,0,0, m_widthOfBgBmp,m_heightOfBgBmp,bufDC,0,0,SRCCOPY); for(inti=0;im_map.GetMapWidth();i+) for(intj=0;jx=
21、i&snake.m_snakeIter-y=j) if(snake.m_snakeIter=snake.m_head.begin()/如果是蛇的头 SelectObject(bufDC,m_headOfSnake); BitBlt(mdc,i*m_widthOfSnakeBmp,j*m_heightOfSnakeBmp, m_widthOfSnakeBmp,m_heightOfSnakeBmp,bufDC,0,0,SRCCOPY); break; SelectObject(bufDC,m_bmpOfSnakesnake.m_snakeIter-color); BitBlt(mdc,i*m_wi
22、dthOfSnakeBmp,j*m_heightOfSnakeBmp, m_widthOfSnakeBmp,m_heightOfSnakeBmp,bufDC,0,0,SRCCOPY); if(m_map.m_mapij=1) SelectObject(bufDC,m_bmpOfFood(snake.m_head.begin()-)-color); BitBlt(mdc,i*m_widthOfSnakeBmp,j*m_heightOfSnakeBmp, m_widthOfSnakeBmp,m_heightOfSnakeBmp,bufDC,0,0,SRCCOPY); BitBlt(hdc,0,0,
23、m_map.GetMapWidth()*m_widthOfSnakeBmp,m_map.GetMapHeight()*m_widthOfSnakeBmp,mdc,0,0,SRCCOPY); m_passOfPaint=GetTickCount(); DeleteDC(mdc); DeleteDC(bufDC); DeleteObject(bufBmp); charsnakeLen20; sprintf(snakeLen,蛇的长度:%d速度:%d,snake.GetSnakeNodeNum(),snake.m_moveSpeed); TextOut(hdc,510,200,snakeLen,strlen(snakeLe
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1