windows大实验报告 (MFC扫雷游戏).doc_第1页
windows大实验报告 (MFC扫雷游戏).doc_第2页
windows大实验报告 (MFC扫雷游戏).doc_第3页
windows大实验报告 (MFC扫雷游戏).doc_第4页
windows大实验报告 (MFC扫雷游戏).doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows编程大作业题目:基于MFC的扫雷游戏姓名:*学号:*班级:*专业:软件工程院系:数学与计算机学院指导教师:*基于MFC的小游戏实现基本要求:1、实现一个小游戏2、实现基本游戏控制功能3、具有游戏数据保存功能4、界面布局合理、美观;1.设计目的及要求 1.1设计目的及问题描述 利用VC+程序编写扫雷游戏,以检测自己一个学期对MFC学习的情况,以及了解自己在MFC学习中的不足,巩固和提高自己对MFC的理解和掌握。掌握C+编程和调试的基本技能,进一步提高自己的动手能力,和运用C+解决实际问题的能力。本次我做的是一个简单的扫雷的游戏,包括计算雷数、时间和扫雷的规则制定。1.2设计要求 找出所有的非地雷的地方。如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所有不含地雷的方块掀开,游戏才算成功。(1)操作说明:开局:单击“开”字按钮挖雷:单击鼠标左键标记/取消标记:单击鼠标右键胜利:所有有雷的格子都被标记,其余格子都打开。胜利后,会升起几颗信号弹,所有雷爆炸。快捷操作:一个格子被打开后(显示数字),且周围8个格子已有对应数量的标记。此时,鼠标左右键同时单击数字,周围未标记的格子都会打开。(2)游戏主要功能:gamebox.cpp (.h)游戏框架:游戏主要逻辑,动画控制,常量定义mybitmap.cpp (.h)位图,按钮myclock.h时钟处理mykey.h工具包myqueue.cpp (.h)数据结构:队列filereport.cpp (.h)跟踪打印,用于调试程序stdafx.h游戏常量定义说明文件:MFC部分:DlgHelp.cpp (.h)操作说明对话框DlgSet.cpp (.h)设置对话框DlgInput.cpp (.h)输入姓名对话框DlgRank.cpp (.h)排行榜对话框mine.cpp (.h)MFC应用程序类mineDlg.cpp (.h)MFC对话框类(3)制作要点1. 游戏界面怎样表示(即w*h个格子)2. 格子的状态表示:打开,被标记3. 打开一个空格子,与其相连的空格全部打开4. 信号弹,爆炸效果的动画处理。5. 对话框的打开,关闭6. 对话框控件的数据设置,刷新2.课程设计步骤(1)位图初始化bmStart.Init(hInstance,IDB_BITMAP_START);bmStart.SetDevice(hdccanvas,hdcmem);bmStart.InitSizeList(1,PICW,PICH);bmBack.Init(hInstance,IDB_BITMAP_BACK);bmBack.SetDevice(hdccanvas,hdcmem);bmBack.InitSizeList(1,200,200);bmAni.Init(hInstance,IDB_BITMAP_ANI);bmAni.SetDevice(hdccanvas,hdcmem);bmAni.InitSizeList(ANI_PIC_NUM,20,20);bmBomb.Init(hInstance,IDB_BITMAP_BOMB);bmBomb.SetDevice(hdccanvas,hdcmem);bmBomb.InitSizeList(sizeof(bmBomb_w)/sizeof(int),bmBomb_w,bmBomb_h,PIC_HAVE_MASK)(2)定义参数及规格#define MAP_Y 80#define TIME_X 260#define TIME_Y 15#define TEXT_MINE_X 260#define TEXT_MINE_Y 45/初级 中级 高级enum GAME_LEVELLEVEL0,LEVEL1,LEVEL2,;/不同级别的地图边长enum GAME_LEVEL_SIZELEVEL0_SIZE=9,LEVEL1_SIZE=14,LEVEL2_SIZE=20,;/不同级别 雷的数量enum MINE_NUMMINE_NUM0=10,MINE_NUM1=30,MINE_NUM2=55,;#define MIN_W 9#define MIN_H 9/最大地图 20*20个格子#defineMAX_MAP_W 20#defineMAX_MAP_H 20#define MAX_NUM (MAX_MAP_W*MAX_MAP_H)/格子状态 : 关闭,打开,标记enum MINE_STATEMINE_CLOSE,MINE_OPEN,MINE_LABEL,MINE_ERROR_OPEN,/有雷的格子,被打开MINE_ERROR_LABEL,/不是雷的格子,被标记;/idenum ITEM_IDITEM_NULL=0,ITEM_MINE=9,;/一个格子struct MINEBOXint iState;int iNum;/0,空; 1至8,雷的数量;9,雷;/动画效果/动画单元struct MAGICint x;int y;int xoff;int yoff;int iframe;/帧int iShow;/动画阶段enum magic_sceneSCENE_WIN0,SCENE_WIN1,SCENE_FAIL,;/动画单元的最大数量#define MAGIC_NUM 60/游戏主逻辑class GAMEBOXpublic:GAMEBOX();GAMEBOX();/显示图片void Show();/时钟处理void Check();/鼠标移动处理void MouseMove(int x,int y);/鼠标单击int LButtonUp(int x,int y);/鼠标右键单击int RButtonUp(int x,int y);/按键处理void KeyProc(int iKey);/初始化字体数组void InitFont();public:/排行榜void LoadRank();/加载排行榜文件void WriteRank();/写入排行榜文件void InitRank();/初始化排行榜数据/游戏中,刷新时间void CheckGame();/左右键同时单击一个格子void LRButtonDown(int xmouse, int ymouse);/动画控制void CheckAni();/刷新动画数据void BeginAni(int iSceneType);/启动动画void ShowAni();/显示/胜负检测int IsFail();int IsWin();void InitMine();/初始化地图数据void ShowInfo();/显示时间,数量void ShowGame();/绘制格子/左键单击一个格子void OpenItem(int xmouse,int ymouse);/打开一个格子void OpenOneBox(int x,int y);/右键,设置标签void LabelItem(int xmouse,int ymouse);/游戏数据int iState;/画笔,画刷HBRUSH hBrush;HPEN hPen,hPenWhite;/字体HFONT hf10;/ 开屏动画int iAniFrame;struct MINEBOX gamemapMAX_NUM;/地图 左上角起始坐标 POINT oriMap;/当前地图 宽度 高度int map_w;int map_h;/当前雷数int iMineNum;/当前等级int iLevel;/当前时间(秒)int iTime;/剩余标记的个数int iMineLabel;MYQUEUE queue;/队列/动画部分int iStartBomb;int iScene;struct MAGIC magicobjMAGIC_NUM;int iScale;/粒子数量int iTimeLine;/动画时间轴/排行榜int iScore3;CString strName3;#endif(3)鼠标操作void CMineDlg:OnRButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultgb.RButtonUp(point.x,point.y);InvalidateRect(NULL,false);CDialog:OnRButtonUp(nFlags, point);void CMineDlg:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default/检测是否左右键同时按下if(nFlags & MK_LBUTTON)gb.LRButtonDown(point.x,point.y);CDialog:OnRButtonDown(nFlags, point);(4)游戏初始化界面 初始化void FILEREPORT:Show()3. 课程设计内容 3.1 概要设计 游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示标示疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。1.创建程序2.扫雷图形设计3.扫雷构架组成4.扫雷过程以及结束设定3.1.1 程序总体框架描述 3.1.2程序常用类声明3.2主要技术 1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。3.3系统设计结果 (界面截图、操作流程)界面截图:操作流程:4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以Visual C+ 6.0作为前台开发工具,Visual C+ 6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。由于我学习Visual C+ 6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过百度,才知道缺少

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论