拼图游戏课程设计报告Word格式文档下载.docx
- 文档编号:21078199
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:19
- 大小:180.88KB
拼图游戏课程设计报告Word格式文档下载.docx
《拼图游戏课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《拼图游戏课程设计报告Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
第三阶段
编译调试运行,需要有耐心,通常情况下大小错误一大堆需要认真思考和修改,查看程序所要实现功能是否完全实现,是程序正确运行的关键
第四阶段
对比所查游戏的功能改进改程序,查看还需添加哪些功能,并进行改进编译调试运行,需要完善的思维
第五阶段
课程设计的最终目的,通过思考实际编程应用,巩固提高所学,并应用于以后的学习实践中。
2需求分析
2.1概述
本程序开发一款简单的拼图游戏,由于能力有限只能实现该游戏的基本内容:
3*3,4*4拼图点击空白图片的上下做图片实现交换,另外拼图过程该游戏还为用户提供提示(图片名称)、计步、计时,帮助对话框显示原图的缩略图,即可选择游戏提供的图片还可用户自定义bmp图片,关于对话框显示该游戏的信息。
2.2用户分析
1.软件中选定的图片用户不一定喜欢,应该让用户有选择图片的权利,选择用户细化的图片。
2.玩游戏本身就是娱乐和比拼的过程,最好提供可以让用户对比的东西,例如本游戏中给用户提供,提示,计时和计步三项。
3.用户玩该游戏的水平有高低之分,该游戏中设置了3*3和4*4两种选择供不同人水平来选择。
4.游戏就是享受,汲取快乐,因此该游戏中主要提供色彩温和丰富的卡通动漫图片可供用户选择,可使用户有个好心情。
2.3约束条件
开发一块游戏需要很强的基础知识、开发能力及时间。
它包括需求分析、编写代码、编译调试运行、改进功能、思考总结。
由于所学知识及时间有限,只能开发这一款比较简单的游戏软件。
再加之现在的拼图游戏功能不断在提高,自己做的这些也许很微不足道,但是我会努力尽自己所能编写出更好的程序,实现更多的功能。
2.4功能需求
1、该游戏软件中game菜单下选择easy和hard分别可进行3*3和4*4拼图:
点击白块区域的临块进行交换,直至拼好软件提示“祝贺你,你拼出来了!
”
2、软件中Picture下提供4个可供选择的图来拼图,当然还可自定义电脑上bmp图片来拼图。
3、点击game下的帮助菜单可看到帮助对话框,其中可看到原图的缩略图,点击OK回到原拼图界面,About显示关于对话框。
4、选择user下About菜单显示关于对话框。
5、拼图游戏界面下方被分为三部分:
提示描述栏(“加油”或描述图片内容),计时栏,计算已走步数栏。
6、最后user下Exit菜单可退出该游戏
2.5用户界面需求
拼图游戏界面:
不管什么游戏菜单选项是必需的,因此我在该界面中设置游戏、图片和用户三个主菜单下设一下子菜单:
选择菜单达到用户需求
注意:
1.未开始拼图时帮助菜单不可用
2.开始新游戏时,先点击图片任意处,打乱后开始计时拼图
3.拼图过程中若想查看原图,点击子菜单帮助
帮助对话框:
帮助用户回想起原图,进行拼图!
注意:
显示帮助对话框时game,picture的子菜单不可用,但user还是可以用。
自定义图片打开对话框:
3设计与实现
3.1概述
在准备工作阶段已思考好该游戏需要实现哪些功能,及运用什么实现,画好流程图,做好简单笔记,以便理清思路,提高编写代码时的效率。
完成程序后在进行运行、修改、提高。
最后进行完整的游戏:
选择图片,点击图片任意一处开始拼图(如若忘记原图可点击帮助菜单显示帮助对话框,看完后再按OK继续拼图。
)直至结束(若想退出可按exit子菜单。
)。
3.2详细设计
3.2.1类的抽象及设计
在该程序中添加了一个拼图类CPictureDlg,其类内包括拼图界面的各个参数(如格的长宽x、y,步数m_Step,时间count和布尔逻辑IsLong(图片是竖是直),IsHelp(拼图是否开始)。
光标,指针等,以及对拼图界面的操作函数(voidMoveImage(intnum)(用以移动图格的函数)、voidSetPos()(初始化Staic控件的位置)、voidSetImage()(把图像COPY到Static控件)、voidRnd()(随机图格的位置)、voidShowItem()(显示帮助对话框)等函数)。
通过这些对象,对类进行操作,完成拼图的整个过程。
classCPictureDlg:
publicCDialog
{
public:
CPictureDlg(CWnd*pParent=NULL);
//standardconstructor
~CPictureDlg();
public:
intm_Step;
步数
BOOLIsRnd;
随即格的行
CStaticm_Image[16];
完整图片被分成的9或16格
CBitmapbitmap;
该游戏软件为用户提供的可选择拼图的图片
HBITMAPhbitmap;
用户自定义的图片
CStaticm_Preview;
提前预览
INTx;
格的宽度
INTy;
格的长度
BOOLCanCount;
是否计时
intcount;
计时时间
CDC*pkDC;
BOOLEasy,Advan;
初始化为简单或难的拼图
CMenu*pMainMenu;
主菜单
CMenu*pSubMenu;
子菜单
CStatusBarCtrlm_wndStatusBar;
CStringTimeCon;
计时
BOOLIsHelp;
拼图是否开始
INTWidth,Height;
图片的宽度和高度
BOOLIsLong;
图片是竖是直
protected:
·
·
(以上是类内所包含的函数在接下来的3.3中会对这些函数加以解释分析
DECLARE_MESSAGE_MAP()
};
3.2.2表结构设计
无
3.3主要程序文件
该程序中用了较多函数都添加在PictureDig.Cpp文件中下面对其作以下解释:
voidMoveImage(intnum);
用以移动图格的函数
voidSetPos();
初始化Staic控件的位置
voidSetImage();
把图像COPY到Static控件
UINTMapRand(UINTnMax);
随机函数
voidRnd();
随机图格的位置
voidShowItem();
显示帮助对话框
BOOLIsWin();
判断拼图是否完成函数并显示消息框进行提示
voidSetPre();
生成略缩图
voidOnRun(UINTnBitmapID,UINTnMenuID);
改变菜单、初始化的函数
voidOnTimer(UINTnIDEvent);
对话框状态及计时函数
CStringIntToString(INTnum);
virtualBOOLOnInitDialog();
初始化对话框函数
voidOnPaint();
画图
HCURSOROnQueryDragIcon();
voidOnImage0();
对格进行操作函数,如果光标在该位置上则一动该格
voidOnWin();
快速完成函数
voidOnEasy();
进行3*3拼图函数
voidOnHard();
进行4*4拼图的函数
voidOnBegin();
回复原图函数
voidOnForHelp();
显示帮主对话框函数
voidOnAdvan();
自定义图片函数
voidOnPic1();
显示图片函数
voidOnExit();
退出游戏函数
voidOnAbout();
关于对话框函数
voidOnEndHelp();
重新显示图格函数
voidOnDlgAbout();
显示帮助对话框里的关于对话框函数
3.4开发环境以及部署环境要求
虚拟机里WindowsXP系统下的vc++6.0编程软件里的mfc编程MFCAppWizard【exe】下编写程序
3.5主要源码
显示图片函数
voidCPictureDlg:
:
OnPic3()
OnRun(IDB_BITMAP3,ID_PICTURE3);
通知缓存数据源物体进入了它的运行状态。
m_wndStatusBar.SetText("
加啡猫"
0,0);
为拼图画面下方设置提示
}
将完整图片分为九或十六格来实现单元格的移动
OnImage0()//单击static控件
if(IsRnd)
MoveImage(0);
如果已开始拼图则移动该格图片
else
Rnd();
否则光标继续移动
if(IsWin())
CanCount=FALSE;
未进行拼图,计时不开始
MoveImage(intnum)用以移动图格的函数
intxnum,ynum,level;
CStringm_temp="
已走:
"
;
if(Easy)
level=8;
如果是简单的则格为9格
else
level=15;
否则为16格
WINDOWPLACEMENTwpnum,wp15;
m_Image[level].GetWindowPlacement(&
wp15);
GetWindowPlacement指定窗口的位置
m_Image[num].GetWindowPlacement(&
wpnum);
xnum=wpnum.rcNormalPosition.left;
ynum=wpnum.rcNormalPosition.top;
if(num!
=level)
if(wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top
&
&
wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left-x)
左移一格
{
m_Image[num].SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
m_Step+=1;
}
SetWindowPos的作用是:
改变当前的尺寸、位置和弹出式子菜单,或顶层窗口。
孩子,弹出式菜单,和顶层窗口被要求根据他们的出现在屏幕上。
最上层的窗口接收,排名最高的,在第一个窗口秩序。
(向右向上向下与向左算法相同,只需稍微改一下就可以。
)
m_temp+=IntToString(m_Step)+"
步"
m_wndStatusBar.SetText(m_temp,2,0);
选择9或16格拼图以下是9格的的实现函数:
OnEasy()
pSubMenu=pMainMenu->
GetSubMenu(0);
pSubMenu->
CheckMenuItem(ID_HARD,MF_UNCHECKED);
设置check-mark属性的未检查状态
CheckMenuItem(ID_EASY,MF_CHECKED);
设置check-mark属性检查状态
Easy=TRUE;
IsRnd=FALSE;
count=0;
CanCount=FALSE;
m_Step=0;
m_temp+=IntToString(m_Step)+"
m_wndStatusBar.SetText(m_temp,2,0);
将一个字符串对象剪贴板上使用指定的剪贴板对象的格式。
命名参数不支持
SetPos();
//IsWin();
m_Image[8].ShowWindow(SW_SHOW);
激活窗口,然后把它展览在目前的大小和位置
加油!
显示帮主对话框函数:
ShowItem()//显示帮助对话框
INTcount;
if(Easy)
count=7;
count=14;
if(!
IsHelp)
{
GetDlgItem(IDC_ENDHELP)->
ShowWindow(SW_SHOW);
·
for(inti=0;
i<
=count;
i++)
m_Image[i].ShowWindow(SW_HIDE);
使菜单项不能被选择消退。
pSubMenu=pMainMenu->
pSubMenu->
EnableMenuItem(ID_BEGIN,MF_DISABLED|MF_GRAYED);
GetSubMenu
(1);
EnableMenuItem(ID_PICTURE1,MF_DISABLED|MF_GRAYED);
IsHelp=TRUE;
进行拼图后,帮助不可用
}
隐藏这扇窗户,通过回到另一个窗口
ShowWindow(SW_HIDE);
m_Image[i].ShowWindow(SW_SHOW);
使菜单项,这样它可以选择和恢复从它使状态。
EnableMenuItem(ID_BEGIN,MF_ENABLED);
EnableMenuItem(ID_PICTURE1,MF_ENABLED);
IsHelp=FALSE;
未进行拼图,帮助不可用
显示是否完成拼图函数
BOOLCPictureDlg:
IsWin()//判断是否完成的函数
WINDOWPLACEMENTwp;
INTcon,move;
INTwin=0;
if(IsLong)如果图片是长方形
move=70;
else
move=0;
con=2;
con=3;
for(inta=0;
a<
=con;
a++)
m_Image[a].GetWindowPlacement(&
wp);
指定窗口的位置
if(wp.rcNormalPosition.top==0&
wp.rcNormalPosition.left==a*x+move)
win+=1;
if(Easy&
win==9)
判断是否完成:
3*3时九格均已拼好是才算完成
m_Image[8].ShowWindow(SW_SHOW);
m_wndStatusBar.SetText("
祝贺你,拼出来了!
MessageBox("
);
returnTRUE;
若十六格均拼好则界面下方和消息框内都显示“祝贺你,拼出来了!
if(!
Easy&
win==16)
4*4时十六格均拼好才算完成
m_Image[15].ShowWindow(SW_SHOW);
else
returnFALSE;
自定义图片函数:
OnAdvan()//菜单函数,自定义图片
CFileDialogdlg(TRUE,NULL,NULL,NULL,"
位图文件(*.bmp)|*.bmp"
这类封装窗户可以通用文件对话框,它提供了一个简单的方法来执行这些标准,打开文件和文件另存为对话框。
INTResult=dlg.DoModal();
if(Result==IDOK)
CStringname="
(自定义):
"
+dlg.GetFileName();
count=0;
m_Step=0;
CStringm_temp="
IsRnd=FALSE;
Advan=TRUE;
hbitmap=(HBITMAP):
LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
BITMAPbm;
:
GetObject(hbitmap,sizeof(BITMAP),&
bm);
CheckMenuItem(ID_PICTURE1,MF_UNCHECKED);
SetPos();
SetImage();
if(Easy)
激活窗口,然后把它展览在目前的大小和位置
m_wndStatusBar.SetText(name,0,0);
if(Result==IDCANCEL)
return;
计时函数
OnTimer(UINTnIDEvent)//Statusbar计时
nIDEvent=10;
计时:
if(CanCount==TRUE)
count+=1;
开始拼图后才开始计时
TimeCon=IntToString(count);
TimeCon=m_temp+"
+TimeCon+"
秒"
m_wndStatusBar.SetText(TimeCon,1,0);
拼图界面下方显示计时及所用时间的秒数
初始化Staic控件的位置
SetPos()
BITMAPbm;
Advan)如果不是自定义图片则打开该图片高宽等于图片本身的
bitmap.GetObject(sizeof(BITMAP),&
Width=bm.bmWidth;
Height=bm.bmHeight;
x=Width/3;
y=Height/3;
else/
x=Width/4;
y=Height/4;
for(inti=0;
m_Image[i].SetWindowPos(NULL,x*i+move,0,0,0,SWP_NOSIZE);
保持目前的大小
m_Image[i].SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);
保持现在的位置
Easy)如果4*4拼图时
for(intl=0;
l<
=3;
l++)
m_Image[l+12].SetWindowPos(NULL,x*l+move,3*y,0,0,SWP_NOSIZE);
m_Image[l+12].SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);
弹出式子菜单,和顶层窗口被要求根据他们的出现在屏幕上。
4测试
4.1概述
首先测试各个子菜单的功能是否都实现,再玩转整个游戏,看所要实现的功能是否都完全实现,并且检查还有无需要改进的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 拼图游戏 课程设计 报告