计算机应用实践报告.doc

上传人:龙*** 文档编号:1094607 上传时间:2018-12-05 格式:DOC 页数:33 大小:8MB
下载 相关 举报
计算机应用实践报告.doc_第1页
第1页 / 共33页
计算机应用实践报告.doc_第2页
第2页 / 共33页
计算机应用实践报告.doc_第3页
第3页 / 共33页
计算机应用实践报告.doc_第4页
第4页 / 共33页
计算机应用实践报告.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、计算机应用实践报告机房名称时 间学 院专业班级姓 名学 号指导教师成 绩2015年 7 月说 明一、 计算机应用实践是本科教学重要的实践教学环节,是提高学生应用计算机能力的重要措施。所有参加计算机应用实践教学活动的学生都必须撰写实践报告二、 计算机应用实践报告的质量反映了计算机应用实践的教学质量,它是评定计算机应用实践成绩的主要依据之一。不交实践报告者不得参加实习成绩评定。三、 指导教师必须对学生的实践报告写出评语并在相应位置给出成绩并签字,否则本实践报告无效。四、 实践报告要求条理清晰,内容详尽,数据准确,字数不少于 5000 字。五、 计算机应用实践活动结束后请将本报告双面打印,上交学院存

2、档保存。3计算机应用实践报告一、 问题的提出本人有非常多的 RPG 游戏经验,在做完海底世界之后,我曾浏览了一遍经典范例的十个游戏,但是都勾不起我的兴趣,范例中的游戏虽然经典,但是玩法过于单一,实在勾不起我这种游戏老手的兴趣,所以我决定一定要自己设计一个脱俗于范例的游戏出来。我从小就热爱各种各样的游戏,因此我有庞大的游戏经验,也因此我有相比于其他同学更多的关于游戏的创意与想法,RPG 角色扮演游戏可谓在游戏界上的一大板块,一款经典的游戏必逃不出“RPG” 、 “MOBA”、 “竞速” 、 “FPS”这几类而对于初学者的我来说,想做一款相对经典的游戏,考虑到 MOBA 和竞速类游戏在 Funco

3、de中无法实现,FPS 类游戏做不出竞技的感觉,于是我选择了用 Funcode 做一个小型 RPG 游戏,抛开竞技性,用剧情和视觉冲击来使其尽量清新脱俗,让别人眼前一亮,又因为我能熟练应用 PS,所以我能从互联网上找大量的图片资源,进行加工导入 Funcode,又因为 RPG 游戏需要大量的对话来展现剧情,所以我选择通过在 PS 里加工最后通过图片的方式导入来弥补 Funcode 那不尽人意的文本功能。小学期初,我一直在玩 4399 上的魔塔,于是我一开始便想做一个类似于魔塔的 RPG 游戏,但是制作魔塔需要大量的时间基础与数据容量,所以我以魔塔为原型做了一个偏向于一般 RPG 游戏的小型原创

4、 RPG 游戏,在整个游戏中,我并没有去设计很难的程序代码技巧,而是把精力放在了美观上面,因为我深知正是因为美观和剧情,RPG 才能吸引玩家的眼球。二、 游戏的整体设计及框架结构1. 游戏功能描述本游戏为 RPG 角色扮演游戏,大概剧情为主角在睡梦中醒过来之后发现自己身于一个玄幻的地方,实际上主角作为被选召之人被召唤至魔幻之塔拯救封印数百年的魔王,在与仙女对话后得知自己的任务后,主角开始了新的冒险大概游戏剧情攻略如下:1. 主角醒来发现自己身在陌生的地方2. 与仙女对话后得知自己的任务进入第二层3. 被仙女告知要按强弱顺序打怪4. 寻问公主三护卫得知假的强弱顺序5. 经过逻辑分析得知正确的打怪

5、顺序6. 打完怪进入第三层7. 与 BOSS 公主对话开始挑战 BOSS8. 挑战 BOSS9. 挑战胜利之后退出 BOSS 场景并与魔王对话10. 对话完之后达到 Happy End ,游戏结束42. 游戏流程图NONOYESYESEnter 开始游戏进入魔幻之塔一层与仙女对话进入二层进入第二层后被仙女告知怪物有强弱顺序与三个公主护卫对话寻问怪物强弱顺序是否确认强弱顺序?打怪打怪顺序是否正确?路障消失进入第三层与 BOSS 公主对话5NOYES三、 详细设计事先声明:由于 RPG游戏不同于经典范例中有固定规律固定玩法的横向游戏,RPG 游戏是纵向游戏,简单来说就是游戏元素多,相似甚至重复的代

6、码段多,代码更多的不是实现某种功能,而是加入某种元素(怪物,文本,NPC 等) ,所以考虑到代码并不是所有都有必要列举出来,所以此部分只会列举出一部分有意义的,实现某种功能的代码。 实验一 控制人物走动 控制面向【实验思路】用人物正面动画作为人物主体担任运动和碰撞,将其他三面绑定到正面上,并在按下 W 时显示背面隐藏其他三面,A,S,D 以此类推,正面的运动与海底世界类似,当键盘上的 W(表示向上方向)A(表示向左方向)S(表示向下方向)D(表示向右方向)按键中的一个按下后,给人物正面一个初始速度并按该按键代表的方向移动,当按键释放后将人物正面的速度设置为 0,使其停止。不需要斜向走动。【实验

7、指导】1.进入 LessonX.h中添加如下成员变量:float m_fSpeedLeft; / 4 个方向的速度float m_fSpeedRight ;float m_fSpeedTop;float m_fSpeedBottom;NPC* m_pMyzhengmian;NPC* m_pMybeimian;挑战 BOSS是否挑战成功?退出 BOSS 场景与魔王对话Happy End 游戏结束界面游戏结束6NPC* m_pMyzuomian;NPC* m_pMyyoumian;2.进入 LessonX.cpp的 CGameMain构造函数中添加如下代码:m_pMyzhengmian = new

8、 NPC(“zhengmian“);m_pMybeimian = new NPC(“beimian“);m_pMyzuomian = new NPC(“zuomian“);m_pMyyoumian = new NPC(“youmian“);m_fSpeedBottom= 0.f;m_fSpeedLeft= 0.f;m_fSpeedRight= 0.f;m_fSpeedTop= 0.f;2.进入 LessonX.cpp的 GameInit()初始化函数中添加如下代码:m_pMybeimian-SetSpriteVisible(1); /可见性初始化m_pMyzhengmian-SetSprite

9、Visible(0);m_pMyzuomian-SetSpriteVisible(0);m_pMyyoumian-SetSpriteVisible(0);m_pMyzhengmian-SetSpritePosition(0, 19); /位置初始化m_pMybeimian-SetSpritePosition(0, 19);m_pMyzuomian-SetSpritePosition(0, 19);m_pMyyoumian-SetSpritePosition(0, 19);3.将左,右,背三面绑定到正面上,不继承正面自身的属性,使正面隐藏时其他三面不会跟着隐藏,进入 LessonX.cpp的 G

10、ameInit()初始化函数中添加如下代码:m_pMybeimian-SpriteMountToSprite( “zhengmian“, 0, 0 );m_pMybeimian-SetSpriteMountInheritAttributes( 0 );m_pMyzuomian-SpriteMountToSprite( “zhengmian“, 0, 0 );m_pMyzuomian-SetSpriteMountInheritAttributes( 0 );m_pMyyoumian-SpriteMountToSprite( “zhengmian“, 0, 0 );m_pMyyoumian-Set

11、SpriteMountInheritAttributes( 0 );4.控制正面的运动,进入 LessonX.cpp的 OnKeyDown()函数中添加如下代码:case KEY_W:m_pMybeimian-SetSpriteVisible(1);m_pMyzuomian-SetSpriteVisible(0);m_pMyzhengmian-SetSpriteVisible(0);m_pMyyoumian-SetSpriteVisible(0);m_pMyzhengmian-SetDir(0);fSpeedY= -10.f; /向上的时候 Y 方向速度为负的break;case KEY_A:

12、m_pMyzuomian-SetSpriteVisible(1);m_pMybeimian-SetSpriteVisible(0);m_pMyzhengmian-SetSpriteVisible(0);m_pMyyoumian-SetSpriteVisible(0);m_pMyzhengmian-SetDir(3);fSpeedX= -15.f; /向左的时候 X 方向的速度为负值break;case KEY_S:7m_pMyzhengmian-SetSpriteVisible(1);m_pMyzuomian-SetSpriteVisible(0);m_pMybeimian-SetSprite

13、Visible(0);m_pMyyoumian-SetSpriteVisible(0);m_pMyzhengmian-SetDir(2);fSpeedY= 10.f; /向下的时候 Y 方向的速度为正值break;case KEY_D:m_pMyyoumian-SetSpriteVisible(1);m_pMyzuomian-SetSpriteVisible(0);m_pMybeimian-SetSpriteVisible(0);m_pMyzhengmian-SetSpriteVisible(0);m_pMyzhengmian-SetDir(1);fSpeedX= 15.f;/向右的时候 X

14、方向的速度为正值break;if(FigureAndJinglingColSign=0m_pMyzuomian-SetSpriteLinearVelocity(fSpeedX, fSpeedY);m_pMybeimian-SetSpriteLinearVelocity(fSpeedX, fSpeedY);m_pMyyoumian-SetSpriteLinearVelocity(fSpeedX, fSpeedY);4.控制正面的运动的停止,进入 LessonX.cpp的 OnKeyUp()函数中添加如下代码,其中 if条件分支实现碰撞时主角不能移动:float fSpeedX, fSpeedY;

15、switch(iKey)case KEY_W:case KEY_A:case KEY_S:case KEY_D:fSpeedX = 0.f; fSpeedY = 0.f;if(FigureColSign=0) m_pMyzhengmian-SetSpriteLinearVelocity(fSpeedX, fSpeedY);m_pMyzuomian-SetSpriteLinearVelocity(fSpeedX, fSpeedY);m_pMybeimian-SetSpriteLinearVelocity(fSpeedX, fSpeedY);m_pMyyoumian-SetSpriteLinear

16、Velocity(fSpeedX, fSpeedY);实验二 空格载入下一句话【实验思路】在 OnKeyDown()中定义一个静态变量 CountSpace 来记录在过文本时按下的空格次数,再建立一8个指针数组,将文本精灵储存在指针数组中,使可以利用静态变量 CountSpace 来作为数组下标来控制第几个文本和第几个文本消失,整体用 for 循环构建起来。【实验指导】1. 在 Lesson.h 中添加所有文本精灵的变量声明,在 Lesson.cpp 的构造函数中添加其定义:CSprite* m_pMytaxt1;CSprite* m_pMytaxt2;CSprite* m_pMytaxt3;

17、CSprite* m_pMytaxt4;CSprite* m_pMytaxt5;CSprite* m_pMytaxt6;CSprite* m_pMytaxt7;CSprite* m_pMytaxt8;CSprite* m_pMytaxt9;CSprite* m_pMytaxt10;CSprite* m_pMytaxt11;CSprite* m_pMytaxt12;CSprite* m_pMytaxt13;CSprite* m_pMytaxt14;CSprite* m_pMytaxt15;CSprite* m_pMytaxt16;m_pMytaxt0 = new CSprite(“text0“)

18、; /大段对话文本m_pMytaxt1 = new CSprite(“text1“); m_pMytaxt2 = new CSprite(“text2“); m_pMytaxt3 = new CSprite(“text3“); m_pMytaxt4 = new CSprite(“text4“);m_pMytaxt5 = new CSprite(“text5“);m_pMytaxt6 = new CSprite(“text6“);m_pMytaxt7 = new CSprite(“text7“);m_pMytaxt8 = new CSprite(“text8“);m_pMytaxt9 = new

19、 CSprite(“text9“);m_pMytaxt10 = new CSprite(“text10“);m_pMytaxt11 = new CSprite(“text11“);m_pMytaxt12 = new CSprite(“text12“);m_pMytaxt13 = new CSprite(“text13“);m_pMytaxt14 = new CSprite(“text14“);m_pMytaxt15 = new CSprite(“text15“);m_pMytaxt16 = new CSprite(“text16“);2. 在 Lesson.h 中添加存储文本精灵的指针数组的声

20、明,并在 Lesson.cpp 中添加定义CSprite* m_pMytaxt20; /Lesson.h 中m_pMytaxt0=m_pMytaxt0; /Lesson.cpp 中m_pMytaxt1=m_pMytaxt1;m_pMytaxt2=m_pMytaxt2;m_pMytaxt3=m_pMytaxt3;m_pMytaxt4=m_pMytaxt4;m_pMytaxt5=m_pMytaxt5;m_pMytaxt6=m_pMytaxt6;9m_pMytaxt7=m_pMytaxt7;m_pMytaxt8=m_pMytaxt8;m_pMytaxt9=m_pMytaxt9;m_pMytaxt10

21、=m_pMytaxt10;m_pMytaxt11=m_pMytaxt11;m_pMytaxt12=m_pMytaxt12;m_pMytaxt13=m_pMytaxt13;m_pMytaxt14=m_pMytaxt14;m_pMytaxt15=m_pMytaxt15;m_pMytaxt16=m_pMytaxt16;3. 在 GameInit()初始化函数中设置文本初始可见度:m_pMytaxt0-SetSpriteVisible(1);m_pMytaxt1-SetSpriteVisible(1);m_pMytaxt2-SetSpriteVisible(0);m_pMytaxt3-SetSprit

22、eVisible(0);m_pMytaxt4-SetSpriteVisible(0);m_pMytaxt5-SetSpriteVisible(0);m_pMytaxt6-SetSpriteVisible(0);m_pMytaxt7-SetSpriteVisible(0);m_pMytaxt8-SetSpriteVisible(0);m_pMytaxt9-SetSpriteVisible(0);m_pMytaxt10-SetSpriteVisible(0);m_pMytaxt11-SetSpriteVisible(0);m_pMytaxt12-SetSpriteVisible(0);m_pMyt

23、axt13-SetSpriteVisible(0);m_pMytaxt14-SetSpriteVisible(0);m_pMytaxt15-SetSpriteVisible(0);m_pMytaxt16-SetSpriteVisible(0);4. 在 OnKeyDown()中控制空格过文本添加如下代码,通过 CountSpace 空格计数器来作为指针数组的下标来确定文本的显示和消失,且只有在特定条件下 CountSpace 才会自增,所以胡乱按空格不会影响到计数器的功能(以与仙女对话部分为例):case KEY_SPACE:for(static int CountSpace=1 ; ; )

24、/CountSpace 为空格计数器if(CountSpace=1m_pMytaxtCountSpace+1-SetSpriteVisible(1);CountSpace+;else if(CountSpace=3) /第一段文本结束条件分支m_pMyduihuakuang-SetSpriteVisible(0);m_pMytaxt0-SetSpriteVisible(0);m_pMytaxt3-SetSpriteVisible(0);m_pMyfigureimage-SetSpriteVisible(0);10CountSpace+; /第一段文本结束时,CountSpace=4 (由于此处

25、代码太多,因此省略大段相似代码)else;break;实验三 控制主角与 NPC 碰撞时触发事件【实验思路】在 OnSpriteColSprite()中通过使用 strcmp 函数确定施撞者和受撞者,并在相应的代码段写出相应的触发事件,并定义一个控制变量 FigureColSign(1:发生碰撞;0:未发生碰撞)用于记录主角是否发生碰撞,以此来实现含碰撞在内的多个条件同时成立时才会触发的事件编写,并通过此变量来实现碰撞展开对话时主角不能移动(速度为零)的效果。另外事件触发之后控制变量要清零。【实验指导】1. 在 Lesson.h 中声明碰撞会用到的变量和控制变量,属性均为私有。 (以主角与仙女

26、碰撞为例)int FigureColSign; / 主角碰撞标记,0:未发生碰撞;1:发生碰撞int FigureAndJinglingColSign; / 主角与女精灵碰撞标记,0:未发生碰撞;1 :发生碰撞(某些精灵的变量省略)2. 在 Lesson.cpp 中的 OnSpriteColSprite()中添加如下代码,实现主角与仙女碰撞触发对话。其中碰撞双方对象的确定由 strcmp 和逻辑与FigureColSign=1;m_pMyduihuakuang-SetSpriteVisible(1);m_pMytaxt4-SetSpriteVisible(1);m_pMytaxt0-SetSp

27、riteVisible(1);m_pMyfigureimage-SetSpriteVisible(1);FigureColSign=0;3. 主角与仙女触发的对话时需要用到 FigureColSign 是否为 1 作为判断 CountSpace 是否自增的判断条件,在 OnKeyDown 中部分代码如下 :else if(FigureAndJinglingColSign=1m_pMytaxtCountSpace+1-SetSpriteVisible(1);if(CountSpace=4) m_pMyfigureimage-SetSpriteVisible(0);m_pMyjinglingimage-SetSpriteVisible(1);CountSpace+;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。