【VC++开源代码栏目提醒】:网学会员在VC++开源代码频道为大家收集整理了“VC++程序--贪吃蛇部分源代码 - 计算机教材“提供大家参考,希望对大家有所帮助!
source code includeltwindows.hgt //main.cpp include lttime.hgt includequotsnaker.hquot includequottable.hquot //游戏状态定义 define GAME_STATE_WAIT 0 //游戏等待状态 define GAME_STATE_RUN 1 //游戏运行状态 define GAME_STATE_END 2 //游戏结束状态 //界面相关物件尺寸定义 define WALL_WIDTH 80 //外墙从左部到游戏区的宽度 define WALL_HEIGHT 80 //外墙从顶部到游戏区的高度 define BMP_SCORE_BOARD_WIDTH 256 //分数位图板的宽度 define BMP_SCORE_BOARD_HEIGHT 55 //分数位图板的高度 define BMP_WALL_WIDTH 16 //墙位图的宽度 define BMP_WALL_HEIGHT 16 //墙位图的高度 LRESULT CALLBACK WndProcHWND hWndUINT message WPARAM wParamLPARAM lParam void DrawGamevoid void ShellDraw HDC hdc void GameAreaDrawHDC hdc void OnTimerUINT uTIMER_ID void StartGame void void EndGame void //创建一个桌子 CTable table int tableBlockWidth 0 //桌子的格子的宽度 int tableBlockHeight 0 //桌子的格子的高度 int iScores 0 //游戏的得分 UINT uGameState GAME_STATE_WAIT //当前游戏状态 HDC windowDC NULL //windows屏幕设备 HDC bufferDC NULL //缓冲设备环境 HDC picDC NULL //snake图像内存设备 HDC endDC NULL //游戏终结图像内存设备 HDC scoreDC NULL //分数板内存设备 HWND hAppWnd NULL //本application窗口句柄 HBITMAP picBMP NULL //snake图像位图句柄 HBITMAP bufferBMP NULL //缓冲位图句柄 HBITMAP endBMP NULL //游戏终结图像内存句柄 HBITMAP hbmpWall NULL //墙位图句柄 HBITMAP hbmpScore NULL //分数板位图句柄 HBRUSH hbrushWall NULL //墙画刷 //定时器标识 UINT uSnakeMoveTimer //蛇的移动 UINT uFoodAddTimer //水果的产生 //框架的位置数据定义 //GDI RECT 而不是 MFC CRect RECT g_ClientRect RECT g_GameValueRect int g_iClientWidth int g_iClientHeight int WINAPI WinMainHINSTANCE hCurrentInstHINSTANCE hPrevInstance PSTR lpszCmdLineint nCmdShow WNDCLASS wndClass HWND hWnd MSG msg UINT widthheight //定义窗口 wndClass.styleCS_HREDRAW CS_VREDRAW wndClass.lpfnWndProcWndProc wndClass.cbClsExtra0 wndClass.cbWndExtra0 wndClass.hInstancehCurrentInst wndClass.hIconLoadIconNULLMAKEINTRESOURCEIDI_MAIN wndClass.hCursorLoadCursorNULLIDC_ARROW wndClass.hbrBackgroundHBRUSHGetStockObjectWHITE_BRUSH wndClass.lpszMenuNameNULL wndClass.lpszClassNamequotSnake_CLASSquot //注册窗口 RegisterClassampwndClass //取整个屏幕的尺寸 widthGetSystemMetricsSM_CXSCREEN height GetSystemMetricsSM_CYSCREEN //创建窗口 hWndCreateWindow quotSnake_CLASSquot quotskyblue snakequot WS_POPUP 00 widthheight NULLNULL hCurrentInst NULL hAppWnd hWnd //显示窗口 ShowWindowhWndnCmdShow UpdateWindowhWnd //获取窗体大小 GetClientRecthAppWnd ampg_ClientRect g_iClientWidth g_ClientRect.right-g_ClientRect.left g_iClientHeight g_ClientRect.bottom-g_ClientRect.top //将游戏区域分成纵横均为20块的小方块 //并计算每块区域的大小 tableBlockWidth g_iClientWidth-2WALL_WIDTH/20 tableBlockHeight g_iClientHeight-2WALL_HEIGHT/20 //获取当前主窗口设备与windowDC关联 windowDCGetDCNULL //创建与windowDC兼容的内存设备环境 bufferDCCreateCompatibleDCwindowDC picDCCreateCompatibleDCwindowDC endDCCreateCompatibleDCwindowDC scoreDCCreateCompatibleDCwindowDC //位图的初始化或载入位图 bufferBMPCreateCompatibleBitmapwindowDCg_iClientWidthg_iClientHeight picBMPHBITMAPLoadImageNULLquotsnake.bmpquotIMAGE_BITMAP16080LR_LOADFROMFILE hbmpWallHBITMAPLoadImageNULLquotbrick.bmpquotIMAGE_BITMAP1616LR_LOADFROMFILE endBMP HBITMAPLoadImageNULLquotend.bmpquotIMAGE_BITMAP369300LR_LOADFROMFILE hbmpScoreHBITMAPLoadImageNULLquotscoreboard.bmpquotIMAGE_BITMAP26555LR_LOADFROMFILE //声明位图与设备环境的关联 SelectObjectbufferDCbufferBMP SelectObjectpicDCpicBMP SelectObjectendDCendBMP SelectObjectscoreDChbmpScore //建立画刷与其名相对应的图像的关联 //以备用刷子将墙刷出来用PatBlt实现 hbrushWall CreatePatternBrushhbmpWall StartGame whileGetMessageampmsgNULL00 TranslateMessageampmsg DispatchMessageampmsg return msg.wParam LRESULT CALLBACK WndProcHWND hWndUINT message WPARAM wParamLPARAM lParam switchmessage case WM_TIMER : OnTimerUINTwParam break case WM_KEYDOWN: switchwParam case VK_ESCAPE: exit0 break case VK_UP: table.ChangeSnakeDirectS_UP break case VK_DOWN: table.ChangeSnakeDirectS_DOWN break case VK_LEFT: table.ChangeSnakeDirectS_LEFT break case VK_RIGHT: table.ChangeSnakeDirectS_RIGHT break case VK_SPACE: if uGameState GAME_STATE_END StartGame break return 0 case WM_SETCURSOR: SetCursorNULL return 0 case WM_DESTROY: ReleaseDChWndpicDC ReleaseDChWndbufferDC ReleaseDChWndwindowDC PostQuitMessage0 return 0 return DefWindowProchWndmessagewParamlParam void DrawGamevoid //绘制外壳区域到缓冲 ShellDrawbufferDC //绘制游戏区域到缓冲 GameAreaDrawbufferDC //将整个画面从缓冲DC拷贝出屏幕 BitBltwindowDC00g_iClientWidthg_iClientHeightbufferDC00SRCCOPY void OnTimerUINT uTIMER_ID if uTIMER_ID uSnakeMoveTimer //移动蛇 table.SnakeMove //检测是否碰到身体环绕结束游戏 iftable.GetSnake-gtIsHeadTouchBodytable.GetSnake-gtGetPos0.xtable.GetSnake-gtGetPos0.y EndGame //根据蛇头所在的区域作出相应的处理 switchtable.GetDatatable.GetSnake-gtGetPos0.xtable.GetSnake-gtGetPos0.y case TB_STATE_FOOD: table.ClearFoodtable.GetSnake-gtGetPos0.xtable.GetSnake-gtGetPos0.y table.AddBlockrandtableBlockWidthrandtableBlockHeight table.GetSnake-gtAddBody iScores break case TB_STATE_BLOCK: case TB_STATE_SBLOCK: //检测是否碰到障碍物结束游戏 EndGame break //显示 DrawGame else if uTIMER_ID uFoodAddTimer //定时加食物 table.AddFoodrandtableBlockWidthrandtableBlockHeight void StartGame iScores0 //桌面的初始化 table.InitialTabletableBlockWidthtableBlockHeight table.GetSnake-gtChangeDirectS_RIGHT table.GetSnake-gtSetHeadPostableBlockWidth/2tableBlockHeight/2 //预先随机产生几个食物 srand unsignedtimeNULL forint iFoodNum0 iFoodNumlt4 iFoodNum table.AddFoodrandtableBlockWidthrandtableBlockHeight //不部下种子也可以直接用rand //但是每次游戏开始都是产生完全一样的伪随即序列 //打开定时器 uSnakeMoveTimer SetTimerhAppWnd500100NULL上一篇:dnf外挂源代码(VC 汇编写驱动条过检测)