1、贪吃蛇简易代码#in clude#in elude resourcel.h#i nclude #i nclude #in clude /蛇的结构体typedef struct SNAKEint兀int y;struct SNAKE *pNext;Sn ake;/豆的结构体typedef struct BEANint兀int y;struct BEAN *pNext;Bea n;/函数原型void Creates nake(S nake *pS nake);void deleteAll(S nake *pS nake);void ShowS nake(S nake *pS nake);void
2、CreateBea n(Bea n *pBea n,Sn ake *pS nake);void ShowBea n(Bea n *pBea n);void DeleteBea n( Bea n *pBea n);void Sn akeRu n(Sn ake *pS nake);void Sn akeGrowUp(S nake *pS nake);int Can EatBea n(Sn ake *pS nake,Bea n *pBea n);int Ca nDie(S nake *pS nake);/char g_ClassName20 = ClassName;LRESULT CALLBACK
3、WndProc(HWND hwn d,UINT nM sg,WPARAM wPara m,L PARAM lParam); HBITMAP hBitMap;int CALLBACK WinMain (HINSTANCE hl nsta nee,HINSTANCE hPrel nsta nee,LPSTR pCmdLi ne,int n CmdShow)HBRUSH hBrush = CreateSolidBrush(RGB(100,100,410);HICON hlco n = Loadlco n(hl nsta nce,MAKEINTRESOURCE(IDI_w ndcon);HICON h
4、lco nsm = Loadlco n(hl nsta nce,MAKEINTRESOURCE(IDI_w ndcon sm);hBitMap = LoadBitmap(hI nsta nce,MAKEINTRESOURCE(IDB_wd nbitmap);/设计类WNDCLASSEX wn dClass;wn dClass.cbCIsExtra = NULL;wn dClass.cbSize = sizeof(w ndClass);wn dClass.cbWndExtra = NULL;wn dClass.hbrBackgro und = hBrush;wn dClass.hCursor =
5、 LoadCursor(hI nsta nce,IDC_ARROW);wn dClass.hIc on = hIc on;wn dClass.hIc onSm = hIc on sm;wn dClass.hI nsta nee = hln sta nee;wn dClass.lpfnWndProc = WndProc;wn dClass .l pszClassName = g_ClassName;wn dClass.style = CS_HREDRAW|CS_VREDRAW;wn dClass.lpszMe nu Name = NULL;/注册if (!RegisterClassEx (&wn
6、 dClass)MessageBox(NULL,注册失败”,”消息 ”,MB_OK);/创建HWND hwnd = CreateWi ndow(g_ClassName,”贪吃蛇,WS_OVERLAPPEDWINDOW,200,50,600+16,600+38,NULL,NULL, hln sta nee, NULL);if (!hw nd)MessageBox(NULL,创建失败!,消息 ”,MB_OK);/显示ShowWi ndow(hw nd, nCmdShow);/消息循环MSG msg;while (GetMessage(&msg,NULL,0,0)TranslateMessage(&
7、msg); / 翻译DispatchMessage(&msg); / 回调函数 return 0;HDC de = NULL;Bean *pBean = NULL;Snake *pSn ake = NULL;int VK = VK_RIGHT;LRESULT CALLBACK WndProc(HWND hwn d,UINT nM sg,WPARAM wPara m, LPARAM IParam) switch (nM sg)case WM_CREATE:CreateS nake(&pS nake); / 创建蛇CreateBea n(&pBea n,pSn ake);dc = GetDC(hw
8、 nd);break;case WM_KEYDOWN:switch (wParam)case VK_RETURN:/按下后就开始SetTimer(hw nd,1,150,NULL);break;case VK_UP:VK = VK_UP;break;case VK_DOWN:VK = VK_DOWN;break;case VK_LEFT:VK = VK_LEFT;break;case VK_RIGHT:VK = VK_RIGHT;break;case :KillTimer(hw nd,1);break;break;case WM_TIMER:/*创建背景*/RECT rect;GetWi nd
9、owRect(hw nd,&rect);HDC hmeDc = CreateCompatibleDC(dc);SelectObject(hmeDc,hBitMap);StretchBlt(dc,O,O,rect.right -rect.left,rect.bottom -rect.top,hmeDc,0,0,500,600,SRCCOPY);DeleteDC(hmeDc);/*背景创建结束*/各种函数if (Ca nDie(pS nake)KillTimer(hw nd,1);MessageBox(NULL,笨蛋,撞到自己身上,我死啦 r,消息”,MB_OK);if ( Can EatBea
10、n(pSn ake,pBea n)Sn akeGrowUp(pS nake);DeleteBea n(&pBea n);CreateBea n(&pBea n,pS nake);Sn akeRu n(&pSn ake);elseSn akeRu n(&pSn ake);ShowS nake(pS nake);ShowBea n( pBea n);case WM_PAINT:/*创建背景*/RECT rect;GetWi ndowRect(hw nd,&rect);HDC hmeDc = CreateCompatibleDC(dc);SelectObject(hmeDc,hBitMap);Str
11、etchBlt(dc,0,0,rect.right -rect.left,rect.bottom -rect.top,hmeDc,0,0,500,600,SRCCOPY);/*背景创建结束*/ShowSnake(pSnake); / 显示蛇ShowBean(pBean); / 显示豆DeleteDC(hmeDc);break;case WM CLOSE:deleteAII(&pSn ake);DeleteBea n(&pBea n);DestroyWi ndow(hw nd);break;case WM_DESTROY:ReleaseDC(hw nd,dc);PostQuitMessage(O
12、);break;case WM_QUIT:break;return DefWi ndowProc(hw nd, nM sg,wParam,IParam);/ 函数 / 创建蛇 Create Snake()void CreateS nake(S nake *pS nake)Snake *u = NULL,*w = NULL;int i = 3; /开始的蛇有三截int x = 0; /蛇头的初始位置int y = 0; /蛇尾的初始位置while (i -)u = (Sn ake *)maIIoc(sizeof(S nake);u-pNext = NULL;u-x = x;u-y = y;x +
13、=20;if (NULL = *pS nake)*pS nake = u;eIsew-pNext = u;w = u;/*蛇的三届创建完毕*/创建豆void CreateBea n(Bea n *pBea n,Sn ake *pS nake)Snake *ji;int x = 0; /随机的位置x坐标int y = 0; /随机的位置y坐标sran d(time(NULL);x = (un sig ned)ra nd()%29)*20;y = (un sig ned)ra nd()%29)*20;ji = pSn ake;while(pS nake)if (x = pSn ake-x) & (
14、y = pSn ake-y) x = (un sig ned)ra nd()%29)*20;y = (un sig ned)ra nd()%29)*20; pSn ake = ji;pSn ake = pSn akepNext;Bea n *u;u = (Bea n *)malloc(sizeof(Bea n);u-pNext = NULL;u-x = x;u-y = y;*pBea n = u;/删掉全部蛇void deleteAll(S nake *pS nake)Sn ake *del;while(*pS nake)del = *pS nake;(*pS nake) = (*pS nak
15、e)-pNext; free(del);/删掉豆void DeleteBea n( Bea n *pBea n)free(*pBea n);*pBean = NULL;/显示蛇void ShowS nake(S nake *pS nake)while (pS nake)Recta ngle(dc,pS nak&x,pS nak&y,pS nakex+20,pS nak&y+20); pSn ake = pSn akepNext;/显示豆void ShowBea n(Bea n *pBea n)Recta ngle(dc,pBea n-x,pBea n- y,pBear-x+20,pBea n-
16、 y+20);/贪吃蛇移动void Sn akeRu n(Sn ake *pS nake)Snake *ji, /记录变化的蛇头*rou nd; /循环遍历int x,蛇头的当前位置 x坐标y; /蛇头的当前位置 y坐标ji = *pS nake;round = *pS nake;while (round -pNext)round = round -pNext;x = roun d-x;y = roun d-y;switch(VK)case VK_UP:if (y = 0)y = 600;y -=20;break;case VK_DOWN:if (y=600)y = 0;y +=20;brea
17、k;case VK_LEFT:if (x = 0)x = 600;x -= 20;break;case VK_RIGHT:if (x = 600)x = 0;x +=20;break;*pS nake = (*pS nake)-pNext;ji-x = x;ji-y = y;ji-pNext = NULL;roun d -pNext = ji;/下一步能吃到豆吗?返回1吃到int Can EatBea n(Sn ake *pS nake,Bea n *pBea n)while (pS nake-pNext)pSn ake = pSn akepNext;if (pS nake-x=pBean-x
18、 )&(pS nake-y=pBea n-y) return 1;return 0;/长大void Sn akeGrowUp(S nake *pS nake)Sn ake *u;u = (Sn ake *)malloc(sizeof(S nake);u-pNext = NULL;u-x = pBean-x;u-y = pBea n-y;while(pS nake-pNext)pSn ake = pSn akepNext; pSn ake_pNext = u;/蛇会死吗返回1会死int Can Die(S nake *pS nake)Sn ake *ji = NULL;int x = 0,y = 0;ji = pSn ake;while (pS nake-pNext)pSn ake = pSn akepNext;x = pSn ake-x;y = pSn ake-y;switch(VK)case VK_UP:y -=20; break;case VK_DOWN:y +=20; break;case VK_LEFT:x -= 20; break;case VK_RIGHT:x +=20; break;while(ji -pNext)if (x = ji-x) & (y = ji_y) return 1;ji = ji-pNext;return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1