版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 目录1、 需求分析1 1.课程设计目的1 2.程序所实现的功能12、 设计内容11. 主模块图12.1. 主程序流程图2 2.2 用例图2 2.3主程序调用关系图32.4函数主要调用关系图3三、设计方案论述3四、调试分析4 1.实际完成的情况4 2.程序的性能分析43.上机过程中出现的问题及其解决方案44.程序中可以改进、扩充的功能及设计实现构想4五、用户手册4六、设计总结5 七、程序中主要的功能函数6八、主要参考文献6九、附录6一、需求分析1.课程设计目的 (1)运用C+语言设计拼图游戏具有极强的实践性,加强我们对C+课程基础知识点的理解掌握和灵活运用理能力,培养实际分析问题能力,养成良好
2、的编程习惯;了解C+面向对象的设计方法与技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。 (2)进一步领会程序设计的特点和应用,提高运用C+ 以及面向对象知识解决实际问题的能力,初步掌握MFC编程的基本功能,掌握一种可视化编程的方法,学习使用CStatic控制操作位图,加强对C+面向对象程序设计的理解。 (3)掌握用C+ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识,学会利用C+程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续
3、的相关课程的学习打下基础。 (4)锻炼实际的编程能力,提高调查资料、查阅技术文献、资料以及编写软件设计文档的能力,提高自学编程的能力。2.程序所实现的功能 (1)本程序除了实现了拼图所要求的基本功能外,还添加了背景音乐、计算步数和游戏所用的时间,当游戏开始时背景音乐自动循环播放,步数随player操作自动增加,时间自动增加。 (2)进入游戏界面后,player可以在菜单栏中选择游戏的难度、图片风格和拼图图像,亦可以自定义图片,若选择“简单”,程序将图片分成9块,若选择“困难”,程序将图片分成16块. (3)单击“重置”或按F3菜单项会弹出一个对话框让用户确认是否重置游戏。 (4)单击任意图象,
4、图像将随机排列,并开始计时和记步,用户通过鼠标单击空格周围的图片来改变其位置,用户没单击一次,步数增加一次。 (5)游戏中用户可通过单击“提示”菜单项或按F4来查看图像的缩略图及游戏相关信息。 (6)游戏状态栏显示用户所用时间及步数,成功时状态栏给出提示信息和所花费时间、步数,用户可选择其他图像或难度进行游戏。二、设计内容1.主模块图2.1主程序流程图 2.2 用例图 : 返回重新选择背景图片及难度级别显示原图 不显示拼图成功是否选择原图提示开始游戏选择难度级别选择背景图片用户 2.3主程序类调用关系图2.4 CPictureDlg类中成员函数主要调用关系图三、设计方案论述 本程序有一个CPi
5、ctureDlg类,它公有继承CDialog类的一些性质。CDialog类中包括位图的读入和显示,拼图游戏中的Picture都是位图资源。在游戏程序中,采用Static Text即静态文本控件来显示位图。静态文本控件的功能比较简单,可显示字符串,图标,位图。 先为对话框的“游戏”中的菜单项“容易”和“困难”添加消息响应为另外还需为CPictureDlg类添加BOOL型变量Easy来标识游戏的难度(分为9格或16格),同时添加BOOL型变量IsRnd用来标识图格是否进行了随机位置的初始化,接下来为CPictureDlg对话框添加16个Static控件(可以先设置好一个控件后,再通过复制得到其它的
6、控件),并设置它们的属性:ID设为IDC_IMAGE0到IDC_IMAGE15,Tabstop请勾上,Type属性设为Bitmap,控件添加好了后,我们需要添加一个CStatic类型的数组m_Image16,与这16个Static控件相关联,通过这个操作这个数组的下标来控制这16个控件对图像进行分格显示。建立关联的代码应写在CPictureDlg类中系统生成的OnInitDialog()函数体内,这个函数是整个对话框程序运行的入口,相当于一个main函数,在这个函数体里,我们也需要为之前声明的变量提供初始值,即将变量初始化,变量没有初始化的后果通常会造成内存泄露,使程序在运行时出现莫名奇妙的错
7、误。判断游戏是否完成的函数IsWin(),只要所有的Static控件都回到了相应的位置,就可以认为用户己完成了拼图,即游戏完成。 四、调试分析1.实际完成的情况(1)完成的功能: 本程序除了实现了拼图所要求的基本功能外,还添加了背景音乐、计算步数和游戏所用的时间,当游戏开始时背景音乐自动循环播放,步数随player操作自动增加,时间自动增加。 (2)支持的数据类型: BOOL类型、控件数组类型。2. 程序的性能分析 本程序能够很好的运行,并且画面质量以及音质方面都很高3. 上机过程中出现的问题及其解决方案 1)开始导入图片时,图片不能显示,重新导入bmp格式的图片后解决了。 2)开始建立了时间
8、函数OnTimer,但是游戏运行后时间并不增加,在开始游戏对应的函 数中增加SetTimer函数,得到想要的结果。 3)初始设置的快捷键无效,查阅资料后加入Accelerator及相应的函数,使得快捷键有效。4. 程序中可以改进、扩充的功能及设计实现构想。 1)游戏的难度等级有点少,可以适当增加几个等级。 2)游戏未设置根据用户花费的时间和步数判定用户的成绩并进行排名的功能,可以增设,以便用户了解自己玩的水平。5、 用户手册1.打开Picture文件夹,双击Ppicture.dsw标志打开程序,然后运行。2.开始程序会出现以下欢迎界面: 3.用户需要选择图片、难度和图片风格,然后单击图片开始游
9、戏,计时器开始计时,用户通过鼠标单击空格周围的图片来改变其位置,用户每单击一次,步数增加一次。4.游戏中用户可通过单击“提示”菜单项或按F4来查看图像的缩略图及游戏相关信息。图像缩略图 游戏相关信息 5. 用户也可以单击菜单栏中的重置或按快捷键F3重置图片,会出现提示信息,用户单击确定重置图片。提示框如下: 6.当完成拼图后系统会自动给出成功提示,并显示用户的成绩,用户单击确定后可以选择其他图片或难度继续游戏,也可以选择单击“退出”或按Esc退出游戏。六、设计总结通过本次课程设计,学习并初步掌握了基于对话框的MFC程序的设计,并学会了使用CStatic控件操作位图。熟悉了在基于对话框的工程中加
10、入菜单操作、用代码操作菜单、Windows位图文件的基本结构、Visual C+中对位图资源的操作、Visual C+中对自定义位图文件的操作、设置相关位图的概念、用Static控件显示位图以及用Status Bar显示提示信息和Visual C+随机函数。在设计过程中,曾遇到了两个瓶颈导致程序一度无法完成,第一个是位图文件的添加,包括将图片格式转换成BMP格式、添加相关Static控件,尤其是对控件图标不熟悉的情况下,一时不知道在哪儿添加控件,后来上网查阅并请教同学才得以完成控件的添加,使得程序可以继续完成。不过在程序即将结束的时候,又遇到了一个新的问题,导致程序差点功亏一篑,问题就是图片的
11、缩略图的添加,也就是游戏中的“提示”的应用,当然没有“提示”操作,并不会影响整个程序的运行环境,但是为了使游戏者能够顺利的完成游戏,此“提示”操作必不可少,在纠结了一段时间之后,在与同学的商讨下,终于完成了缩略图的添加,为程序的顺利完成提供了帮助。在本次设计的完成过程中,我对软件的开发有了一个初步的认识,一个小型游戏软件尚且需要不断地查阅资料、请教别人,那么完成一个大型的软件,必定需要更加复杂的过程。所以在做软件开发时首先要保持一个平静的心态,静下心来潜心去研究,同时还要熟悉的掌握、灵活的运用所学知识,方能完成设计。也对MFC程序开发也有了相应的了解,每一个函数都有其特定的用途,掌握好这其中的
12、一些关联,对一个程序的完成不无好处,这次课程设计为我以后编程的相关学习奠定了基础,使我在不同方面得到了锻炼。七、程序中类的主要的成员函数BOOL OnInitDialog(); /初始化函数void OnRun(UINT nBitmapID,UINT nMenuID);/加载位图资源BOOL IsWin(); /判断拼图是否成功void MoveImage(int num); /移动随机小图块void Rnd(); /随机设置小图块的位置UINT MapRand(UINT nMax); /随机函数void SetImage(); /把图像拷贝到Static控件void SetPos() / 初
13、始化Staic 控件的位置CString IntToString(int number); /为游戏添加计时器void OnTimer(UINT nIDEvent); /计时函数void SetPre(); /生成略缩图void CPictureDlg:OnForHelp() /显示略缩图void ShowItem(); /显示帮助对话框八、主要参考文献 1.郑莉.C+语言程序设计(第3版)北京:清华大学出版社,2005.7 2.钱能.C+程序设计教程(第2版)北京:清华大学出版社,2005.8 3.黄维通.Visual C+面向对象与可视化程序设计(第2版).北京:清华大学出版社, 2003
14、.12 4.刘路放.Visual C+与面向对象程序设计教程(第二版).北京:高等教育出版社,2007.8 5. 潘爱民. COM原理与应用.北京:清华大学出版社,1999.11九、附录BOOL CPictureDlg:OnInitDialog()/整个对话框程序运行的入口CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon
15、, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set small iconsrand(unsigned)time(NULL);hAccel = :LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1);/ TODO: Add extra initialization here Bitmap.LoadBitmap(IDB_BITMAP6);/初始界面是图像BITMAP6pKDC = new CDC;pMainMenu = GetMenu(); /获取菜
16、单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函数。m_wndStatusBar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM|CCS_NODI
17、VIDER,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_Image0.SubclassDlgItem(IDC_IMAGE0,this);m_Image1.Subc
18、lassDlgItem(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.SubclassDlgItem(IDC_IMAGE7,this);m_Image8.SubclassDl
19、gItem(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_Image14.SubclassDlgItem(IDC_IMAGE14,this);m_Image15.Subcl
20、assDlgItem(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)/截获控制命令的函数if (nID & 0xFFF0) = IDM_AB
21、OUTBOX)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,/ this is automatically done for you b
22、y 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 = GetSystemMetrics(SM_CYICON);CRect r
23、ect;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 obtain the cursor to display w
24、hile 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);/用CheckMenuItem方法为nMenuID所
25、指定的菜单项放置选中标记 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
26、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
27、 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(ID
28、B_BITMAP2, ID_PICTURE2);/调用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);/调用
29、OnRun()函数加载位图m_wndStatusBar.SetText("小可爱",0,0); IntStep = 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.
30、SetText("小象",0,0);IntStep = 0;/设定初始步数为0SetStep(IntStep);/调用记步函数,计算步数PlaySound("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);
31、 IntStep = 0;/设定初始步数为0SetStep(IntStep);/调用记步函数,计算步数PlaySound("天籁童声 - Tell Me Why.wav", NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnAdvan() /自定义图片的函数/用LoadImage方法来加载自定义文件中的位图资源,然后用GetObject方法得到其BITMAP对象/ TODO: Add your command handler code hereCFileDialog dlg(TRUE, NULL, NULL, NULL, &quo
32、t;位图文件(*.bmp)|*.bmp");INT Result = dlg.DoModal();/PlaySound("l.wav", NULL, SND_LOOP | SND_ASYNC);if(Result = IDOK)count = 0; CanCount = FALSE;IsRnd = FALSE; Advan = TRUE;hBitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(), IMAGE_BITMAP,0, 0, LR_LOADFROMFILE);BITMAP bm; :GetObject(hB
33、itmap, sizeof(BITMAP), &bm); if(bm.bmWidth >= bm.bmHeight)/判断图片是否是长大于高hBitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(),IMAGE_BITMAP, 650, 600, LR_LOADFROMFILE);/限定自定义图片的大小Width = 650; Height = 600;Islong = FALSE;else if(bm.bmWidth < bm.bmHeight)hBitmap = (HBITMAP):LoadImage(NULL,dlg.G
34、etFileName(),IMAGE_BITMAP, 600, 650, LR_LOADFROMFILE);Width =600; Height = 650;Islong = TRUE;Bitmap.DeleteObject();SetPos();SetImage();/IsWin();m_wndStatusBar.SetText(dlg.GetFileTitle(),0,0);else if(Result = IDCANCEL)return;void CPictureDlg:OnEasy() /简单游戏函数/ TODO: Add your command handler code herep
35、SubMenu = pMainMenu->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;/设定初始步数为0SetStep(IntStep);/调用记步函数void CPictureDlg:OnHard(
36、)/困难游戏函数 / 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("有点难度!",0,0);IntStep = 0;Se
37、tStep(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;if(Islong) move = 7
38、0;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);
39、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_NOMOVE)
40、;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 <= con; i+)CDC *pDC = new CDC;CClientDC dc(&m_
41、Imagei);pDC->CreateCompatibleDC(&dc);pDC->SelectObject(picture);dc.BitBlt(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 <= con; j+)CClientDC dc(&m_I
42、magecon+1+j);CDC *pDC = new CDC;pDC->CreateCompatibleDC(&dc);pDC->SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*j,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;for(int k = 0; k <= con; k+)CClientDC
43、 dc(&m_Image(con+1)*2+k);CDC *pDC = new CDC;pDC->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,0,),RGB(0,0,0,);delete pDC;if(!Easy)for(int l = 0; l
44、 <= 3; l+)CClientDC dc(&m_Imagel+12);CDC *pDC = new CDC;pDC->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)
45、pSubMenu = pMainMenu->GetSubMenu(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_CH
46、ECKED);Style3d = TRUE;SetImage();void CPictureDlg: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 nM
47、ax)/随机函数int nRand = rand();float fMap = (float)nMax / RAND_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;
48、a+) rand = MapRand(4); if(rand=1) for(int b = 0; b <= level - 1; b+) m_Imagelevel.GetWindowPlacement(&wp15); m_Imageb.GetWindowPlacement(&wpnum); xnum = wpnum.rcNormalPosition.left; ynum = wpnum.rcNormalPosition.top; if(wpnum.rcNormalPosition.top = wp15.rcNormalPosition.top && wpn
49、um.rcNormalPosition.left =wp15.rcNormalPosition.left - x) m_Imageb.SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); if(rand = 2)for(int c = 0; c <= level - 1; c+)m_Imagelevel.GetWindowPlacement(&wp15);m_Imagec.GetWindowPlacement(&wpnu
50、m);xnum = wpnum.rcNormalPosition.left;ynum = wpnum.rcNormalPosition.top;if(wpnum.rcNormalPosition.top=wp15.rcNormalPosition.top&& wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left + x)m_Imagec.SetWindowPos(NULL,xnum-x,ynum,0,0,SWP_NOSIZE); m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,S
51、WP_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; if(wpnum.rcNormalPosition.left=wp15.rcNormalPosition.left&& wpnum.rcNormalPosition.top =wp15.rcNormalPosition.top + y)m_Imaged.SetWindowPos(NULL,xnum,ynum-y,0,0,SWP_NOSIZE);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苏教版江苏省无锡市重点中学2023-2024学年高一上学期期中数学试题
- 美宝莲口红课件
- 校园风景 课件
- 西京学院《造型基础》2021-2022学年第一学期期末试卷
- 2.1.2植物细胞第一课时
- 初二下收心班会
- 西京学院《机械设计》2022-2023学年第一学期期末试卷
- 阳光下的影子
- 西华师范大学《中国音乐史与名作赏析》2022-2023学年第一学期期末试卷
- 西华师范大学《刑事诉讼法学》2021-2022学年期末试卷
- 慢性病的心理预防及调适护理课件
- 煤矿安全检查工课件
- 2024年银行考试-招商银行历年考试高频考点试题附带答案
- 2024肺栓塞指南解读2024
- 造价-人员配备方案1
- 中学教代会代表选举办法
- 医院药房二维码溯源管理
- 四川省凉山州2023-2024学年七年级上学期期末检测历史试卷
- 青岛市特殊建设工程消防验收办事指南
- 北京市西城区2023-2024学年五年级上学期期末数学试卷
- 初中九年级化学课件复分解反应的条件“百校联赛”一等奖
评论
0/150
提交评论