植物大战僵尸游戏项目开发指导书.pdf

上传人:大张伟 文档编号:5715735 上传时间:2020-07-24 格式:PDF 页数:15 大小:1.21MB
返回 下载 相关 举报
植物大战僵尸游戏项目开发指导书.pdf_第1页
第1页 / 共15页
植物大战僵尸游戏项目开发指导书.pdf_第2页
第2页 / 共15页
植物大战僵尸游戏项目开发指导书.pdf_第3页
第3页 / 共15页
植物大战僵尸游戏项目开发指导书.pdf_第4页
第4页 / 共15页
植物大战僵尸游戏项目开发指导书.pdf_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《植物大战僵尸游戏项目开发指导书.pdf》由会员分享,可在线阅读,更多相关《植物大战僵尸游戏项目开发指导书.pdf(15页珍藏版)》请在三一文库上搜索。

1、ThinkBankSoftware Education 课程单元文档 游戏游戏 项目开发指导书 版本:版本: ImprovingImprovingImprovingImproving processesprocessesprocessesprocesses forforforfor betterbetterbetterbetter productsproductsproductsproducts 思远 IT 学院 2011-6-7 思远教育版权所有。保留所有权利。 版本历史版本历史 版本版本作者作者参与者参与者起止日期起止日期备注备注 1.0杨勇(0908045)-2011-6-62011-6

2、-7VC SDK 第第第第 1 1 1 1 章章章章游戏设计概述游戏设计概述游戏设计概述游戏设计概述 植物大战僵尸游戏,是使用 VC 编译器,采用 WINDOWS SDK 编写而成。游戏代 码实现中包含了大量的编程逻辑和技巧,适合有一定 WINDOWS SDK 基础的学员实训 练习。 第第第第 2 2 2 2 章章章章主要界面主要界面主要界面主要界面 启动时的主界面: 开始游戏:开始游戏: 有三个选项。 游戏界面游戏界面: : : : 第第第第 3 3 3 3 章章章章程序编写重难点程序编写重难点程序编写重难点程序编写重难点 3.13.13.13.1 文件规划:文件规划: 源文件: 3.23.

3、23.23.2多对话框之间的切换多对话框之间的切换 实现多对话框之间的切换。 (以下红色字标出) #include stdafx.h HINSTANCE g_hInst; extern int g_DlgPage;/当前显示的对话框编号 long DlgProc(HWND hDlgWnd, int message, int wParam, int lParam) /第一页对话框 switch (message) case WM_INITDIALOG: onCreate( hDlgWnd);return 1; case WM_PAINT: onPaint(hDlgWnd);break; case

4、 WM_MOUSEMOVE: onMouseMove(hDlgWnd,lParam);break; case WM_LBUTTONDOWN: onLButtonDown( hDlgWnd,lParam);break; case WM_LBUTTONUP: onLButtonUp( hDlgWnd);break; case WM_CLOSE: onClose(hDlgWnd);break; default:break; return 0; long DlgProcMain(HWND hDlgWnd, int message, int wParam, int lParam) /第二页对话框 swi

5、tch (message) case WM_INITDIALOG: onCreate( hDlgWnd);return 1; case WM_PAINT: onPaint(hDlgWnd);break; case WM_MOUSEMOVE: onMouseMove(hDlgWnd,lParam);break; case WM_LBUTTONDOWN: onLButtonDown( hDlgWnd,lParam);break; case WM_LBUTTONUP: onLButtonUp( hDlgWnd);break; case WM_CLOSE: onClose(hDlgWnd);break

6、; default:break; return 0; long DlgProcGame(HWND hDlgWnd, int message, int wParam, int lParam) /第 3 页对话框 ,游戏 switch (message) case WM_INITDIALOG: onCreate( hDlgWnd);return 1; case WM_PAINT: onPaint(hDlgWnd);break; case WM_TIMER: onTimer(hDlgWnd,wParam);break; case WM_MOUSEMOVE: onMouseMove(hDlgWnd,l

7、Param);break; case WM_LBUTTONDOWN: onLButtonDown( hDlgWnd,lParam);break; case WM_LBUTTONUP: onLButtonUp( hDlgWnd);break; case WM_CLOSE: onClose(hDlgWnd);break; default:break; return 0; int _stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, char*lpCmdLine, intnCmdShow) g_hInst = hInstanc

8、e;/g_hInst 为当前程序的句柄 PlayBackMusic(musicFaster.mp3); DialogBox(g_hInst,MAKEINTRESOURCE(IDD_DIALOG_First),NULL,(DLGPROC) DlgProc); return 0; /= void onLButtonDown(HWND hWnd,int lParam) char str200; sprintf(str,g_DlgPage=%d,g_DlgPage=%d,g_DlgPage,g_setCursor); :SetWindowText(hWnd,str); if(g_setCursor=t

9、rue) /选中热区 if(g_DlgPage=1) g_DlgPage=2;/下一个页 EndDialog(hWnd,0);/关闭当前,打开下一个 DialogBox(g_hInst,MAKEINTRESOURCE(IDD_DIALOG_Gmain),NULL,(DLGPROC)Dl gProcMain); else if(g_DlgPage=2) /省略了第二页中的各个选项跳不同的对话框.g_selItem0 g_DlgPage=3;/下一个页 EndDialog(hWnd,0);/关闭当前,打开下一个 PlayBackMusic(musicUraniwaNi.mp3); DialogBo

10、x(g_hInst,MAKEINTRESOURCE(IDD_DIALOG_Game),NULL,(DLGPROC)Dlg ProcGame); 以上红色字体部分实现了三个对话框页之间的切换. 3.33.33.33.3 双缓冲画图双缓冲画图 注意调用的层次关系,以下红色字体显示:注意调用的层次关系,以下红色字体显示: . long DlgProc(HWND hDlgWnd, int message, int wParam, int lParam) /第一页对话框 switch (message) case WM_INITDIALOG: onCreate( hDlgWnd);return 1; c

11、ase WM_PAINT: onPaint(hDlgWnd);break; . void onPaint(HWND hWnd) PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd, On2BufferDraw(hWnd,hDC);/双缓冲 EndPaint(hWnd, void On2BufferDraw(HWND hWnd,HDC hDC) RECT rectClient; :GetClientRect(hWnd, /获取客户区大小 / 1. 根据指定指针在显存中创建一个同步的 DC HDC hMemory = :CreateCompatibleDC(hDC)

12、; / 2. 根据指定指针在显存中创建一个同步的位图区(HDC,宽度,高度) HBITMAP hBitmap = :CreateCompatibleBitmap(hDC, rectClient.right - rectClient.left, rectClient.bottom - rectClient.top); /4 .设置显存中的 DC 资源在 hMemory 中显示 hBitmap HBITMAP hOldBitmap = (HBITMAP):SelectObject(hMemory,hBitmap); /int nOldBkMode = :SetBkMode(hMemory,TRAN

13、SPARENT);/设置绘图方式为背景透明 /5.使用显存中的 DC 资源在内存中的位图区域上绘制图形 OnDraw(hMemory); /6.把显存中的位图区域上所绘制的图形拷贝到当前显示设备的视图区域上 :BitBlt(hDC, 0, 0, rectClient.right - rectClient.left,/宽度,高度 rectClient.bottom - rectClient.top, hMemory,/从“内存”hMemory 拷贝已经画好的图 0, 0, SRCCOPY); / 7. 释放资源 :DeleteObject(hBitmap); :DeleteDC(hMemory)

14、; void OnDraw(HDC hDC) drawBmp(hDC,bitmap); /画图,完成游戏功能 /drawBmp,画图 void drawBmp(HDC hDC,struct bmpInfo * bitmap) switch(g_DlgPage) case 1: /第一页对话框 :BitBlt(hDC,0,0,(bitmap+0)-nW,(bitmap+0)-nH,(bitmap+0)-hbitmapDC, 0,0,SRCCOPY); break; case 2: /第 2 页对话框,背景及选项 :BitBlt(hDC,0,0,(bitmap+1)-nW,(bitmap+1)-n

15、H,(bitmap+1)-hbitmapDC, 0,0,SRCCOPY); :TransparentBlt(hDC,480, 75,(bitmap+2)-nW,int(bitmap+2)-nH/2),(bitmap+2)-hbitmapDC,0,(g_selItem=1?1:0)*int(b itmap+2)-nH/2),(bitmap+2)-nW,int(bitmap+2)-nH/2),RGB(255,255,255); :TransparentBlt(hDC,480,200,(bitmap+3)-nW,int(bitmap+3)-nH/2),(bitmap+3)-hbitma pDC,0,

16、(g_selItem=2?1:0)*int(bitmap+3)-nH/2),(bitmap+3)-nW,int(bitmap+3)-nH/2),RGB( 255,255,255); :TransparentBlt(hDC,480,310,(bitmap+4)-nW,int(bitmap+4)-nH/2),(bitmap+4)-hbitma pDC,0,(g_selItem=3?1:0)*int(bitmap+4)-nH/2),(bitmap+4)-nW,int(bitmap+4)-nH/2),RGB( 255,0,0); break; case 3: /第 3 页对话框,背景及选项 stati

17、c int i=0; /:BitBlt(hDC,0,0,(bitmap+5)-nW,(bitmap+5)-nH,(bitmap+5)-hbitmapDC, 0,0,SRCCOPY); :TransparentBlt(hDC,0,0,900,600,(bitmap+5)-hbitmapDC,0,0,950,(bitmap+5)-nH,RGB(0, 0,0); :TransparentBlt(hDC,0,0,(bitmap+6)-nW,(bitmap+6)-nH,(bitmap+6)-hbitmapDC,0,0,(bi tmap+6)-nW,(bitmap+6)-nH,RGB(0,0,0); :T

18、ransparentBlt(hDC,100,0,(bitmap+7)-nW,(bitmap+7)-nH,(bitmap+7)-hbitmapDC,0,0,( bitmap+7)-nW,(bitmap+7)-nH,RGB(0,0,0); /for(i=8;inW,(bitmap+8+i)-nH,(bitmap+8+i)-hbit mapDC,0,0,(bitmap+8+i)-nW,(bitmap+8+i)-nH,RGB(0,0,0); i+; if(i=10) i=0 ; / break; default :break; 3.43.43.43.4 图片加载与释放图片加载与释放 图片加载: voi

19、d onCreate(HWND hWnd) SetWindowPos(hWnd,HWND_TOPMOST,100,100,900,600,SWP_SHOWWINDOW);/改 变窗体大小,置顶 loadBmp(); if(g_DlgPage=3):SetTimer(hWnd,1,100,NULL); / / / /加载图片加载图片 void loadBmp() int i; char mapFileBNMAX_PATH= imagesLogo.BMP,/0,首页背景 imagesSurface.BMP,/1,第二页,背景 imagesSelectorScreenStartAdventur.BM

20、P,/2,第二页,选项 1 imagesSelectorScreenSurvival.BMP,/3,第二页,选项 2 imagesSelectorScreenChallenges.BMP,/4,第二页,选项 3 imagesbackground1unsodded_1.BMP,/5,游戏页,背景 1 imagesCardPlantsPeashooter.BMP,/6,游戏页,卡片 imagesSunBack.BMP,/7,游戏页,分数 imagesPlantsPeashooterIMG000.bmp,/8,豌豆 imagesPlantsPeashooterIMG001.bmp,/9,豌豆 ima

21、gesPlantsPeashooterIMG002.bmp,/10,豌豆 imagesPlantsPeashooterIMG003.bmp,/11,豌豆 imagesPlantsPeashooterIMG004.bmp,/12,豌豆 imagesPlantsPeashooterIMG005.bmp,/13,豌豆 imagesPlantsPeashooterIMG006.bmp,/14,豌豆 imagesPlantsPeashooterIMG007.bmp,/15,豌豆 imagesPlantsPeashooterIMG008.bmp,/16,豌豆 imagesPlantsPeashooterI

22、MG009.bmp,/17,豌豆 。 。 。 。 。 。 ; 图片释放: void onClose(HWND hWnd) unloadBmp(); mciSendString(close Gmusic,0,NULL); EndDialog(hWnd,0); :KillTimer(hWnd,1); /卸载图片 void unloadBmp() int i; for(i=0;ihbitmapDC); delete bitmap; 3.53.53.53.5 数据结构数据结构 G G G Game.hame.hame.hame.h #include resource.h #include stdio.

23、h #include string.h #pragma comment (lib,msimg32.lib)/TransparentBlt #include mmsystem.h/导入声音头文件, 引入 mciSendString #pragma comment(lib,winmm.lib)/导入声音头文件库 #include / 引入 进度条控制的宏 #include time.h #include stdlib.h /图片的结构 struct bmpInfo long nW;/宽度 long nH;/高度 HDC hbitmapDC; /图片来源 ; #define BN18 /目前加载的图

24、片个数 void onPaint(HWND hWnd); void onTimer(HWND hWnd,int wParam); void onMouseMove(HWND hWnd,int lParam); void onCreate(HWND hWnd); void onLButtonDown(HWND hWnd,int lParam); void onLButtonUp(HWND hWnd); void onClose(HWND hWnd); void reset(HWND hWnd); void unloadBmp(); void loadBmp(); void PlayBackMus

25、ic(char * musicPath);/背景音乐播放 . Myfun.h #include game.h HDC LoadBitmapToDC(HINSTANCE hInst,char* pszName); HDC LoadBitmapToDC(HINSTANCE hInst,char* pszName,long void onKeyDown(HWND hWnd, int wParam, int lParam); void onCommand(HWND hWnd,int wParam); /双缓冲画图 On2BufferDraw,-OnDraw,-drawBmp, void drawBmp

26、(HDC hDC,struct bmpInfo * bitmap);/画图 void OnDraw(HDC hDC);/加载图片 void On2BufferDraw(HWND hWnd,HDC hDC);/双缓冲 long DlgProc(HWND hDlgWnd, int message, int wParam, int lParam); long DlgProcMain(HWND hDlgWnd, int message, int wParam, int lParam); long DlgProcGame(HWND hDlgWnd, int message, int wParam, in

27、t lParam); game.cppgame.cppgame.cppgame.cpp #include stdafx.h externHINSTANCE g_hInst; struct bmpInfo * bitmap=new bmpInfoBN;/图片资源,BN 定义在 game.h /- HCURSOR g_hCursor=NULL; boolg_setCursor=false;/未更换光标,热区设置用 POINT g_Mouse=0,0;/鼠标的位置 /- int g_DlgPage=1;/当前显示的对话框编号 int g_selItem=0;/选中项,第二页用 bool GameOver=false; /= 第第第第 4 4 4 4 章章章章其它其它其它其它 暂无。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1