拼图游戏 课程报告.docx
- 文档编号:11415758
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:14
- 大小:1.43MB
拼图游戏 课程报告.docx
《拼图游戏 课程报告.docx》由会员分享,可在线阅读,更多相关《拼图游戏 课程报告.docx(14页珍藏版)》请在冰豆网上搜索。
拼图游戏课程报告
游戏设计
课程设计报告
设计题目:
精美拼图游戏
专业数字媒体技术
班级
姓名
学号
指导教师
完成时间
2012年秋季学期
游戏设计课程设计
一、课程设计目的
游戏设计课程设计是数字媒体技术专业必修的实践环节。
本次课程设计是本学期游戏设计课程实践环节的深化和延续。
旨在通过此次实践环节的训练,使我们能够更加全面地掌握游戏设计的整体策划以及系统地掌握游戏设计的体系结构。
通过对我们所做游戏进行的类型确定、前期分析、整体策划以及设计制作过程中所涉及的相关技术的学习和掌握,提高了我们的实践能力以及团队协作能力,为我们在计算机技术的应用上拓宽了道路,对进入游戏设计这一领域的深入研究做了准备。
、
二、课程设计内容
本课程设计按照其要求通过分组来进行,本组3人。
:
新游戏、自动拼图、帮助功能
:
flash欢迎界面,参数设置,图片预览
:
分数存储及排行榜、图片切换、鼠标提示
在制作游戏的前期准备工作中,通过翻阅资料和上网查找,确定以VC++语言环境下MFC为开发平台,制作一款益智休闲小游戏。
通过协商我们小组一致同意,最终确定制作拼图游戏,并在此基础上相应添加一些功能菜单,使游戏更易操控、更人性化、更加完善,形成一个可玩性较强的小游戏。
游戏的故事摘要
由于是小游戏的开发,故事情节比较简单。
在开场添加一段FLASH动画来表明故事的背景:
圣诞节到了,一个小女孩收到了很多礼物,但是她不小心打碎了,希望有人能帮她重新拼好。
这样也就为拼图游戏的制作奠定了一个较为合理的故事前提。
游戏的类型
拼图游戏属于益智类小游戏,在我们的游戏中添加了一些其他菜单控件,达到增加游戏的可控性的目的,让玩家根据自己的喜好调整游戏参数,并且可以通过载入音乐使游戏变得更加有乐趣。
制作工具
软件运行环境为MicrosoftWindows7,硬件平台限为PC,制作工具为Visualstudio2010编程软件及Flash软件。
技术设计路线
拼图游戏属于益智类游戏,图形界面确定为MFC的对话框Dialogue的形式框架,即微软基础类库。
这套类库以C++类的形式封闭了WindowsAPI,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC的主要优点是可以用面向对象的方法来调用WindowsAPI,MFC将很多应用程序开发中常用的功能自动化,并且提供了文档框架视图以及活动文档这样的便于自定义的应用程序框架。
为此,我们选用MFC来开发一个单文档的拼图游戏使得技术实现上变得相对容易。
游戏玩法
拼图游戏属于益智类游戏,5岁以上各个年龄段都可以进行游戏。
操作简单,游戏目的清晰。
菜单栏中开始新游戏,则窗口中整幅图片被分割为若干块,且各图块位置会随机分布;玩家开始游戏则只需移动黑块周围的图块,想办法将图片还原为原始完整的图像。
在文件选项中可以打开鼠标提示功能,查看各个图块的原始位置;可任意选择原始图片,添加背景音乐;还可以选择系统自动拼图;游戏完成可以记录玩家信息,生成排行榜。
运用流程图
功能制作步骤类关系图及类成员:
其中CPtGameDlg.cpp为拼图游戏的主对话框类,这个应用程序里包含了所有功能的实现。
我主要制作的三个功能如下:
1、拼图原图切换
选择图片功能是在对话框的菜单栏添加功能按钮—图片,并给该下拉菜单添加位图选项及自定义选项。
在CPtGameDlg.cpp主对话框类中添加句柄及对每个图片设置消息映射机制函数:
CPtGameDlg:
:
OnPic1()、CPtGameDlg:
:
OnPic2()......CPtGameDlg:
:
OnPic6()分别实现调用不同图片操作,具体实现代码如下:
CPtGameDlg:
:
OnPic1(){
//TODO:
Addyourcommandhandlercodehere
gamepicture=IDB_BITMAP1;
AfxGetApp()->WriteProfileInt(_T("游戏参数"),_T("gamepicture"),IDB_BITMAP1);
bitmap.Detach();
bitmap.LoadBitmap(IDB_BITMAP1);
CPtGameDlg:
:
OnNewgame();
}
CPtGameDlg:
:
OnUserpic()用于自定义BMP图片的选择功能的实现,其中可以自己将图片切割为适合游戏使用的大小并进行加载。
拼图原始图片切换
此函数通过窗口的句柄根据窗口大小来设置图片在窗口的位置:
voidCPtGameDlg:
:
paintblack()
{
RECTrc;
rc.left=(blacksite.x-1)*cellwidth;
rc.top=(blacksite.y-1)*cellheight;
rc.right=rc.left+cellwidth;
rc.bottom=rc.top+cellheight;
CDC*pDC=GetDC();
pDC->FillSolidRect(&rc,RGB(0,0,0));
pDC->DeleteDC();
return;
}
每换完一次图片都需要刷新一次窗口,将改变的参数传递给新游戏函数的参数,最终调用CPtGameDlg:
:
nitialgame()函数进行初始化游戏。
voidCPtGameDlg:
:
OnNewgame()
{
tracksteps=0;初始话步数为零
cellwidth=clientwidth/hnums;//计算每张小图的宽度
cellheight=clientheight/vnums;//计算每张小图的高度
initialsiteinfo();//初始化位置信息
blacksite.x=hnums;//空缺块的宽度
blacksite.y=vnums;//空缺块的高度度
Invalidate(FALSE);
initialgame();//初始化游戏
}
2、玩家分数存储、排行榜
玩家分数记录并生成排行榜主要运用了数据库链接与MFC的窗口控制两项。
建立paihangDlg类用于显示排行榜并显示存储玩家信息的对话框。
此处在CPtGameDlg类中建立OnFilePaihangbang()函数,在其中调用paihang类中的函数进行与paihangbang.mdb数据库进行交互。
voidCPtGameDlg:
:
OnFilePaihangbang()
{
paihangpaihangdlg;
paihangdlg.DoModal();
}
此处在paihang类中的函数的实现:
BOOLpaihang:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
DWORDdwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE;
list.ModifyStyle(0,LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS);
list.SetExtendedStyle(dwExStyle);//设置列名
list.InsertColumn(0,"玩家");
list.InsertColumn(1,"得分");
list.InsertColumn(2,"排名");
list.InsertColumn(3,"日期");
RECTrectList;
list.GetWindowRect(&rectList);
intwidth=(rectList.right-rectList.left)/5;
//设置列宽
............
m_ADOConn.ExitConnect();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//异常:
OCX属性页应返回FALSE
}
排行榜图示
3、鼠标提示
为了玩家的操作的简便性,在游戏窗口的下面状态栏内添加了图块提示功能,即在CPtGameDlg类中建立OnMousetell()菜单相应函数,使其能够调用OnMouseMove(UINTnFlags,CPointpoint)函数,进行在状态栏显示当前鼠标所指图块位于原图的位置参数,提高了游戏的准确性。
voidCPtGameDlg:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
default
structsitemousesite;
mousesite.x=point.x/cellwidth+1;
mousesite.y=point.y/cellheight+1;
if(m_bMouseTell==TRUE)
{
CStringstr;
charbuffer[5];
str="该图块在原始图片中的位置:
(第";
_itoa(siteinfo[mousesite.x][mousesite.y].y,buffer,10);
str+=buffer;str+="行,第";
.......
CDialog:
:
OnMouseMove(nFlags,point);
}
未开鼠标提示功能:
打开鼠标提示功能:
4、精美拼图游戏的其他功能如下图示:
开始动画:
游戏的开场是一个flash动画,通过动画的语言引出拼图游戏,增加了游戏的故事性和趣味性。
游戏的主界面:
游戏操作进行的主要窗口,功能集中在在菜单栏。
文件菜单:
一些功能集中在下拉菜单。
设置窗口:
在设置菜单中进入设置窗口,在该对话框中可以设置图片切割的行数,列数以及音效。
版权说明窗口:
图片预览框:
当玩家想要查看拼图的原始图片时,可以点击预览,5s后将自动关闭,但是对于玩家是会扣相应分数的。
三、总结
制作中出现的问题及解决方案
1、选择图片后没有实时切换
解决:
由于在建立了图片选择切换功能的函数时没有加OnNewgame()函数,即改变后的图片参数没有传递到本次的窗口显示函数中,还是用的是以前的图片的数据,窗口没有实时刷新。
2、鼠标提示不能对应
解决:
设计鼠标提示的函数时,定义的数组作为缓冲池,但是由于设置的字节数不够,导致变量随机取数不能控制,出现错误的位置提示。
3、数据库读取排行榜失败
解决:
由于建立数据库和对话框对应时要设置记录对象指针,并且要设置对象的记录序号,但是由于未给对象序号赋值,当指针读取时发生错误。
课设还可改进的方面
由于使用了MFC平台的利用大大降低了开发难度,但是同时MFC框架很难做出精美的游戏外观,也较难实现3D的游戏控制,没有实现三维人物的设计,所以游戏是二维的小游戏,这一点还是需继续改进的,如在开场动画中添加3D人物,或是在游戏界面建立人物作为虚拟玩家。
在功能方面基本达到各种游戏功能的实现,但是其实还可以增加一下如关卡设置,使游戏更加具有挑战性;多人游戏,可以增加游戏的竞技性。
收获及感悟
1、通过本次实验,我们对于游戏开发的基本流程以及各个步骤的重要性得到了切身的体会,并巩固了基于对话框的MFC程序的设计。
具体了解并掌握了如下库函数的操作:
pMainMenu=GetMenu();//得到对话框主菜单的指针
CMenu*GetSubMenu(intnPos);//得到菜单项的指针
BOOLLoadBitmap(LPCTSTRlpszResourceName);//载入新的位图对象
BOOLSetWindowsPos(…)//设置控件的位置
BOOLGetWindowPlacement(….)//取得控件所处的位置
以及创建状态栏控件等函数。
经过在项目中不断的调试程序,寻找错误,丰富了我们的编程经验,提升了编写MFC程序的能力。
2、在游戏制作方面,在程序设计之初,需要一步一步探索游戏的功能设计,并且要使得游戏更为完整、美观,增强了我们的思维逻辑性。
从功能上讲完成了拼图游戏所有的功能,并且添加了许多的新功能,如排行榜,玩家通过排行榜可以查看自己的得分情况;添加音乐、切换图片等这些都大大增加了本拼图游戏的趣味性。
参考文献
[1]C++程序设计实践教程2版[M].吴乃陵,李海文北京:
高等教育出版社,2009年3月.
[2]深入浅出MFC第2版[M].候俊杰北京:
华中科技大学出版社,2007年9月.
[3]VisualC++从入门到实践[M].葛亮北京:
清华大学出版社,2005年9月.
[4]董未名,汤筠.趣味程序导学VisualC++[M].北京:
清华大学出版社,2002年2月.
[5]坂本千寻.VisualC++专业游戏程序设计[M].博硕文化译.北京:
中国铁道出版社,2004年.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 拼图游戏 课程报告 课程 报告