Love Memory 游戏设计报告.docx_第1页
Love Memory 游戏设计报告.docx_第2页
Love Memory 游戏设计报告.docx_第3页
Love Memory 游戏设计报告.docx_第4页
Love Memory 游戏设计报告.docx_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

基于Kinect的“Love memory”游戏项目设计报告姓名学号工作量白X2012141463XXX25%郭X2012141463XXX25%陈XX2012141463XXX25%代X2012141463XXX25%2014年5 月6日目录1 引言31.1编写目的31.2项目概述31.3项目工作日志31.4项目成员分工52 总体设计62.1 逻辑设计62.2 系统框架设计62.3系统模块设计73 界面设计153.1 界面关系153.2 主界面设计163.3 子界面设计173.3.1 “游戏帮助”界面173.2.2“开始游戏”界面183.3.3 “游戏设置”界面203.4 音乐效果设计214 算法设计224.1 技术难点224.2主要算法设计224.2.1 牌和砖的实现224.2.2 牌和砖的布局实现224.2.3第一关记忆纸牌224.2.4第二关扫小三234.3.5 第三关跳跳跳254.3.6 关于Kinect的相关算法251 引言1.1编写目的从第三周开始,经过几周的开发,我们的项目已经初步完成。编写此设计报告以总结汇报本项目开发的游戏的设计内容、开发工作日志、系统构架、主要算法以及技术难点等问题。1.2项目概述本项目开发的游戏具有极其丰富的情景吸引力,该游戏是以许多人都知晓的飞屋环游记中的小胖罗素为闯关主角,游戏情景设定了他回到地球之后为了帮助卡尔爷爷找到失忆的艾丽奶奶,而走上了爱的记忆的闯关之旅。同时,世界版图就像蒙上了一层灰尘变成了灰色的,他以环游世界的方式遍历各个国家,且每个国家都有此国家特色的卡通人物接待小胖,为小胖进行游戏提示。在闯过每一关之后,世界版图上这个国家的颜色就会由灰暗转为彩色。当三关完成后,艾丽奶奶的记忆也会恢复。1.3项目工作日志编号任务名称开始时间完成时间工期1a. 确定项目b. 项目规划c. 需求分析d. 成员分工2014年3月9日2014年3月15日第3个教学周(7日)2a. Qt creator平台搭建b.学习Qt creatorc. 独立游戏界面设计(界面未跳转)d. 游戏剧情初步设计2014年3月16日2014年3月22日第4个教学周(7日)3a. 游戏多个界面之间的跳转b. 实现第一关游戏原型c. Kinect平台搭建d. 完成帮助界面、设置界面2014年3月23日2014年3月29日第5个教学周(7日)4a. 基本实现第一关游戏b. 帮助界面、设置界面完善c. 游戏剧情修改、完善2014年3月30日2014年4月5日第6个教学周(7日)5a. 细化完善第一关游戏b. 实现界面动画设计c. 实现Kinect键盘识别、控制d. 定夺第二关游戏内容2014年4月6日2014年4月12日第7个教学周(7日)6a. 测试第一关成果且加以修改b. 实现第二关游戏原型c. 实现Kinect鼠标识别、控制2014年4月13日2014年4月19日第8个教学周(7日)7a. 基本实现第二关游戏b. 实现Kinect鼠标识别、控制2014年4月20日2014年2月26日第9个教学周(7日)8a. 细化完善第二关游戏b. 添加界面之间的提示动画c. 定夺第三、四关游戏内容d. 项目设计报告撰写2014年4月27日2014年5月3日第10个教学周(7日)9a. 测试第一、二关游戏b. 基本实现第三关游戏c. 基本实现第四关游戏d. 实现Kinect与游戏的结合e. 项目设计报告修改完善f. 答辩PPT制作2014年5月4日2014年5月10日第11个教学周(7日)10a.游戏整体测试b.项目答辩准备2014年5月11日2014年5月17日第12个教学周(7日)11a.项目答辩b.游戏宣传推广2014年5月18日2014年5月24日第13个教学周(7日)12a.项目答辩准备(预期)b.游戏宣传推广(预期)2014年5月25日2014年5月31日第14个教学周(7日)13本项目最终完成2014年6月1日2014年6月7日第15个教学周(7日)1.4项目成员分工成员主要工作任务工作量白XKinect平台搭建,Kinect体感部分设计;美工设计(主界面背景制作、世界背景制作、按钮设计等);25%郭X剧情编写,文档、ppt制作;美工设计(跳转界面人物制作,游戏元素图案制作、提示部件制作等);Qt平台搭建,起始界面制作(主界面与其他界面跳转);25%陈XX游戏制作与完善(第一关、第二关);背景音乐及按键音乐添加;Qt平台搭建、界面完善(多个界面跳转的完善与修改);25%代X游戏制作与完善(第三关);游戏界面动画设计与制作(游戏界面的人物移动);Qt部分与Kinect部分整合;25%2 总体设计2.1 逻辑设计本项目开发的游戏具有极其丰富的情景吸引力,该游戏是以许多人都知晓的飞屋环游记中的小胖罗素为闯关主角,游戏情景设定了他回到地球之后为了帮助卡尔爷爷找到失忆的艾丽奶奶,而走上了爱的记忆的闯关之旅。同时,世界版图就像蒙上了一层灰尘变成了灰色的,他以环游世界的方式遍历各个国家,且每个国家都有此国家特色的卡通人物接待小胖,为小胖进行游戏提示。在闯过每一关之后,世界版图上这个国家的颜色就会由灰暗转为彩色。当三关完成后,艾丽奶奶的记忆也会恢复。游戏层次上主要分为三个部分“游戏帮助”、“开始游戏”和“游戏设置”,而游戏主体部分在结构上一共分为三关,第一关记忆纸牌,第二关扫小三,第三关跳跳跳。三关以线性方式紧扣,只有完成前一关才能进行下一关,而每完成一关之后在以世界地图为背景的衔接界面会有卡通人物进行游戏规则等的提示。2.2 系统框架设计本项目开发的游戏主要分由两大块整合而成,Kinect体感控制技术以及Qt creator平台上开发的游戏主体部分,两部分技术分别完成,最后整合为一体。图1是本项目的系统框架图。图1 系统框架图主要有三个模块“游戏帮助”、“开始游戏”和“游戏设置”。“游戏帮助”部分是为玩家介绍本游戏的剧情,阐明本款游戏的主要涉及思路,方便玩家清楚本款游戏的游戏整体规则。“开始游戏”部分是游戏的主体部分,也是本款游戏的关键部分,主要分为三个关卡,分别为:记忆纸牌、扫小三、跳跳跳。图2是本项目的游戏部分的框架图。图2 系统主体部分框架图2.3系统模块设计2.3.1 界面模块为了更清晰地描述第一关游戏的设计,图3、4是显示了模型的静态结构。图3 界面模块homepage类的类图图4 界面模块homepage类的类图2.3.2 游戏模块为了更清晰地描述我们的游戏部分的设计,我们展示图5以通过描述各对象之间发送消息的时间顺序显示多个对象之间的动态协作。图5 游戏部分时序图2.3.2.1 第一关记忆纸牌为了更清晰地描述第一关游戏的设计,图6是显示了模型的静态结构。图6 第一关游戏的类图第一关游戏中,ZhipaiGame为游戏类,类的属性及方法描述如下:属性:numCols表示游戏牌的列数,numRows表示游戏牌的行数。_ncount表示翻开2张牌的下标和(Ncount等于17时,表示两张牌“相配”,消去)。_suctimes表示已消去的牌的对数。_times表示可以尝试翻牌的总次数(每翻2张牌为1次)。_shuliang表示当前已被翻开的牌的张数(为2时,做一次“相配”或者不“相配”的判断)。Playing表示游戏是否正在进行。Won表示游戏的输赢。Nextclicked表示游戏胜利时出现跳 转到下一关的图片是否被点击。方法:Flip(int row,int col)将第row行,第col列的牌翻开。unFilp()将翻开的牌反扣,deletingzp()用来删除翻开的牌。setBoard()初始化牌的属性。Reset()重新开始游戏。Nextclicked()发射信号。Fail()设置游戏失败,haswon()设置游戏胜利。bengMusic()当两张牌相配消去时,播放消去音效。onBoard设置牌的边界。setPlaying设置游戏的playing属性,setWon设置游戏的won属性。SetNextclicked()设置nextclicked的布尔值。第一关游戏中,ZhipaiData为纸牌类,累的属性及方法描如下 :属性:hint表示纸牌的下标,_flipped表示纸牌是否已被翻._willdelete表示纸牌是否即将被删去。方法:setHint()设置纸牌的下标。Unfilp()将纸牌的_flipped值设为假,flip()将纸牌的_flipped值设为真。Deleting()将纸牌的_willdelete属性设置为真。Undeleting()将纸牌的_willdelete属性设置为假。为了阐明各个用例实现的工作流程,图7是第一关游戏的活动图。图7 第一关游戏活动图2.3.2.2 第二关扫小三为了更清晰地描述第一关游戏的设计,图8是显示了模型的静态结构。图8 第二关游戏的类图第二关游戏中,Xiaosanhunt为游戏类,类的属性及方法如下述所示:属性:numCols表示游戏砖的列数,numRows表示游戏砖的行数。Remaining表示除了藏有小三的砖剩下的砖的个数。nXiaosans表示小三的个数。nFlags表示通过判断已经标记出的小三的个数。Playing为真时表示游戏正在进行,为假时表示游戏结束。Won标记游戏的输赢。Nextclicked为真时,表示游戏胜利时出现的跳转到下一关的图片已经被点击。方法:Flip(int row,int col)用来翻开第row行,第col列的砖。Flag用来标记第row行,第col列的砖后是小三。setBoard()用来初始化砖的属性信息。Reset()方法重新开始新一轮的游戏。failMusic()当失败时播放游戏失败的提示音。Nextclicked()发射信号。OnBoard(int r,int col)标记边界。getHint获取当前砖的下标。setPlaying()设置游戏进行或结束,setNextclicked()设置nextclicked的布尔值。第二关游戏中,TileData为砖的类,类的属性及方法如下述所示:属性:hasFlag表示砖是否被标记为藏有小三。hasXiaosan表示砖下是否藏有小三。Hint为砖的下标。Flipped表示砖是否已被翻过。方法:setHasFlag()用来设置hasFlag,setHasXiaosan()用来设置hasXiaosan,setHint()用来设置hint。Flip()设置当前砖的flipped的值为真,unflip()设置当前砖的flipped值为假。为了阐明各个用例实现的工作流程,图9是第一关游戏的活动图。图9 第二关游戏的活动图2.3.2.3 第三关跳跳跳为了更清晰地描述第三关游戏的设计,图10是显示了模型的静态结构。图10 第三关游戏类图为了阐明各个用例实现的工作流程,图11是第三关游戏的活动图。图11 第三关游戏的活动图2.3.3 Kinect模块为了更清晰地描述第一关游戏的设计,图12、图13是显示了模型的静态结构。图12 Kinect模块键盘部分的类图图13 Kinect模块鼠标部分的类图3 界面设计3.1 界面关系主界面(Homepage)之下,主要继承有三个直接子界面“游戏帮助”界面(help),“游戏设置”界面(setting)以及“开始游戏”界面(worldmap)。 在主界面选择“Help”按钮,进入“游戏帮助”子界面;在主界面选择“Setting”按钮,进入“游戏设置”子界面;在主界面选择“Start trip”按钮,进入“开始游戏”子界面。二级界面“开始游戏”界面主要是游戏操作界面,其中以世界地图为背景的界面为关卡选择图;另外,二级界面“开始游戏”界面还包括了每一关游戏的用户界面。 图14是本项目的主要界面关系图。图14 界面关系图3.2 主界面设计主界面(Homepage)的背景设计由本组成员手绘而成,其上布置有三个按钮“Help”、“Setting”和“Start trip”。界面名称界面组件对应功能主界面按钮一:Help响应玩家点击,进入“游戏帮助”界面按钮二:Setting响应玩家点击,进入“游戏设置”界面按钮三:Start trip相应玩家点击,进入“开始游戏”界面图15是本游戏的主界面。图15 主界面3.3 子界面设计3.3.1 “游戏帮助”界面“游戏帮助”界面主要介绍本游戏的基本剧情和基本规则。该界面上有按钮“return”用以回到主界面,实现主界面与子界面的联系。界面名称界面组件对应功能子界面“游戏帮助”Help_ui按钮一:return响应玩家点击,进入主界面。图16是本游戏子界面“游戏帮助”界面。图16 子界面“游戏帮助”3.2.2“开始游戏”界面“开始游戏”界面具有丰富的剧情,衔接界面以世界地图作为背景,每一关卡之前都有卡通人物以对话的形式提示游戏规则。界面名称界面组件对应功能衔接界面/选关界面Worldmap_ui按钮一:button1点击世界地图上的国家,按钮将会产生三个颜色渐变,之后进入下一界面衔接界面/选关界面Worldmap_ui按钮一:button2进入该界面之后,将会产生飞机穿越地图的效果完成关卡进入一下关之后,将会在地图上产生足迹的效果图17是衔接界面的部分界面截图。图17 衔接界面“开始游戏”之下的界面包括了玩家进行游戏操作的界面。图18是游戏操作界面。图18 游戏过程图19是游戏失败的效果图。图19 游戏失败效果图3.3.3 “游戏设置”界面“游戏设置”界面主要为玩家提供选择进行音效、音量等效果的更改。该界面上有按钮“return”用以回到主界面,实现主界面与子界面的联系。界面名称界面组件对应功能子界面“游戏设置”setting_ui按钮一:return响应玩家点击,进入主界面。图20是本游戏子界面“游戏帮助”界面。图20 设置界面图3.4 音乐效果设计为了增加游戏过程的娱乐性,我们在游戏过程中添加了背景音乐以及点击按钮的配音。a. 背景音乐1.游戏主界面背景音乐 2.世界地图界面(选关)背景音乐 3.游戏界面背景音乐b. 按键音效1.主界面跳转按钮音效2.世界地图界面关卡选择点击音效3.游戏界面按钮音效c. 其他音效1.游戏胜利提示音效2.游戏失败提示音效4 算法设计4.1 技术难点a. 之前没有接触过Qt creator,而此次需要迅速掌握一个平台开发技术;b. Kinect不同手势的捕捉;c. UI界面的绘制(部分采用手绘)。4.2 主要算法设计4.2.1 牌和砖的实现用QT中QML的flipable元素实现,flipable的front与back属性分别用以加载牌或者砖的正(front.png)反(back.png)两面的图片。transform: Rotation用来设置翻转轴,Particles元素实现爆炸效果。4.2.2 牌和砖的布局实现由于QML中的Repeater可以向布局中填充QML元素,因此在”纸牌游戏”中定义4*4的Grid布局,然后使用Repeater元素填充flipable元素实现的牌.”躲小三游戏”中的9*9的Grid布局,然后使用Repeater填充flipable元素实现的砖,实现牌和砖在游戏界面的布局中的排布。4.2.3第一关记忆纸牌4.2.3.1纸牌的下标赋值在纸牌类(ZhipaiData)中创建1个int型成员变量hint(标志牌的下标),并初始化赋值0。用1-8分别标志第一对情侣到第八对情侣的男方,9-16分别标志第八对情侣到第一对情侣的女方(例如:下标hint=1和下标hint=16为第一对情侣,下标hint=2和下标hint=15为第二对情侣.依次类推,因此每对情侣的下标和都为17)。While循环直至为所有牌标志完下标,每次产生一个行的随机数(row),和一个列的随机数(col)。然后创建一个纸牌对象t=zhipai(row,col),并标记下标t-sethint(num)(num为牌的总数,每当为一张牌标记下标时,num减1)。实现标记16张牌下标。4.2.3.2牌根据下标关联对应图片在QML中通过设置Image元素的透明度opacity来使不同的牌显示不同的正面图(例如zhipai.qml中透明度设置为opacity:IsMan1的Image元素关联了资源图片man1.png,若zhipai(1,1),第一行第一列的纸牌的布尔变量IsMan1为真,就会加载覆盖该纸牌原来的正面图片front.png,从而显示第一对情侣中的男性的图片)通过上述过程为16张纸牌赋值相应的图片信息。下标与图片的关联图:Hint=1Hint=2Hint=3Hint=4Hint=5Hint=6Hint=7Hint=8Man1.pngMan2.pngMan3.pngMan4.pngMan5.pngMan6.pngMan7.pngMan8.pngHint=9Hint=10Hint=11Hint=12Hint=13Hint=14Hint=15Hint=16Women1.pngWomen2.pngWomen3.pngWomen4.pngWomen5.pngWomen6.pngWomen7.pngWomen8.png一种可能的排布情况:Hint=3Hint=15Hint=5Hint=9Hint=6Hint=11Hint=13Hint=1Hint=4Hint=10Hint=8Hint=2Hint=7Hint=14Hint=12Hint=164.2.3.3游戏过程每当翻开一张牌时,一个int型变量shuliang会加1,当该变量增加到2时(即翻开2张图片时)会做一次判断,若翻到的两张图片相配(t1-hint=1和t2-hint=16或其它7种情况)则执行串行动画,先播放爆炸效果(particles.burst(200)),然后消去这两张图(PropertyChanges target: zhipai; opacity: 0.3 )(通过修改zhipai的透明度为0.3将可见度调低实现消去)。4.2.4第二关扫小三4.2.4.1 12个小三随机分布砖(Tile)位置的初始化与纸牌游戏类似,在砖的类中创建布尔变量hasXiaosan和hasFlag。8个布尔变量has1Xiaosan,has2Xiaosan,.,has3Xiaosan.(值为true时分别表示该砖的周围8块砖下藏着1,2,.,8个小三),和int变量hint(表示某砖周围8块砖下藏着的小三个数,初始值为-1).初始化小三个数的Int型变量为12(即有12个小三)while循环12次,每次随机产生行和列的数(row,col),并创建砖Tile(row,col)(表示布局第row行,第col列的砖),为其布尔变量hasXiaosan赋值为true。4.2.4.2每块没藏有小三的砖周围小三个数的赋值(下标表示周围小三的个数)遍历没有小三的69块砖(首先为hint变量赋值为0),在每块砖遍历它为中心周围的砖。若周围某块砖的hasXiaosan变量为true,则hint加1。来计算每块砖周围的小三个数。T-sethint(hint)标志其下标。实现对没藏有小三的砖的下标赋值。4.2.4.3图片赋值同样,根据纸牌游戏中的方法在qml中以Image元素关联图片文件,透明度分别设为:opacity: model.hint=1,opacity:model.hint=2,.,opacity: model.hint=8,opacity: hasXiaosan,关联砖和图片。下标和图片的关联图:Hint=1Hint=2Hint=3Hint=4Has1Xiaosan.pngHas2Xiaosan.pngHas3Xiaosan.pngHas4Xiaosan.pngHint=5Hint=6Hint=7Hint=8Has5Xiaosan.pngHas6Xiaosan.pngHas7Xiaosan.pngHas8Xiaosan.png一种可能的排布情况:hasXiaosanHint=2hasXiaosanHint=2Hint=1Hint=1Hint=1hasXiaosanHint=1Hint=2Hint=1Hint=3hasXiaosanHint=2Hint=1Hint=1Hint=1Hint=1Hint=2Hint=3hasXiaosanHint=2Hint=1Hint=1Hint=1Hint=1hasXiaosanHint=2hasXiaosanHint=2Hint=1Hint=1hasXiaosanHint=1Hint=2Hint=2Hint=2Hint=1Hint=1Hint=1Hint=1Hint=1Hint=1hasXiaosanHint=1Hint=1Hint=1Hint=1Hint=1Hint=1Hint=1Hint=1Hint=2hasXiaosanHint=2Hint=1Hint=1Hint=1hasXiaosanHint=2Hint=1Hint=2hasXiaosanHint=1Hint=1Hint=1Hint=1Hint=1Hint=1Hint=14.3.4.4游戏过程左键点击一块砖时,首先判断其布尔变量hasFlag是否为真,为真则说明该砖不可翻。当翻开一个砖块,翻开该转并判断该砖的布尔变量hasXiaosan是否为真,若为真则遍历所有砖,判断每一块砖的布尔变量hasXiaosan和hasFlag,hasXiaosan为真且hasFlag为假的未被翻过得砖将会依次翻开, 同时播放“爆炸”效果的动画。游戏结束。若被翻开的砖的布尔变量hasXiaosan为假,则翻开该砖,同时判断该砖的hint变量的值是否为0,若为0(周围8块砖下无小三),则将其周围8块砖也翻开,对于每块翻开的砖遍历该砖周围的8块砖并判断它们的布尔变量hasFlag是否为真,若为真则flags加1,遍历完之后与其Hint变量的值对比,若相等,则以这周围的8块砖为中心,对它们各自周围的8块砖执行上述相同的判断。直到所有藏有小三的砖都被找到,无小三的砖被翻开时游戏胜利。4.3.5 第三关 跳跳跳1.存在图片的移动:Pos_Change函数,设置一个定时器,每40ms使所有isHide为false的图片y坐标增加10,当坐标大于屏幕坐标时,调用hide隐藏起来; 2.图片的产生:Rand_Picture函数,设置一个定时器,每500ms随机产生一张图片,调用rand来随机产生一个数字,不同的数字对应不同的方向键; 3.键盘事件的获取:KeyPressEvent函数,通过重载QT的KeyPressEvent函数来实现键盘事件的获取;键盘按键与第一个图片对应的确定:在MyButton中设置一个first的bool变量,初始值为false,当first为true的图片的纵坐标大于屏幕纵坐标或者当玩家按键使first为true的图片消失时,将该图片的first设置为false,再将下一张图片的first设置为true,在KeyPressEvent中首先遍历获取first为true的图片的方向,然后再与用户键入值做匹配,如果成功,则图片消失,如果不成功,则donothing。4.3.6 关于Kinect的相关算法4.3.6.1 Kinect开发技术要点概括 声明:本项目通过模拟键盘而不是直接在QT Creator中添加脚本以降低难度本游戏主要利用kinect摄像头的骨骼追踪功能,通过对骨骼坐标点位置包括深度的具体计算分析,规定相关的触发事件。图21 Kinect坐标轴4.3.6.2 键盘模拟-上下左右根据人体动作特点设定阈值,对规定的动作进行识别操作,当用户右手的x值右肩的x值达到指定阈值,则触发键盘右键,即达到敲击右建的效果,以此类推,规定特定的动作点,以达到控制键盘的效果4.3.6.3鼠标模拟-下压按钮下压按钮试图将传统的GUI界面上的按钮移植到Kinect上去。为了代替鼠标点击,下压按钮使用一种将手向前推的手势来表示按下这一动作。这种手势,手掌张开向前,在形式上有点像动态鼠标。下压按钮的核心算法就是探测

温馨提示

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

评论

0/150

提交评论