




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include<windows.h>#include "resource1.h"#include <stdio.h>#include <stdlib.h>#include <time.h>/蛇的結(jié)構(gòu)體typedef struct SNAKEint x;int y;struct SNAKE *pNext;Snake;/豆的結(jié)構(gòu)體typedef struct BEANint x;int y;struct BEAN *pNext;Bean;/函數(shù)原型void CreateSnake(Snake *pSnake);void dele
2、teAll(Snake *pSnake);void ShowSnake(Snake *pSnake);void CreateBean(Bean *pBean,Snake *pSnake);void ShowBean(Bean *pBean);void DeleteBean(Bean *pBean);void SnakeRun(Snake *pSnake);void SnakeGrowUp(Snake *pSnake);int CanEatBean(Snake *pSnake,Bean *pBean);int CanDie(Snake *pSnake);/char g_ClassName20 =
3、 "ClassName"LRESULT CALLBACK WndProc(HWND hwnd,UINT nMsg,WPARAM wParam,LPARAM lParam);HBITMAP hBitMap;1 / 11int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR pCmdLine, int nCmdShow)HBRUSH hBrush = CreateSolidBrush(RGB(100,100,410);HICON hIcon = LoadIcon(hInstance,MAKE
4、INTRESOURCE(IDI_wnd_icon);HICON hIconsm = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_wnd_iconsm);hBitMap = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_wdnbitmap);/設(shè)計(jì)類WNDCLASSEX wndClass;wndClass.cbClsExtra = NULL;wndClass.cbSize = sizeof(wndClass);wndClass.cbWndExtra = NULL;wndClass.hbrBackground = hBrush;
5、wndClass.hCursor = LoadCursor(hInstance,IDC_ARROW);wndClass.hIcon = hIcon;wndClass.hIconSm = hIconsm;wndClass.hInstance = hInstance;wndClass.lpfnWndProc = WndProc;wndClass.lpszClassName = g_ClassName;wndClass.style = CS_HREDRAW|CS_VREDRAW;wndClass.lpszMenuName = NULL;/注冊(cè)if (!RegisterClassEx(&wnd
6、Class)MessageBox(NULL,"注冊(cè)失敗","消息",MB_OK);/創(chuàng)建HWND hwnd = CreateWindow(g_ClassName,"貪吃蛇",WS_OVERLAPPEDWINDOW,200,50,600+16,600+38,NULL,NULL,hInstance,NULL);if (!hwnd)MessageBox(NULL,"創(chuàng)建失敗!","消息",MB_OK);/顯示ShowWindow(hwnd,nCmdShow);/消息循環(huán)MSG msg;while (G
7、etMessage(&msg,NULL,0,0)TranslateMessage(&msg);/翻譯DispatchMessage(&msg);/回調(diào)函數(shù)return 0;HDC dc = NULL;Bean *pBean = NULL;Snake *pSnake = NULL;int VK = VK_RIGHT;LRESULT CALLBACK WndProc(HWND hwnd,UINT nMsg,WPARAM wParam,LPARAM lParam)switch (nMsg)case WM_CREATE:CreateSnake(&pSnake);/創(chuàng)建蛇
8、CreateBean(&pBean,pSnake);dc = GetDC(hwnd);break;case WM_KEYDOWN:switch (wParam)case VK_RETURN:/按下后就開始SetTimer(hwnd,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(hwnd,1);b
9、reak;break;case WM_TIMER:/*創(chuàng)建背景*/RECT rect;GetWindowRect(hwnd,&rect);HDC hmeDc = CreateCompatibleDC(dc);SelectObject(hmeDc,hBitMap);StretchBlt(dc,0,0,rect.right-rect.left,rect.bottom-rect.top,hmeDc,0,0,500,600,SRCCOPY);DeleteDC(hmeDc);/*背景創(chuàng)建結(jié)束*/各種函數(shù)if (CanDie(pSnake)KillTimer(hwnd,1);MessageBox(
10、NULL,"笨蛋,撞到自己身上,我死啦!","消息",MB_OK);if ( CanEatBean(pSnake,pBean) )SnakeGrowUp(pSnake);DeleteBean(&pBean);CreateBean(&pBean,pSnake);SnakeRun(&pSnake);elseSnakeRun(&pSnake);ShowSnake(pSnake);ShowBean(pBean);case WM_PAINT:/*創(chuàng)建背景*/RECT rect;GetWindowRect(hwnd,&rect
11、);HDC hmeDc = CreateCompatibleDC(dc);SelectObject(hmeDc,hBitMap);StretchBlt(dc,0,0,rect.right-rect.left,rect.bottom-rect.top,hmeDc,0,0,500,600,SRCCOPY);/*背景創(chuàng)建結(jié)束*/ShowSnake(pSnake);/顯示蛇ShowBean(pBean);/顯示豆DeleteDC(hmeDc);break;case WM_CLOSE:deleteAll(&pSnake);DeleteBean(&pBean);DestroyWindow(
12、hwnd);break;case WM_DESTROY:ReleaseDC(hwnd,dc);PostQuitMessage(0);break;case WM_QUIT:break;return DefWindowProc(hwnd,nMsg,wParam,lParam);/函數(shù)/創(chuàng)建蛇Create Snake()void CreateSnake(Snake *pSnake)Snake *u = NULL,*w = NULL;int i = 3;/開始的蛇有三截int x = 0;/蛇頭的初始位置int y = 0;/蛇尾的初始位置while (i-)u = (Snake *)malloc(s
13、izeof(Snake);u->pNext = NULL;u->x = x;u->y = y;x +=20;if (NULL = *pSnake)*pSnake = u;elsew->pNext = u;w = u;/*蛇的三屆創(chuàng)建完畢*/創(chuàng)建豆void CreateBean(Bean *pBean,Snake *pSnake)Snake *ji;int x = 0;/隨機(jī)的位置x坐標(biāo)int y = 0;/隨機(jī)的位置y坐標(biāo)srand(time(NULL);x = (unsigned)rand()%29)*20;y = (unsigned)rand()%29)*20;ji
14、 = pSnake;while(pSnake)if (x = pSnake->x) && (y = pSnake->y) )x = (unsigned)rand()%29)*20;y = (unsigned)rand()%29)*20;pSnake = ji;pSnake = pSnake->pNext;Bean *u;u = (Bean *)malloc(sizeof(Bean);u->pNext = NULL;u->x = x;u->y = y;*pBean = u;/刪掉全部蛇void deleteAll(Snake *pSnake)S
15、nake *del;while(*pSnake)del = *pSnake;(*pSnake) = (*pSnake)->pNext;free(del);/刪掉豆void DeleteBean(Bean *pBean)free(*pBean);*pBean = NULL;/顯示蛇void ShowSnake(Snake *pSnake)while (pSnake)Rectangle(dc,pSnake->x,pSnake->y,pSnake->x+20,pSnake->y+20);pSnake = pSnake->pNext;/顯示豆void ShowBea
16、n(Bean *pBean)Rectangle(dc,pBean->x,pBean->y,pBean->x+20,pBean->y+20);/貪吃蛇移動(dòng)void SnakeRun(Snake *pSnake)Snake *ji,/記錄變化的蛇頭 *round;/循環(huán)遍歷int x,/蛇頭的當(dāng)前位置x坐標(biāo)y;/蛇頭的當(dāng)前位置y坐標(biāo)ji = *pSnake;round = *pSnake;while (round->pNext)round = round->pNext;x = round->x;y = round->y;switch(VK)case
17、VK_UP:if (y = 0)y = 600;y -=20;break;case VK_DOWN:if (y=600)y = 0;y +=20;break;case VK_LEFT:if (x = 0)x = 600;x -= 20;break;case VK_RIGHT:if (x = 600)x = 0;x +=20;break;*pSnake = (*pSnake)->pNext;ji->x = x;ji->y = y;ji->pNext = NULL;round->pNext = ji;/下一步能吃到豆嗎? 返回1吃到int CanEatBean(Sna
18、ke *pSnake,Bean *pBean)while (pSnake->pNext)pSnake = pSnake->pNext;if (pSnake->x=pBean->x)&&(pSnake->y=pBean->y)return 1;return 0;/長(zhǎng)大void SnakeGrowUp(Snake *pSnake)Snake *u;u = (Snake *)malloc(sizeof(Snake);u->pNext = NULL;u->x = pBean->x;u->y = pBean->y;while(pSnake->pNext)pSnake = pSnake->pNext;pSnake->pNext = u;/蛇會(huì)死嗎 返回1會(huì)死int CanDie(Snake *pSnake)Snake *ji = NULL;int x = 0,y = 0;ji = pSnake;whil
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 總經(jīng)理續(xù)簽合同協(xié)議
- 正規(guī)廣告制作合同協(xié)議
- 正規(guī)工程三方合同協(xié)議
- 2025年求職簽訂勞動(dòng)合同時(shí)應(yīng)注意的關(guān)鍵事項(xiàng)
- 2025設(shè)備租賃合同書范文
- 2025合同撤銷有哪些法律后果
- 2025屆江西省八所重點(diǎn)中學(xué)高三下學(xué)期4月聯(lián)考語(yǔ)文試題及答案
- 2025年的室內(nèi)設(shè)計(jì)合同范本
- 2025年石家莊年貨運(yùn)從業(yè)資格證考試題答案
- 2025機(jī)密技術(shù)合作合同范本
- 全廠接地裝置安裝施工方案
- 山東省青島市膠州市2023-2024學(xué)年高二下學(xué)期期末學(xué)業(yè)水平檢測(cè)數(shù)學(xué)試題
- 成都市2022級(jí)(2025屆)高中畢業(yè)班摸底測(cè)試(零診) 語(yǔ)文試卷(含答案)
- 作家太宰治課件
- 中國(guó)系統(tǒng)性紅斑狼瘡診療指南
- 部編人教版高中英語(yǔ)選擇性必修二教學(xué)設(shè)計(jì)全套
- 2024年青島職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)各版本
- 浙江省杭州市余杭區(qū)2023-2024學(xué)年六年級(jí)下學(xué)期期中數(shù)學(xué)試卷
- 建筑邊坡工程監(jiān)測(cè)技術(shù)標(biāo)準(zhǔn)
- 中國(guó)應(yīng)急管理的演化歷程
- 2023年江蘇省徐州市中考地理真題含解析
評(píng)論
0/150
提交評(píng)論