ImageVerifierCode 换一换
格式:DOCX , 页数:92 ,大小:2.46MB ,
资源ID:4630081      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4630081.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC开发拼图游戏实验报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MFC开发拼图游戏实验报告.docx

1、MFC开发拼图游戏实验报告计算机科学与工程学院 Windows 程序设计实验报告(四) 专业班级 信技 2 班 实验地点 411 机房 实验时间 12 周指导教师 张俊 本组人数 4 人学生学号 0905060223 0905060212 0905060201 0905060224学生姓名 杨赛 蒋巧云 蔡倪 叶丽丽实验项目 综合应用设计拼图游戏实验类别 基础性() 设计性() 综合性() 其它( )实 1 掌握对话框和常用控件的应用验 2 掌握文档串行化和打印的技术目 3 熟练应用动态链接库及其开发的 4 综合应用各种可视化元素和交互技术实现一个典型的 Windows 应用及 程序要 5 通

2、过本程序掌握 Visual C+位图操作求成 绩 评 定 表类 别 评 分 标 准 分值 得分 合 计积极出勤、遵守纪律上机表现按要求完成设计任务程序代码规范、功能正确程序与报告报告详实完整、体现收获30 分具体评分请见项目记录表70 分 说明:评阅教师:日 期: 2011 年 月 日计算机科学与工程学院 实 验 内 容 项目功能及结构组成 一、项目介绍 “拼图”游戏的核心规则是将一张整图分成 N 小块,随机打乱,让用户拼回原图,根据 用户所花费的时间和步数的多少来评价其玩游戏的水平。 游戏的具体规则如下: 1. 运行程序后,用户需按 F2 开始游戏,在此期间需要输入一个名字;然后用户可以 选

3、择应用程序提供的位图资源或自定义的位图作为游戏使用的图片。 2. 用户可以选择游戏的难度,若选择“容易”,程序将图片分成 9 块;若选择“困难” 则分成 16 块。 3. 单击“重置”菜单项会弹出一个对话框让用户确认是否重置游戏。 4. 单击任一图格,图像将随机排列,并开始计时;用户可单击空格周围的图格来改变 其位置,每当用户单击一次,步数将增加一次。 5. 用户在游戏时可以通过单击“提示”菜单项来查看当前图片的缩略图。 6. 拼图成功,程序将在状态栏给出提示信息和所花费的时间及步数,用户可以选择另 外一幅图片重新开始游戏。 二、结构组成 本程序基于对话框程序组成,包括一个菜单栏,状态栏和显示

4、游戏图片的游戏区。 游戏开始界面如下图所示: Windows 程序设计实验报告 2计算机科学与工程学院 小组成员及分工 小组成员:杨赛,蒋巧云,蔡倪,叶丽丽 分工详情: 杨赛:负责程序框架构建及功能代码的输入,并调试程序。(主要完成设计过 程中的第一部分、第三部分、第四部分) 蒋巧云:负责查找相关代码的资料,并完成一部分实验报告。(主要完成设计 过程中的第三部分) 蔡倪:负责输入部分代码,完善程序的细节,并测试程序。(主要完成设计过 程中的第二部分、第三部分、第四部分) 叶丽丽:负责输入部分代码,并完成一部分的实验报告。(主要完成设计过程 中的第三部分) 详细设计过程(包含关键代码及截图) 一

5、、 创建初始界面 (本部分由杨赛完成) 新建一个 MFC AppWizard(exe)工程,将其命名为 Picture,在第一步选择 Dialog based, 如图 1-1 所示,接下来直接点 Finish。在 Workspace 的 Resource 标签中加入菜单资源,方 法是在 Picture resources 上右击,在弹出的快捷菜单中选择 insert,如图 1-2 所示; 然后在弹出的对话框中选中 menu 项,单击 New,完成后的效果如图 1-3 所示。 图 1-1 Windows 程序设计实验报告 3计算机科学与工程学院 图 1-2 图 1-3 添加如图 1-4 所示的菜

6、单项。 图 1-4 “游戏“菜单下的子菜单项的 ID 及设置如图 1-5 至图 1-10 所示(其它的将在后面给出): Windows 程序设计实验报告 4计算机科学与工程学院 图 1-5 图 1-6 图 1-7 图 1-8 Windows 程序设计实验报告 5计算机科学与工程学院 图 1-9 图 1-10 以 上 完 成 后 , 右 击 打 开 对 话 框 的 属 性 (Properties) , 将 对 话 框 的 ID 号 设 为 IDD_PICTURE_DIALOG,Caption 设置为“拼图游戏”,并为 Menu 属性对应的下拉框选择 IDR_MENU1,如图 12 所示;这样菜单

7、就可以在程序运行时显示在主对话框的顶部了。 图 1-11 运行后的效果如图 1-12 所示: Windows 程序设计实验报告 6计算机科学与工程学院 图 1-12 在 ClassView 标签中为 CPictureDlg 类添加两个 CMenu 类型的成员变量如图 1-13 和图 1-14 所示: 图 1-13 图 1-14 Windows 程序设计实验报告 7计算机科学与工程学院 实 验 内 容 CMenu 类为 Windows HMENU 的封装类。它提花了成员函数以用于创建、跟踪、更新及撤 消 菜 单 。 另 外 , 视 图 中 是 没 有 菜 单 的 , 在 框 架 窗 口 中 才

8、有 菜 单 , 所 以 只 有 用 AfxGetApp()-m_pMain-GetMenu()才能得到菜单指针。 二、 位图的读入和显示 (本部分工作由蔡倪完成) 在程序中,需要由用户来选择游戏中使用的图片,同时还需要将整幅图片分成不同的小 块。因此,采用(Picture)Static 控件作为位图的载体,分别显示图片的不同部分。 首先,需要读入位图资源。单击 VC6.0 菜单栏上的“InsertResource”子菜单,在 弹出的对话框中选中 Bitmap,再单击“import”,在弹出的对话框中找到你需要添加进来 的图片(注意在文件类型下拉框中选择“所有文件(*.*)”,否则你将找不到“*

9、.bmp”的图 片),单击“import”后将弹出如图 2-1 所示的确认框,单击“确定”即可。 图 2-1 依次添加四个位图文件(ID 默认)后,在 ResourceView 中将看到如图 2-2 所示效果: 图 2-2 为 对 话 框 的 “ 图 片 ” 菜 单 添 加 五 个 菜 单 项 , 如 图 2-3 所 示 , ID 分 别 为 : ID_PICTURE1,ID_PICTURE2,ID_PICTURE3,ID_PICTURE4,ID_ADVAN。 Windows 程序设计实验报告 8计算机科学与工程学院 图 2-3 接下来为 CPictureDlg 类添加一个 CBitmap 类

10、型的成员变量 Bitmap,如图 2-4 所示。 CBitmap 封装了 Windows 图形设备接口(GDI)中的位图,并且提供了操纵位图的成员函数。 图 2-4 为了实现不同位图资源的加载,我们需要为类 CPictureDialog 添加一个成员函数 Void OnRun(UINT nBitmapID,UINT nMenuID),如图 2-5 所示: 图 2-5 参数 nBitmapID 指定位图资源的 ID 号,nMenuID 指定菜单项的 ID 号。在函数中,我们 首先用 GetSubMenu 得到指向弹出菜单对象的指针,然后用 CheckMenuItem 方法为 nMenuID 所指

11、定的菜单项放置选中标记。接下来用 CBitmap 对象的 LoadBitmap 方法将 nBitmapID 所 指定的位图载入。相应代码如下: void CPictureDlg:OnRun(UINT nBitmapID, UINT nMenuID) pSubMenu = pMainMenu-GetSubMenu(1); pSubMenu-CheckMenuItem(ID_PICTURE1,MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_PICTURE2,MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_PICTURE3,MF_U

12、NCHECKED); pSubMenu-CheckMenuItem(ID_PICTURE4,MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_ADVAN,MF_UNCHECKED); pSubMenu-CheckMenuItem(nMenuID, MF_CHECKED); Bitmap.DeleteObject(); Bitmap.LoadBitmap(nBitmapID); Windows 程序设计实验报告 9计算机科学与工程学院 载入位图时,首先调用函数 CGdiObject:DeleteObject 删除由 LoadBitmap 加载过的位 图,然后用 L

13、oadBitmap 方法载入新的位图对象。 用类向导(ClassWizard,“View”菜单下的第一个子菜单,也可按 Ctrl + W 快捷键打 开)依次为对话框中的“图像”菜单中的子菜单项添加消息响应函数,如图 2-6 所示;并调 用 OnRun 函数加载位图。 图 2-6 四张图片对应菜单的消息响应代码如下: void CPictureDlg:OnPicture1() / TODO: Add your command handler code here OnRun(IDB_BITMAP1, ID_PICTURE1); void CPictureDlg:OnPicture2() / TOD

14、O: Add your command handler code here OnRun(IDB_BITMAP2, ID_PICTURE2); void CPictureDlg:OnPicture3() / TODO: Add your command handler code here OnRun(IDB_BITMAP3, ID_PICTURE3); void CPictureDlg:OnPicture4() / TODO: Add your command handler code here OnRun(IDB_BITMAP4, ID_PICTURE4); Windows 程序设计实验报告

15、10计算机科学与工程学院 “自定义”菜单项的消息响应代码由于需要打开一个新的位图文件,所以需要先为 CPictureDlg 类添加一个 HBITMAP 类型的成员变量 hBitmap,用来表示指向位图资源的句柄。 其次,还需要添加两个 INT 型变量 Width,Height 来表示用户打开图片的大小;BOOL 型变 量 IsLong 来表示图片属于长大于宽型还是宽大于长型,BOOL 型变量 Advan 表示该图片是否 是自定义型。如图 2-7 所示: 图 2-7 “自定义.”菜单项的消息响应代码如下: void CPictureDlg:OnAdvan() / TODO: Add your c

16、ommand handler code here CFileDialog dlg(TRUE, NULL, NULL, NULL, 位图文件(*.bmp)|*.bmp); INT Result = dlg.DoModal(); if(Result = IDOK) Advan = TRUE; hBitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); BITMAP bm; :GetObject(hBitmap, sizeof(BITMAP), &bm); if(bm.bmW

17、idth = bm.bmHeight) hBitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(), IMAGE_BITMAP, 350, 280, LR_LOADFROMFILE); Width = 350; Height = 280; IsLong = FALSE; else if(bm.bmWidth GetSubMenu(0); pSubMenu-CheckMenuItem(ID_HARD, MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_EASY, MF_CHECKED); Windows 程序设计实验

18、报告 12计算机科学与工程学院 Easy = TRUE; IsRnd = FALSE;void CPictureDlg:OnHard() / TODO: Add your command handler code here pSubMenu = pMainMenu-GetSubMenu(0); pSubMenu-CheckMenuItem(ID_EASY, MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_HARD, MF_CHECKED); Easy = FALSE; IsRnd = FALSE; 接下来为 CPictureDlg 对话框添加 16 个 Sta

19、tic 控件(可以先设置好一个控件后,再通 过复制得到其它的控件),如图 3-4 所示;并设置它们的属性:ID 设为 IDC_IMAGE0 到 IDC_IMAGE15,Tabstop 请勾上,Type 属性设为 Bitmap;尤为重要的是 Styles 标签里的如 图 3-5 和图 3-6 所示。 图 3-4 Windows 程序设计实验报告 13计算机科学与工程学院 图 3-5 图 3-6 控件添加好了后,我们需要添加一个 CStatic 类型的数组 m_Image16(如图 3-7 所示) 与这 16 个 Static 控件相关联,通过这个操作这个数组的下标来控制这 16 个控件对图像进

20、行分格显示。建立关联的代码应写在 CPictureDlg 类中系统生成的 OnInitDialog()函数体 内,这个函数是整个对话框程序运行的入口,相当于一个 main 函数,在这个函数体里,我 们也需要为之前声明的变量提供初始值,即将变量初始化,变量没有初始化的后果通常会造 成内存泄露,使程序在运行时出现莫名奇妙的错误。 图 3-7 OnInitDialog 函数的代码如下: BOOL CPictureDlg:OnInitDialog() CDialog:OnInitDialog(); / Add About. menu item to system menu. / IDM_ABOUTBO

21、X must be in the system command range. ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically / when the applications main window is

22、 not a dialog SetIcon(m_hIcon, TRUE); / Set big iconWindows 程序设计实验报告 14计算机科学与工程学院 SetIcon(m_hIcon, FALSE); / Set small icon/ TODO: Add extra initialization here pMainMenu = GetMenu(); /获取菜单IsLong = FALSE; Advan = FALSE; Easy = TRUE; SetWindowPos(NULL,0,0,356,352,SWP_NOMOVE); /控制窗口大小 m_Image0.Subclas

23、sDlgItem(IDC_IMAGE0,this); m_Image1.SubclassDlgItem(IDC_IMAGE1,this); m_Image2.SubclassDlgItem(IDC_IMAGE2,this); m_Image3.SubclassDlgItem(IDC_IMAGE3,this); m_Image4.SubclassDlgItem(IDC_IMAGE4,this); m_Image5.SubclassDlgItem(IDC_IMAGE5,this); m_Image6.SubclassDlgItem(IDC_IMAGE6,this); m_Image7.Subcla

24、ssDlgItem(IDC_IMAGE7,this); m_Image8.SubclassDlgItem(IDC_IMAGE8,this); m_Image9.SubclassDlgItem(IDC_IMAGE9,this); m_Image10.SubclassDlgItem(IDC_IMAGE10,this); m_Image11.SubclassDlgItem(IDC_IMAGE11,this); m_Image12.SubclassDlgItem(IDC_IMAGE12,this); m_Image13.SubclassDlgItem(IDC_IMAGE13,this); m_Imag

25、e14.SubclassDlgItem(IDC_IMAGE14,this); m_Image15.SubclassDlgItem(IDC_IMAGE15,this); return TRUE; / return TRUE unless you set the focus to a control接下来要为 CPictureDlg 类添加两个 INT 型的成员变量 x 和 y,用来计算 Static 控件 的位置,如图 3-8 所示。为 CPictureDlg 类添加一个成员函数 SetPos,用来对 Static 控件 的位置进行初始代,如图 3-9 所示。 图 3-8 Windows 程序设

26、计实验报告 15计算机科学与工程学院 图 3-9 SetPos 函数的代码如下: void CPictureDlg:SetPos() BITMAP bm; INT con, move; if(Advan = FALSE) Bitmap.GetObject(sizeof(BITMAP),&bm); Width = bm.bmWidth; Height = bm.bmHeight; if(Easy) x = Width / 3; y = Height / 3; con = 2; else if(!Easy) x = Width / 4; y = Height / 4; con = 3; if(Is

27、Long) move = 70; else move = 0;for(int i = 0; i = con; i+) m_Imagei.SetWindowPos(NULL,x*i+move,0,0,0,SWP_NOSIZE); m_Imagei.SetWindowPos(NULL,0, 0, x, y, SWP_NOMOVE); for(int j = 0; j = con; j+) m_Imagecon+1+j.SetWindowPos(NULL,x*j+move,y,0,0,SWP_NOSIZE); m_Imagecon+1+j.SetWindowPos(NULL,0, 0, x, y, SWP_NOMOVE);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1