拼图游戏制作文档汇总_第1页
拼图游戏制作文档汇总_第2页
拼图游戏制作文档汇总_第3页
拼图游戏制作文档汇总_第4页
拼图游戏制作文档汇总_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

数据结构与算法分析 1 基于基于 MFCMFC 的拼图游戏设计的拼图游戏设计 宋富冉宋富冉 操梦雅操梦雅 摘要摘要 拼图游戏是一个广受欢迎的智力游戏 按人数参与个数可分为单人游戏 和多人游戏 按拼图规则它可分为摆放式和挪动式两种类型 本设计是基于 Visual C 6 0 和 MFC 的拼图游戏设计 设计了一个操作简单的挪动式单人拼 图游戏 本游戏主要包括游戏界面设计 难易度选择 游戏图片选择 游戏系 统设计 判断拼图是否成功等几个模块 程序设计中应用了类 数组 鼠标响应 菜单消息响应等元素和语句 此游戏的设计主要以学习和熟悉 Visual C 6 0 和 MFC 软件开发为主要目的 关键词 关键词 拼图 Visual C 6 0 MFC 1 1 任务描述任务描述 1 11 1 拼图简单介绍拼图简单介绍 拼图游戏是广受欢迎的一种智力游戏 它的变化多端 难度不一 让人百 玩不厌 个性化的拼图 拼凑的不仅仅是一张照片 而是一个故事 一段回忆 一 段温情 每一片的单片都有属于它自己的位置 就像每段回忆都有属于它的故 事 你要将它放在专属的地方 你可以把你记忆中最深刻的片段 你挚爱的照 片 你最难忘的一瞬间 做成拼图 在你想起的时候一一拼起 拼图游戏不仅能增强思维能力 提高智力 而且富含哲理 有助于加强我 们的动手能力和我们的洞察能力 1 21 2 基本设计要求基本设计要求 数据结构与算法分析 2 我们设计的拼图游戏是一个具有简单的系统界面 操作简单易行 上手快 适用于广大用户的小游戏 此游戏分散的小图片的移动规则是小图片会朝着空 位置方向移动 玩家在界面上先通过鼠标点击 游戏图片选择 选择要拼的图 片 然后通过鼠标左键点击要移动的小图片 小图片会自动移动到原来没有图 片的位置 移动时 预备移动的图片旁边必须要有可供移动的位置 直到拼合 出原来的图片 并且成功拼成图片后会出现 看来这对你来说太简单了 挑战 更高难度吧 一句话 具体设计要求如下 1 可以打开并显示 bmp 任意大小的图片 2 游戏开始之后 可以自动随机打乱图片 3 用户可以点击方块进行上下左右的交换 直到拼出原图片 4 系统能够自动检测用户是否拼出原图 并提示用户拼图是否成功 2 2 系统需求分析系统需求分析 2 12 1 功能需求分析功能需求分析 1 用户能用鼠标控制系统界面上各个菜单选项的选择 2 游戏难度选择功能 用户可以通过参数设置自定义选择游戏的难度 系统 开始默认的是 9 块 如果用户想挑战更困难的 可以在设置参数设置中进行相应 的参数修改 比如 4 4 16 块 5 5 25 块 3 4 12 块等 3 游戏音乐播放功能 用户可以根据自己的喜好进行选择是否播放音乐 所 播放的音乐也是用户根据喜好自己来选择的 4 游戏原图显示功能 当玩家在玩游戏过程中忘记各个小图片的整体排列位 置时能够进入原图显示功能查看完整图片 参考原图进行拼图游戏 以提高游 戏的趣味性 5 游戏判断功能 用户通过移动每一小块图片 最终拼出和导入的图片一致 时 系统则会判断你拼图成功 并提示 看来这对你来说太简单了 挑战更高 难度吧 这句话 数据结构与算法分析 3 图 2 1 系统功能模块 2 22 2 界面设计需求界面设计需求 该拼图游戏是以对话框的形式显示出来 顶部为标题栏 接着是菜单栏 菜单栏上是五个菜单选项 主菜单 游戏图像选择 参数设置 原图设置 帮 助 然后接下来就是拼图游戏的拼图部分主界面 2 32 3 系统其他需求分析系统其他需求分析 1 性能要求 可靠性强 实时性好 2 设计约束 开发工具 VC 6 0 运行环境 windows 2000 以上 3 软硬件要求 在 windows 平台上运行 应用程序用 C 语言开发 客户端使用普通个人 计算机 数据结构与算法分析 4 2 42 4 系统流程图系统流程图 开始 选择图片 游戏开始 移动图片 游戏停止 拼图成功 结束 是 否 图 2 2 系统流程图 流程图说明 1 启动程序 进入游戏界面 2 用户根据自己的想法和意愿选择游戏图片 并进行游戏参数设置后 程序 有相应的操作 对应程序根据参数设置进行图片的分割 游戏区域均分 将分 割后的子图片填充到游戏区域相等面积的方格内 并记录初始各个子图片的原 始坐标 然后随机走动 200 步 这个过程执行只在一瞬间即可完成 显示出游 戏界面 3 用户开始游戏 使用鼠标或者键盘上下左右键来进行拼图 在此过程中 数据结构与算法分析 5 程序会实时刷新画面 并全盘对比各个子图片的坐标和原始坐标是否相同 若 相同则游戏结束 系统提示拼图成功 若不同 则用户继续游戏 继续移动子 图片 判断程序循环执行 直到拼图成功 4 若在游戏过程当中 想要参照原图 则点击原图显示菜单选项 原图像显 示子程序被调用 并将原图像显示在游戏区域一侧 供游戏者参考 不想参考 可再次点击原图显示不显示原图像 5 参数设置选项 可以进行拼图的难度设置 即图块的行列数设置 以及游 戏背景音乐的设置 在此过程中程序将执行相应的子函数进行响应用户操作 6 中途可以随时重新开始新游戏 退出游戏 参数设置 原图显示与否 调 换游戏图片等 不必关闭程序重新打开 并且确保每次拼图必定会成功 不会 出现拼图不成功的情况 3 3 函数功能设置函数功能设置 1 int CMainFrame OnCreate LPCREATESTRUCT lpCreateStruct 切换 文本提示形式 菜单选项为 图像提示形式 HMENU hmenu hmenu GetMenu m hWnd 获取主菜单控制权 获取图片选取菜单选项所在的子菜单栏目的控制权 hmenu GetSubMenu hmenu 1 char hbmp UINT ITEM ID HINSTANCE hinst AfxGetInstanceHandle 获取实例的句柄 载入相关的缩小预览型的位图图片 并进行相关选项的属性修改 hbmp char LoadBitmap hinst MAKEINTRESOURCE IDB PIC1 图片的载入 ITEM ID GetMenuItemID hmenu 1 相应菜单选项的 ID 获取 属性修改 切换成图像显示方式 ModifyMenu hmenu 1 MF BYPOSITION MF BITMAP ITEM ID hbmp 数据结构与算法分析 6 2 BOOL CMainFrame OnCreateClient LPCREATESTRUCT CCreateContext pContext 创建 1 行 2 列的分裂视图 设定出游戏界面 参见图 3 1 m wndSplitter CreateStatic this 1 2 m wndSplitter CreateView 0 0 RUNTIME CLASS CSFRCMYPINTUVie w CSize 300 0 pContext m wndSplitter CreateView 0 1 RUNTIME CLASS COrgView CSize 0 0 pContext m wndSplitter SetActivePane 0 0 将第一个作为当前激活状态的视图 图 3 1 游戏初始界面 3 BOOL CMainFrame PreCreateWindow CREATESTRUCT cs cy 400 cs style WS OVERLAPPED WS CAPTION FWS ADDTOTITLE WS THICKFRAME WS SYSMENU cs dwExStyle WS EX ACCEPTFILES 4 void COrgView OnDraw CDC pDC 源图像绘制函数 CSFRCMYPINTUDoc pDoc CSFRCMYPINTUDoc GetDocument 数据结构与算法分析 7 CDC memdc 使用内存 DC memdc CreateCompatibleDC pDC memdc SelectObject pDoc m bitmap pDC BitBlt 0 0 pDoc m bmpWidth pDoc m bmpHeight 整幅图拷贝 void COrgView DrawAll CDC pDC 是否显示原图像的响应函数 5 void COrgView OnUpdate CView pSender LPARAM lHint CObject pHint 更新界面函数 6 void CSetitingDlg OK 确定并保存参设设置的所有更改 参见图 3 2 7 BOOL CSetitingDlg OnInitDialog CDialog OnInitDialog 初始化各个游戏参数 部分可参见图 3 2 m iCols AfxGetApp GetProfileInt T 游戏参数 T hnums 3 m iRows AfxGetApp GetProfileInt T 游戏参数 T vnums 3 8 void CSetitingDlg OnOpen 选取播放背景音乐时 打开相关文件函数 参见图 3 2 CString strFilter MP3 文件 mp3 mp3 CFileDialog fileopen TRUE NULL NULL OFN HIDEREADONLY OFN OVERWRITEPROMPT strFilter if fileopen DoModal IDOK m strMusicFileName fileopen GetPathName UpdateData FALSE 9 void CSFRCMYPINTUDoc GameMixMove 游戏初始化 随机打乱图像 随机走 300 步 10 void CSFRCMYPINTUDoc GameMove UINT nChar 根据按键输入指示命令作移动操作函数 与 9 协作 11 BOOL CSFRCMYPINTUDoc IsWin void 检测是否拼图成功函数 胜利的检测方法是判断地图的所有方块的内部 数据是否全为其行列数 是则表示排列好 胜利 12 void CSFRCMYPINTUDoc MapInitial 数据结构与算法分析 8 图片数据的初始化函数 int i j 将原来各个位置的数据填好其所在的行 ID 列 ID for i 1 i hnums i for j 1 jm cellWidth 1 DownPos col point y pDoc m cellHeight 1 根据当前空白方块位置将鼠标点击其相邻方块的情况 if abs DownPos row pDoc m blankPos row abs DownPos col pDoc m blankPos col 1 if DownPos row pDoc m blankPos row 1 pDoc OnKeyDown VK RIGHT 0 0 中间略去 CView OnLButtonDown nFlags point 21 void CSFRCMYPINTUView DrawGameBlocks CDC pDC 绘制游戏所有当前散乱的方块 22 void CSFRCMYPINTUView DrawCellBlock CDC pDC pos destPos pos srcPos 根据源方块的位置和目标放开位置 当前方块实际位置 23 void CSFRCMYPINTUDoc PlayMusic 播放背景音乐函数 说明 利用 MCI 机制控制媒体设备放音 4 数据结构的设计数据结构的设计 在函数功能的设计中我们提到了相关的结构体的定义 在这里 给出重要的结构框架定义 1 struct pos 方块位置结构 数据结构与算法分析 10 int row 图像所在的行坐标 int col 图像所在的列坐标 2 class OrgView public CView 原图像显示类 void COrgView DrawAll CDC pDC void COrgView OnDraw CDC pDC 3 class CSetitingDlg public CDialog 参数和音乐播放等对话 框对应设置处理类 void CSetitingDlg OK void CSetitingDlg OnOpen BOOL CSetitingDlg OnInitDialog 4 class CSFRCMYPINTUApp public CWinApp 程序基础类 5 class CSFRCMYPINTUDoc public CDocument 程序基础文档类 BOOL CSFRCMYPINTUDoc IsWin void 数据结构与算法分析 11 void CSFRCMYPINTUDoc OnKeyDown UINT nChar UINT nRepCnt UINT nFlags void CSFRCMYPINTUDoc OnNewGame void CSFRCMYPINTUDoc OnPic1 void CSFRCMYPINTUDoc OnSet void CSFRCMYPINTUDoc OnUserpic void CSFRCMYPINTUDoc PlayMusic 6 class CSFRCMYPINTUView public CView 程序基础视图类 void CSFRCMYPINTUView DrawLines CDC pDC void CSFRCMYPINTUView DrawBlankBlock CDC pDC void CSFRCMYPINTUView DrawCellBlock CDC pDC pos destPos pos srcPos void CSFRCMYPINTUView OnLButtonDown UINT nFlags CPoint point void CSFRCMYPINTUView OnDraw CDC pDC 7 class CAboutDlg public CDialog 程序基础对话框类 8 class CMainFrame public CFrameWnd 程序主函数类 int CMainFrame OnCreate LPCREATESTRUCT lpCreateStruct 数据结构与算法分析 12 BOOL CMainFrame PreCreateWindow CREATESTRUCT 5 5 详细设计详细设计 5 1 初始窗体设计 利用 MFC AppWinzard 生成五子棋游戏应用程序框架具体步骤如下 1 执行 VC 程序 选择 File New 命令 弹出 New 对话框 单击 Projects 标 签 转到 Projects 选项卡 选择 MFC AppWizard exe 选项 然后在 Project name 文本框中输入 SFRCMYPINTU Lacation 文本框是指项目的本地路径 图 5 1 新建 MFC AppWinzard 工程文件 2 单击按钮 弹出 MFC AppWinzard Step1 对话框 如图所示 数据结构与算法分析 13 图 5 2 选择单文档模式 3 单击完成按钮 则建立一个单文档应用框架 5 2 菜单设计 1 添加菜单项 数据结构与算法分析 14 图 5 3 添加 menu 菜单 2 给对应的菜单项添加响应函数 1 单击菜单右键 选择 ClassWizard 在 Class name 中选择在哪个类中 添加响应函数 在 Messages 中选择 COMMAND 选中完成后 点击 Add Function 然后可以点击 Edit Code 编辑响应函数 比如游戏图片选择菜单下 的自定义图片和系统图片菜单添加响应函数如下图所示 图 5 4 添加菜单响应函数 其响应函数代码如下 数据结构与算法分析 15 1 系统图片 void CSFRCMYPINTUDoc OnPic1 TODO Add your command handler code here PicSelect IDB BITMAP1 2 自定义图片 void CSFRCMYPINTUDoc OnUserpic 用文件对话框的方式选择播放的音乐 CString filter BMP 文件 bmp bmp CFileDialog picfile TRUE NULL NULL OFN HIDEREADONLY OFN OVERWRITEPROMPT filter if picfile DoModal IDOK 确定后读入位图并开始游戏 HBITMAP hbitmap 按照尺寸 m BMP WIDTH m BMP HEIGHT 读 入位图文件 根据源图比例放大与缩小 hbitmap HBITMAP LoadImage NULL picfile GetPathName IMAGE BITMAP m BMP WIDTH m BMP HEIGHT 180 LR LOADFROMFILE m bitmap Detach 弃旧选新 m bitmap Attach hbitmap CSFRCMYPINTUDoc OnNewGame 开始游戏 2 操作菜单分为 原图显示 参数设置 开始新游戏和退出四个子菜单 3 帮助菜单 一个关于拼图游戏的菜单 其响应函数如下 void CSFRCMYPINTUApp OnAppAbout CAboutDlg aboutDlg aboutDlg DoModal 数据结构与算法分析 16 以上添加函数等功能 同类功能添加 操作步骤完全一样 不再重复 5 3 游戏设计 5 3 1 参数设置设计 首先 SFRCMYPINTU resources 在引用一个对话框资源 Dialog 并添加一个对 话框类 将所需要设置的参数等对话命令符等添加完毕 并设置好相应的名称 及 ID 号 也为此参数设置添加了一个类 其功能是对对话框所列参数更改等设 置相应函数命令的处理 添加设置结果如下图所示 图 5 6 游戏参数设置画面 然后 为这个对话框的弹出指令添加相应的响应函数如下 void CSFRCMYPINTUDoc OnSet CSetitingDlg set if set DoModal IDOK hnums set m iCols vnums set m iRows m bMusic set m bMusic m szMusicFileName set m strMusicFileName OnNewGame 数据结构与算法分析 17 5 3 2 原图显示设计 在这一部分设计中 首先为其独自添加一个类 来进行相应的函数处理 其功能设置只包含一个 原图像的显示与否 子函数包含两个 void COrgView OnDraw CDC pDC 与 void COrgView OnUpdate CView pSender LPARAM lHint CObject pHint 其显示结果效果图如下图所示 图 5 7 游戏原图显示与否效果图 数据结构与算法分析 18 5 3 3 游戏图片绘制设计 在此部分 初始状态是将整幅图片绘制显示在游戏区域 并将其根据参数 设置等大小划分游戏图片块 并将其初始坐标利用二维数组 m map i j 保存 下来 然后才去绘制空白块 覆盖初始右下角的原始游戏图块 即用空白块代 替最右下角图片块 然后随机移动空白块与游戏图片块的交换 也就是初始化 游戏 实现打乱的功能 另外 本人采用的是缓存绘制 只进行初始化图片坐标的保存 在游戏过 程中利用缓存存储各个子游戏块的坐标 最后判断拼图是否成功时 再将其缓 存坐标与原始坐标相比较 判断是否拼图成功 其绘制代码如下 void CSFRCMYPINTUView OnDraw CDC pDC a 获取文档数据控制权 CSFRCMYPINTUDoc pDoc CSFRCMYPINTUDoc GetDocument b 使用内存设备环境 memDC CDC memDC 与内存环境关联的内存位图 memBmp memDC CreateCompatibleDC pDC CBitmap memBmp memBmp CreateCompatibleBitmap pDC pDoc m bmpWidth pDoc m bmpHeight memDC SelectObject c 将图像绘制到内存位图 memBmp 中 1 绘制游戏所有当前散乱的方块 DrawGameBlocks 2 绘制空白方块 DrawBlankBlock 3 绘制边界间隔线条 DrawLines 数据结构与算法分析 19 d 整幅图从内存 memBmp 拷贝到屏幕 pDC BitBlt 0 0 pDoc m bmpWidth pDoc m bmpHeight 5 4 判断胜负设计 胜负判断实际上是根据当前空白快的情况来判断胜负的 这也是为什么添加 void CSFRCMYPINTUDoc OnKeyDown UINT nChar UINT nRepCnt UINT nFlags 的原 因 实际上判断只需要空白块的位置是否与原始位置相同 若相同则全局判断 其他图片块是否与初始位置坐标相符合 若相符合则判断拼图成功 否则拼图 不成功 游戏继续 其判断胜负代码如下 BOOL CSFRCMYPINTUDoc IsWin void int i j 胜利的检测方法是判断地图的所有方块的内部 数据是否全为其行列数 是则表示排列好 胜利 if i m blankPos row j m blankPos col for i 1 i hnums i for j 1 jRebuild all 编译若出现错误提示 则根据提 示修改程序 直至编译无误 然后运行 得到的结果如下 1 初始化界面 图 5 10 初始化界面 2 游戏界面 图 5 11 游戏界面 数据结构与算法分析 23 6 6 界面设计界面设计 初步设想界面采用两个界面形式 可考虑添加背景 一边显示拼图游戏区 另外一边显示原图像 参见图 3 1 有关于窗口的大小与界面的分布情况 经 过调节实践 最终确定初始窗口的尺寸定为长 600 个单位 宽则为 400 个单位 为比较合适的尺寸 看上去相对视觉效果还是比较舒服的 此外 在界面上只包含三个菜单选项 分别为 文件 游戏图片选择 帮 助 在文件下面还有相应的子菜单 而游戏图片下则为图形提示形式的供游戏 选择的图片选项 在此共设置五幅图片 最后一个为作者本人图像 其他的则 是网络图片 而且第一个选项为自定义图片菜单选项 原图像的显示菜单选项功能描述 点击 原图显示 菜单选项 显示则前 面会出现一个 再点击则不显示原图则前面没有 而此时原图显示 区域也将隐藏 只显示游戏区域 而且保证无论游戏难度如何变化 即行列数 划分多少 游戏区域总的面积大小将一直保持不变 效果图如下图 3 3 所示 数据结构与算法分析 24 图 3 3 原图显示效果图 在菜单栏显示各个游戏操作功能菜单选项 其中包含相应的下拉菜单选项 即游戏相关的一些用户操作选项 样式图如下图 3 4 所示 以作者图像为例 图 3 4 游戏界面完整效果图 7 7 总结 总结 本作品是一个益智游戏程序系统 通过将图片按照一定的形式保存成图片 提示的形式 呈献给游戏玩家 此图片我们前期采用图片处理 将相应的图片 处理成本人需求的尺寸和大小 并重新命名并将其格式进行了需

温馨提示

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

评论

0/150

提交评论