C++课程设计报告 - 拼图游戏_第1页
C++课程设计报告 - 拼图游戏_第2页
C++课程设计报告 - 拼图游戏_第3页
C++课程设计报告 - 拼图游戏_第4页
C++课程设计报告 - 拼图游戏_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、 目录需求分析1 1 2.程序所实现的功能1 设计内容11. 主模块图12.1. 主程序流程图2 2.2 用例图23函数主要调用关系图3三、设计方案论述3四、调试分析4 1.实际完成的情况4 2.程序的性能分析43.上机过程中出现的问题及其解决方案44.程序中可以改进、扩充的功能及设计实现构想4五、用户手册4六、设计总结5 七、程序中主要的功能函数6八、主要参考文献6九、附录6一、需求分析 (1)运用C+语言设计拼图游戏具有极强的实践性,加强我们对C+课程基础知识点的理解掌握和灵活运用理能力,培养实际分析问题能力,养成良好的编程习惯;了解C+面向对象的设计方法与技巧,有效地、深刻地理解课程内容

2、,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。 (2)进一步领会程序设计的特点和应用,提高运用C+ 以及面向对象知识解决实际问题的能力,初步掌握MFC编程的基本功能,掌握一种可视化编程的方法,学习使用CStatic控制操作位图,加强对C+面向对象程序设计的理解。 (3)掌握用C+ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识,学会利用C+程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。 (4)锻炼实际的编程能力,提高调查资料、查阅

3、技术文献、资料以及编写软件设计文档的能力,提高自学编程的能力。2.程序所实现的功能 (1)本程序除了实现了拼图所要求的基本功能外,还添加了背景音乐、计算步数和游戏所用的时间,当游戏开始时背景音乐自动循环播放,步数随player操作自动增加,时间自动增加。 (2)进入游戏界面后,player可以在菜单栏中选择游戏的难度、图片风格和拼图图像,亦可以自定义图片,若选择“简单”,程序将图片分成9块,若选择“困难”,程序将图片分成16块. (3)单击“重置”或按F3菜单项会弹出一个对话框让用户确认是否重置游戏。 (4)单击任意图象,图像将随机排列,并开始计时和记步,用户通过鼠标单击空格周围的图片来改变其

4、位置,用户没单击一次,步数增加一次。 (5)游戏中用户可通过单击“提示”菜单项或按F4来查看图像的缩略图及游戏相关信息。 (6)游戏状态栏显示用户所用时间及步数,成功时状态栏给出提示信息和所花费时间、步数,用户可选择其他图像或难度进行游戏。二、设计内容主程序流程图 用例图 : 返回重新选择背景图片及难度级别显示原图 不显示拼图成功是否选择原图提示开始游戏选择难度级别选择背景图片用户 2.4 CPictureDlg类中成员函数主要调用关系图三、设计方案论述 本程序有一个CPictureDlg类,它公有继承CDialog类的一些性质。CDialog类中包括位图的读入和显示,拼图游戏中的Pictur

5、e都是位图资源。在游戏程序中,采用Static Text即静态文本控件来显示位图。静态文本控件的功能比较简单,可显示字符串,图标,位图。 先为对话框的“游戏”中的菜单项“容易”和“困难”添加消息响应为另外还需为CPictureDlg类添加BOOL型变量Easy来标识游戏的难度(分为9格或16格),同时添加BOOL型变量IsRnd用来标识图格是否进行了随机位置的初始化,接下来为CPictureDlg对话框添加16个Static控件(可以先设置好一个控件后,再通过复制得到其它的控件),并设置它们的属性:ID设为IDC_IMAGE0到IDC_IMAGE15,Tabstop请勾上,Type属性设为Bi

6、tmap,控件添加好了后,我们需要添加一个CStatic类型的数组m_Image16,与这16个Static控件相关联,通过这个操作这个数组的下标来控制这16个控件对图像进行分格显示。建立关联的代码应写在CPictureDlg类中系统生成的OnInitDialog()函数体内,这个函数是整个对话框程序运行的入口,相当于一个main函数,在这个函数体里,我们也需要为之前声明的变量提供初始值,即将变量初始化,变量没有初始化的后果通常会造成内存泄露,使程序在运行时出现莫名奇妙的错误。判断游戏是否完成的函数IsWin(),只要所有的Static控件都回到了相应的位置,就可以认为用户己完成了拼图,即游戏

7、完成。 四、调试分析1.实际完成的情况(1)完成的功能: 本程序除了实现了拼图所要求的基本功能外,还添加了背景音乐、计算步数和游戏所用的时间,当游戏开始时背景音乐自动循环播放,步数随player操作自动增加,时间自动增加。 (2)支持的数据类型: BOOL类型、控件数组类型。程序的性能分析 本程序能够很好的运行,并且画面质量以及音质方面都很高上机过程中出现的问题及其解决方案 1)开始导入图片时,图片不能显示,重新导入bmp格式的图片后解决了。 2)开始建立了时间函数OnTimer,但是游戏运行后时间并不增加,在开始游戏对应的函 数中增加SetTimer函数,得到想要的结果。 3)初始设置的快捷

8、键无效,查阅资料后加入Accelerator及相应的函数,使得快捷键有效。程序中可以改进、扩充的功能及设计实现构想。 1)游戏的难度等级有点少,可以适当增加几个等级。 2)游戏未设置根据用户花费的时间和步数判定用户的成绩并进行排名的功能,可以增设,以便用户了解自己玩的水平。用户手册1.打开Picture文件夹,双击Ppicture.dsw标志打开程序,然后运行。2.开始程序会出现以下欢迎界面: 3.用户需要选择图片、难度和图片风格,然后单击图片开始游戏,计时器开始计时,用户通过鼠标单击空格周围的图片来改变其位置,用户每单击一次,步数增加一次。4.游戏中用户可通过单击“提示”菜单项或按F4来查看

9、图像的缩略图及游戏相关信息。图像缩略图 游戏相关信息 用户也可以单击菜单栏中的重置或按快捷键F3重置图片,会出现提示信息,用户单击确定重置图片。提示框如下: 6.当完成拼图后系统会自动给出成功提示,并显示用户的成绩,用户单击确定后可以选择其他图片或难度继续游戏,也可以选择单击“退出”或按Esc退出游戏。六、设计总结通过本次课程设计,学习并初步掌握了基于对话框的MFC程序的设计,并学会了使用CStatic控件操作位图。熟悉了在基于对话框的工程中加入菜单操作、用代码操作菜单、Windows位图文件的基本结构、Visual C+中对位图资源的操作、Visual C+中对自定义位图文件的操作、设置相关

10、位图的概念、用Static控件显示位图以及用Status Bar显示提示信息和Visual C+随机函数。在设计过程中,曾遇到了两个瓶颈导致程序一度无法完成,第一个是位图文件的添加,包括将图片格式转换成BMP格式、添加相关Static控件,尤其是对控件图标不熟悉的情况下,一时不知道在哪儿添加控件,后来上网查阅并请教同学才得以完成控件的添加,使得程序可以继续完成。不过在程序即将结束的时候,又遇到了一个新的问题,导致程序差点功亏一篑,问题就是图片的缩略图的添加,也就是游戏中的“提示”的应用,当然没有“提示”操作,并不会影响整个程序的运行环境,但是为了使游戏者能够顺利的完成游戏,此“提示”操作必不可

11、少,在纠结了一段时间之后,在与同学的商讨下,终于完成了缩略图的添加,为程序的顺利完成提供了帮助。在本次设计的完成过程中,我对软件的开发有了一个初步的认识,一个小型游戏软件尚且需要不断地查阅资料、请教别人,那么完成一个大型的软件,必定需要更加复杂的过程。所以在做软件开发时首先要保持一个平静的心态,静下心来潜心去研究,同时还要熟悉的掌握、灵活的运用所学知识,方能完成设计。也对MFC程序开发也有了相应的了解,每一个函数都有其特定的用途,掌握好这其中的一些关联,对一个程序的完成不无好处,这次课程设计为我以后编程的相关学习奠定了基础,使我在不同方面得到了锻炼。七、程序中类的主要的成员函数BOOL OnI

12、nitDialog(); /初始化函数void OnRun(UINT nBitmapID,UINT nMenuID);/加载位图资源BOOL IsWin(); /判断拼图是否成功void MoveImage(int num); /移动随机小图块void Rnd(); /随机设置小图块的位置UINT MapRand(UINT nMax); /随机函数void SetImage(); /把图像拷贝到Static控件void SetPos() / 初始化Staic 控件的位置CString IntToString(int number); /为游戏添加计时器void OnTimer(UINT nID

13、Event); /计时函数void SetPre(); /生成略缩图void CPictureDlg:OnForHelp() /显示略缩图void ShowItem(); /显示帮助对话框八、主要参考文献 1.郑莉. 2.钱能. 3.黄维通.Visual C+面向对象与可视化程序设计(第2版).北京:清华大学出版社, 2003.12 4. 5. 潘爱民. 九、附录BOOL CPictureDlg:OnInitDialog()/整个对话框程序运行的入口CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does

14、 this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set small iconsrand(unsigned)time(NULL);hAccel = :LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1);/ TODO: Add extra initialization here Bit

15、map.LoadBitmap(IDB_BITMAP6);/初始界面是图像BITMAP6pKDC = new CDC;pMainMenu = GetMenu(); /获取菜单Style3d = TRUE;Islong = FALSE;Advan = FALSE;Easy = TRUE;TimeCon = 计时器;IntStep = 0;Strstep = 步数;SetWindowPos(NULL,0,0,600,700,SWP_NOMOVE); /控制窗口大小SetTimer(10,1000,NULL);/10表示计时器的名字,1000表示时间间隔是1000毫秒,NULL表示使用onTimer函

16、数。m_wndStatusBar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM|CCS_NODIVIDER,CRect(0,0,0,0),this,102);int static strPartDim5 = 100,230, 330,400, -1;m_wndStatusBar.SetParts(4,strPartDim);/将状态显示栏分为四块m_wndStatusBar.SetText(TimeCon,1,0);m_wndStatusBar.SetText(Strstep,2,0);m_wndStatusBar.SetText(Player,3,0);m_Im

17、age0.SubclassDlgItem(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.S

18、ubclassDlgItem(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_Image1

19、4.SubclassDlgItem(IDC_IMAGE14,this);m_Image15.SubclassDlgItem(IDC_IMAGE15,this);m_Preview.SubclassDlgItem(IDC_PREVIEW,this);OnBegin();PlaySound(rain.wav, NULL,SND_LOOP | SND_ASYNC);return TRUE; / return TRUE unless you set the focus to a controlvoid CPictureDlg:OnSysCommand(UINT nID, LPARAM lParam)/

20、截获控制命令的函数if (nID & 0 xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();/用来显示一个模态对话框,其返回值对应于用来关闭对话框的控件的IDelseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/

21、this is automatically done for you by the framework.void CPictureDlg:OnPaint() /系统自动生成重绘窗口函数if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon =

22、 GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();SetImage();/调用SetImage函数将图片拷贝到Static控件上面if(pKDC) pKDC-DeleteDC();/ The system calls this to ob

23、tain the cursor to display while the user drags/ the minimized window.HCURSOR CPictureDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CPictureDlg:OnRun(UINT nBitmapID, UINT nMenuID) pSubMenu = pMainMenu-GetSubMenu(1);/用GetSubMenu得到指向弹出菜单对象的指 pSubMenu-CheckMenuItem(ID_PICTURE1,MF_UNCHECKED);/用Chec

24、kMenuItem方法为nMenuID所指定的菜单项放置选中标记 pSubMenu-CheckMenuItem(ID_PICTURE2,MF_UNCHECKED);/用CBitmap对象的LoadBitmap方法将nBitmapID所指定的位图载入 pSubMenu-CheckMenuItem(ID_PICTURE3,MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_PICTURE4,MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_ADVAN,MF_UNCHECKED); pSubMenu-CheckMenuItem(nMenu

25、ID, MF_CHECKED); count = 0; Islong = FALSE; CanCount = FALSE; IsRnd = FALSE; Advan = FALSE; Bitmap.DeleteObject();/先调用函数CGdiObject:DeleteObject删除由LoadBitmap加载过的位图 Bitmap.LoadBitmap(nBitmapID);/用LoadBitmap方法载入新的位图对象 SetPos(); SetImage(); /IsWin();void CPictureDlg:OnPicture1() / TODO: Add your command

26、 handler code hereOnRun(IDB_BITMAP1, ID_PICTURE1);/调用OnRun()函数加载位图m_wndStatusBar.SetText(三只小熊,0,0);IntStep = 0;/设定初始步数为0SetStep(IntStep);/调用记步函数,计算步数PlaySound(yin.wav, NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture2() / TODO: Add your command handler code hereOnRun(IDB_BITMAP2, ID_PICTURE2);

27、/调用OnRun()函数加载位图m_wndStatusBar.SetText(阿狸,0,0);IntStep = 0;/设定初始步数为0 SetStep(IntStep);/调用记步函数,计算步数PlaySound(yue.wav, NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture3() / TODO: Add your command handler code hereOnRun(IDB_BITMAP3, ID_PICTURE3);/调用OnRun()函数加载位图m_wndStatusBar.SetText(小可爱,0,0); In

28、tStep = 0;/设定初始步数为0SetStep(IntStep);/调用记步函数,计算步数PlaySound(l.wav, NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture4() / TODO: Add your command handler code hereOnRun(IDB_BITMAP4, ID_PICTURE4);/调用OnRun()函数加载位图m_wndStatusBar.SetText(小象,0,0);IntStep = 0;/设定初始步数为0SetStep(IntStep);/调用记步函数,计算步数PlaySo

29、und(ai.wav, NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture5() / TODO: Add your command handler code hereOnRun(IDB_BITMAP5, ID_PICTURE5);/调用OnRun()函数加载位图m_wndStatusBar.SetText(比卡丘,0,0); IntStep = 0;/设定初始步数为0SetStep(IntStep);/调用记步函数,计算步数PlaySound(天籁童声 - Tell Me Why.wav, NULL, SND_LOOP | SND_AS

30、YNC);void CPictureDlg:OnAdvan() /自定义图片的函数/用LoadImage方法来加载自定义文件中的位图资源,然后用GetObject方法得到其BITMAP对象/ TODO: Add your command handler code hereCFileDialog dlg(TRUE, NULL, NULL, NULL, 位图文件(*.bmp)|*.bmp);INT Result = dlg.DoModal();/PlaySound(l.wav, NULL, SND_LOOP | SND_ASYNC);if(Result = IDOK)count = 0; CanC

31、ount = FALSE;IsRnd = FALSE; Advan = TRUE;hBitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(), IMAGE_BITMAP,0, 0, LR_LOADFROMFILE);BITMAP bm; :GetObject(hBitmap, sizeof(BITMAP), &bm); if(bm.bmWidth = bm.bmHeight)/判断图片是否是长大于高hBitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(),IMAGE_BITMAP, 650, 60

32、0, LR_LOADFROMFILE);/限定自定义图片的大小Width = 650; Height = 600;Islong = FALSE;else if(bm.bmWidth GetSubMenu(0);pSubMenu-CheckMenuItem(ID_HARD, MF_UNCHECKED);pSubMenu-CheckMenuItem(ID_EASY, MF_CHECKED);Easy = TRUE; IsRnd = FALSE;CanCount=FALSE;SetPos();m_wndStatusBar.SetText(加油!,0,0);IntStep = 0;/设定初始步数为0S

33、etStep(IntStep);/调用记步函数void CPictureDlg:OnHard()/困难游戏函数 / TODO: Add your command handler code herepSubMenu = pMainMenu-GetSubMenu(0);pSubMenu-CheckMenuItem(ID_EASY, MF_UNCHECKED);pSubMenu-CheckMenuItem(ID_HARD, MF_CHECKED);Easy = FALSE; IsRnd = FALSE;CanCount=FALSE;SetPos();m_wndStatusBar.SetText(有点

34、难度!,0,0);IntStep = 0;SetStep(IntStep);void CPictureDlg:SetPos()/对Static控件的位置进行初始化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;

35、if(Islong) 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, S

36、WP_NOMOVE);for(int k = 0; k = con; k+)m_Image(con+1)*2+k.SetWindowPos(NULL,x*k+move,2*y,0,0,SWP_NOSIZE);m_Image(con+1)*2+k.SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);if(!Easy)for(int l = 0; l = 3; l+)m_Imagel+12.SetWindowPos(NULL,x*l+move,3*y,0,0,SWP_NOSIZE);m_Imagel+12.SetWindowPos(NULL,0,0,x,y,SWP_NOMO

37、VE);CClientDC dc(&m_Imagel+12);void CPictureDlg:SetImage()/将图像拷贝到Static控件上面INT con;HANDLE picture;CRect rect(0,0,x,y);if(Advan=TRUE) picture = hBitmap;else if(Advan=FALSE) picture = Bitmap;if(Easy) con = 2;else if(!Easy) con = 3;for(int i = 0; i CreateCompatibleDC(&dc);pDC-SelectObject(picture);dc.B

38、itBlt(0,0,x,y,pDC,x*i,0,SRCCOPY);if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,);delete pDC;UpdateWindow();for(int j = 0; j CreateCompatibleDC(&dc);pDC-SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*j,y,SRCCOPY); if(Style3d) dc.DrawEdge(r

39、ect,EDGE_RAISED,BF_RECT); else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,); delete pDC;for(int k = 0; k CreateCompatibleDC(&dc);pDC-SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*k,2*y,SRCCOPY);if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,

40、0,),RGB(0,0,0,);delete pDC;if(!Easy)for(int l = 0; l CreateCompatibleDC(&dc);pDC-SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*l,3*y,SRCCOPY);if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,);delete pDC;if(!IsRnd)pSubMenu = pMainMenu-GetSu

41、bMenu(0);pSubMenu-EnableMenuItem(ID_FORHELP,MF_DISABLED|MF_GRAYED);void CPictureDlg:On3d()/图片3D效果 / TODO: Add your command handler code herepSubMenu = pMainMenu-GetSubMenu(2);pSubMenu-CheckMenuItem(ID_FLAT,MF_UNCHECKED);pSubMenu-CheckMenuItem(ID_3D,MF_CHECKED);Style3d = TRUE;SetImage();void CPicture

42、Dlg:OnFlat() /图片平面效果/ TODO: Add your command handler code herepSubMenu = pMainMenu-GetSubMenu(2);pSubMenu-CheckMenuItem(ID_FLAT,MF_CHECKED);pSubMenu-CheckMenuItem(ID_3D,MF_UNCHECKED);Style3d = FALSE;SetImage();UINT CPictureDlg:MapRand(UINT nMax)/随机函数int nRand = rand();float fMap = (float)nMax / RAND

43、_MAX;float fRetVal = (float)nRand*fMap+0.5f;return (UINT)fRetVal;void CPictureDlg:Rnd()/设定随机图格的位置int xnum,ynum,level;UINT rand;if(Easy) level = 8; /如果是9格else if(!Easy) level = 15;/如果是16格WINDOWPLACEMENT wpnum, wp15;for(int a = 0; a = 600; a+) rand = MapRand(4); if(rand=1) for(int b = 0; b = level - 1

44、; b+) m_Imagelevel.GetWindowPlacement(&wp15); m_Imageb.GetWindowPlacement(&wpnum); xnum = wpnum.rcNormalPosition.left; ynum = wpnum.rcNormalPosition.top; & wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left - x) m_Imageb.SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NU

45、LL,xnum,ynum,0,0,SWP_NOSIZE); if(rand = 2)for(int c = 0; c = level - 1; c+)m_Imagelevel.GetWindowPlacement(&wp15);m_Imagec.GetWindowPlacement(&wpnum);xnum = wpnum.rcNormalPosition.left;ynum = wpnum.rcNormalPosition.top;& wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left + x)m_Imagec.SetWindowP

46、os(NULL,xnum-x,ynum,0,0,SWP_NOSIZE); m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); if(rand = 3)for(int d = 0; d = level - 1; d+)m_Imagelevel.GetWindowPlacement(&wp15);m_Imaged.GetWindowPlacement(&wpnum);xnum = wpnum.rcNormalPosition.left;ynum = wpnum.rcNormalPosition.top; & wpnum.rcNorma

47、lPosition.top =wp15.rcNormalPosition.top + y)m_Imaged.SetWindowPos(NULL,xnum,ynum-y,0,0,SWP_NOSIZE); m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);if(rand = 4)for(int e = 0; e GetSubMenu(0);pSubMenu-EnableMenuItem(ID_FORHELP,MF_ENABLED);IsRnd = TRUE;CanCount=TRUE;void CPictureDlg:MoveImag

48、e(int num)/移动随机图格的函数int xnum,ynum,level;if(Easy) level = 8;else if(!Easy) level = 15;WINDOWPLACEMENT wpnum, wp15;m_Imagelevel.GetWindowPlacement(&wp15);m_Imagenum.GetWindowPlacement(&wpnum);xnum = wpnum.rcNormalPosition.left;ynum = wpnum.rcNormalPosition.top;if(num!=level) &wpnum.rcNormalPosition.le

49、ft =wp15.rcNormalPosition.left - x) m_Imagenum.SetWindowPos(NULL,xnum + x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); &wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left + x) m_Imagenum.SetWindowPos(NULL,xnum - x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(

50、NULL,xnum,ynum,0,0,SWP_NOSIZE); &wpnum.rcNormalPosition.top =wp15.rcNormalPosition.top + y) m_Imagenum.SetWindowPos(NULL,xnum,ynum - y,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); &wpnum.rcNormalPosition.top =wp15.rcNormalPosition.top - y) m_Imagenum.SetWindowPos(NULL,xn

51、um,ynum + y,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); void CPictureDlg:OnImage0() /单击Static控件时,首先判断图格是否进行了随机数初始化/ TODO: Add your control notification handler code hereif(IsRnd)/图格已随机初始化MoveImage(0);/移动图格 +IntStep;/步数加一 SetStep(IntStep);else Rnd();/图格未初始化,对图格进行随机初始化if(

52、IsWin() CanCount = FALSE;/调用IsWin()函数判断游戏是否完成void CPictureDlg:OnImage1() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(1); +IntStep;/步数加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage10() / TODO: Add your control notification handler cod

53、e hereif(IsRnd)MoveImage(10); +IntStep;/步数加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage11() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(11); +IntStep;/步数加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnI

54、mage12() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(12); +IntStep;/步数加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage13() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(13); +IntStep;/步数加一 SetStep(IntStep);e

55、lse Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage14() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(14);+IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage15() / TODO: Add your control notification handler code herei

56、f(IsRnd)MoveImage(15);+IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage2() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(2);+IntStep;/步数加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage3() / TO

57、DO: Add your control notification handler code hereif(IsRnd)MoveImage(3); +IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage4() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(4);+IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin(

58、) CanCount = FALSE;void CPictureDlg:OnImage5() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(5);+IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage6() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(6);+

59、IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage7() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(7);+IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage8() / TODO: Add your control not

60、ification handler code hereif(IsRnd)MoveImage(8);+IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage9() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(9);+IntStep;/步数加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;BOOL C

温馨提示

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

评论

0/150

提交评论