《Anonia手机游戏项目创业软件详细设计说明书实例.docx》由会员分享,可在线阅读,更多相关《Anonia手机游戏项目创业软件详细设计说明书实例.docx(97页珍藏版)》请在三一办公上搜索。
1、Anonia游戏详细设计说明书2022年12月开发团队:Chem Block学校:大连理工大学主要开发人:鄢世阳目录1引言21.1编写目的21.2项目背景21.3定义31.4参考资料42总体设计42.1游戏剧情概述42.2软件结构43程序描述53.1界面模块53.2角色创建模块303.3交易模块393.4NPC模块403.5敌人模块593.6保存模块893.7音乐系统模块913.8测试要点933.8.1测试范围933.8.2测试方法932022/12/23Anonia文档名称:Anonia游戏详细设计说明书项目名称:Anonia艾诺尼亚历险记项目负责人:鄢世阳编写鄢世阳2015年8月30日校对
2、所有小组成员2015年9月1日审核所有小组成员2015年9月2日批准刘苑星2015年9月3日开发单位:大连理工大学Chem Block团队组员:鄢世阳何达威刘苑星刘佳鑫李旭1 引言1.1 编写目的Anonia是一款开放式动作RPG游戏,它融合东西方奇幻世界背景,突破单一世界设定。本游戏以清新亮丽的唯美风格为游戏画面,以国家之间的冲突为游戏基调,强调创造一个让玩家互动生活的虚拟世界,鼓励玩家之间的交流、对抗,实现以玩家为游戏真正创造者的目的。Anonia游戏的设计初衷在于为青少年高压快节奏的生活提供一个放松的平台,这个阶段的主要任务是在概要Anonia游戏设计书基础上,对概要设计中产生的功能模块
3、进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,为编写源代码提供必要的说明。概要设计解决了Anonia游戏总体结构设计的问题,包括整个游戏的结构、模块划分、模块功能和模块间的联系等。详细设计则要解决如何实现各个模块的内部功能,即模块设计。具体的说,模块设计就是要为已经设定的游戏模块的各子系统设计详细的算法,对实现细节作精确的描述。将模块划分为界面、魔法、交易、战争等多个模块用算法和数据结构建立模块间的联系,保证了游戏的整体感。1.2 项目背景Anonia这款游戏是卡通渲染的方式展示一个爱恨交织的虚拟世界,他可以推进国内动漫游戏产业的发展。国际动漫目前已形成了成熟的产业链,它首先通
4、过卖动画的票房和电视播出收入作为第一块收入,图书和音像收入为第二块,除了图书和音像制品以外,还有大量的衍生产品,主要体现在玩具、直销、商品和主题公园几大块。动漫作为一个新兴的文化产业,从诞生之初就和高科技联系在一起,是高新技术发展的产物。当今欧美、日、韩以强大的品牌力量,高水准的制作技术和健全的市场运作成为动漫产业的强国。美国、日本和英国的动漫及其衍生产品已经成为国民经济中的支柱性产业,韩国以超常速度发展动漫产业,规模仅次于美日。2004 年,全球数字内容产业产值预计将达 2228 亿美元,其中网络游戏业产值达800 亿美元,动画业产值达450 亿美元,与游戏、动漫业相关的周边衍生产品产值则在
5、5000 亿美元以上。 1)美国动漫产业。美国动画片经过长期的发展,形成鲜明的特点,在动画艺术上取得了辉煌的成就,也是最初把动画片推向市场,并且形成产业规模的国家。迪斯尼公司最具代表性,到2006 年已经制作了第44 部动画片,同时销售相关产品,形成一条完整的动漫产业链。迪斯尼公司在海外也不断扩张,香港迪斯尼乐园已是全球第 11 个主题乐园。美国有 8 大动漫公司,是全世界最大的动漫国家,这个行业每年的收入超过 1000 亿美元。 2)日本动漫产业。日本动画片在欧美、东南亚以及我国均占有较大的市场。目前全球播放的动画节目约有60是日本制作的,漫画杂志和单行本的发行量已占杂志和图书发行总量的45
6、,动漫画的相互渗透,日本的电子游戏产品也得到了飞速的发展,由此衍生出动画电影、玩具等产品,创下近1 万亿日元的产业规模,同时也扩大了日本文化在世界的影响力。 3)韩国动漫产业。韩国动漫产业在全球的市场份额中不大,但发展势头强劲,2003 年产业规模仅为3200 亿韩元,2007 年将实现17000亿韩元的目标。手机游戏被列入国家863计划,2003年中国手机游戏市场规模为3.07亿元,2004年全年手机游戏市场实现8.84亿元的产值.诺达咨询预计,随着WAP和JAVA/BREW等游戏业务的进一步成熟,2005年国内手机游戏市场规模达到13.28亿元,比2004年增长56.7%,2006年手机游
7、戏市场将达到22.84亿元,比2005年增长71.9%。2004年,全球数字动漫产业的产值已达2228亿美元,与动漫产业相关的周边衍生产品产值则在5000亿美元以上,英国数字娱乐产业年产值占GDP的7.9%,成为该国第一大产业。美国网络游戏业已连续4年超过好莱坞电影业,成为全美最大娱乐产业。日本游戏市场每年创造2万亿日元市值规模,动画产品出口值远远高于钢铁出口值。韩国动漫业产值占全球的30%,已成为韩国国民经济的六大支柱产业之一。从全球及主要国家来看,动漫产业已经成为一个庞大的产业。 2004年我国动漫总创收达117亿元人民币,国内动画片生产总量只有2.9万分钟,市场需求却在26.8万分钟,实
8、际需求缺口达23万分钟,电视台严重感到动画资源的不足。在中国青少年最喜爱的动漫作品中,日本动漫占60%,欧美动漫占29%,而中国原创动漫,包括港台地区的比例只有11%,明显落后于国外动漫产业的发展步伐,整个中国的动漫产业仅处于初级发展阶段。在2005年上半年,各地兴起了建设动漫产业基地,在相关扶持政策的鼓励下,投资动漫产业的高潮。1.3 定义Mysql:数据库管理软件Unity3D:跨平台游戏开发工具Android:运行环境C#:软件开发语言Visual Studio 2015:编译工具1.4 参考资料Unity3D2D手机游戏开发金玺曾著2 总体设计2.1 游戏剧情概述主人公从高处坠落,醒来
9、时发现自己身处在一个被白雪覆盖的小镇,而自己是谁也不记得了。就这样,主人公为了找回自己失去的记忆开始了一段奇妙的旅行。2.2 软件结构软件使用Unity3D进行的开发,运行平台是Android,并支持跨平台到其他多个系统平台。软件在PC端的构架是.Net Framework 4.5。软件是以scence为基础,model上附着刚体性质,并与script想链接组成Prefab。3 程序描述3.1 界面模块3.1.1底部物品栏底部物品栏是手机RPG游戏的必备要素,我们使用Unity3D的GUITexture功能进行编写。代码如下:using UnityEngine;using System.Col
10、lections;public class BottomBar : MonoBehaviour private Vector2 defaultScreenRes; /Screen ResolutionSystem.Serializablepublic class GUISettingpublic Vector2 position;public Vector2 size;public Texture2D texture;System.Serializablepublic class LabelSettingpublic Vector2 position;public GUIStyle label
11、Style;HideInInspectorpublic float currentCastTime;HideInInspectorpublic float castTime;HideInInspectorpublic bool showCastBar;public GUISetting expBar; /exp bar settingpublic LabelSetting expText; /exp text settingpublic GUISetting castBar; /cast bar settingprivate PlayerStatus playerStatus;/ Use th
12、is for initializationvoid Start () defaultScreenRes.x = 1920; /declare max screen ratiodefaultScreenRes.y = 1080; /declare max screen ratioGameObject go = GameObject.FindGameObjectWithTag(Player); /Find playerplayerStatus = go.GetComponent();void OnGUI () / Resize GUI Matrix according to screen size
13、 ResizeGUIMatrix();if(!MessageBox.showMessageBox)/Cast barif(showCastBar)GUI.BeginGroup(new Rect(castBar.position.x, castBar.position.y,castBar.size.x,castBar.size.y); GUI.DrawTexture(new Rect(0,0, castBar.size.x ,castBar.size.y), castBar.texture0);GUI.BeginGroup(newRect(0,0,Convert(castBar.size.x,c
14、astTime,currentCastTime),castBar.size.y); GUI.DrawTexture(new Rect(0,0,castBar.size.x,castBar.size.y), castBar.texture1); GUI.EndGroup(); GUI.EndGroup();/Exp bar GUI.BeginGroup(new Rect(expBar.position.x, expBar.position.y,expBar.size.x,expBar.size.y); GUI.DrawTexture(new Rect(0,0, expBar.size.x ,ex
15、pBar.size.y), expBar.texture0); GUI.BeginGroup(new Rect(0,0,Convert(expBar.size.x,playerStatus.expMax,playerStatus.status.exp),expBar.size.y); GUI.DrawTexture(new Rect(0,0,expBar.size.x,expBar.size.y), expBar.texture1); GUI.EndGroup(); GUI.EndGroup();/Exp textTextFilter.DrawOutline(new Rect(expText.
16、position.x ,expText.position.y, 1000 , 1000),Mathf.FloorToInt(playerStatus.status.exp).ToString() + / + Mathf.FloorToInt(playerStatus.expMax).ToString(),expText.labelStyle,Color.black,Color.white,2f);/ Reset matrix after finish GUI.matrix = Matrix4x4.identity;void ResizeGUIMatrix() / Set matrix Vect
17、or2 ratio = new Vector2(Screen.width/defaultScreenRes.x , Screen.height/defaultScreenRes.y ); Matrix4x4 guiMatrix = Matrix4x4.identity; guiMatrix.SetTRS(new Vector3(1, 1, 1), Quaternion.identity, new Vector3(ratio.x, ratio.y, 1); GUI.matrix = guiMatrix; float Convert(float maxWidthGUI, float maxValu
18、e, float curValue) /Calculate hp bar-mp bar float val = maxWidthGUI/maxValue; float load = curValue*val; return load; 3.1.2命令菜单命令菜单的制作也是用了Unity3D的OnGUI函数。代码如下:using UnityEngine;using System.Collections;public class CommandMenu : MonoBehaviour private Vector2 defaultScreenRes; /Screen ResolutionSyste
19、m.Serializablepublic class ButtonSettingpublic Vector2 position;public Vector2 size;public GUIStyle buttonStlye;public ButtonSetting status,bag,equip,skill; /button setting/ Use this for initializationvoid Start () defaultScreenRes.x = 1920; /declare max screen ratiodefaultScreenRes.y = 1080; /decla
20、re max screen ratio/ Update is called once per framevoid OnGUI () / Resize GUI Matrix according to screen size ResizeGUIMatrix();if(!MessageBox.showMessageBox)/when click button statusif(GUI.Button(new Rect(status.position.x,status.position.y,status.size.x,status.size.y),status.buttonStlye)GUI_Menu.
21、instance.OpenShortcutMenu(Status);/when click button inventoryif(GUI.Button(new Rect(bag.position.x,bag.position.y,bag.size.x,bag.size.y),bag.buttonStlye)GUI_Menu.instance.OpenShortcutMenu(Inventory);/when click button equipmentif(GUI.Button(new Rect(equip.position.x,equip.position.y,equip.size.x,eq
22、uip.size.y),equip.buttonStlye)GUI_Menu.instance.OpenShortcutMenu(Equipment);/when click button skillif(GUI.Button(new Rect(skill.position.x,skill.position.y,skill.size.x,skill.size.y),skill.buttonStlye)GUI_Menu.instance.OpenShortcutMenu(Skill);/ Reset matrix after finish GUI.matrix = Matrix4x4.ident
23、ity;void ResizeGUIMatrix() / Set matrix Vector2 ratio = new Vector2(Screen.width/defaultScreenRes.x , Screen.height/defaultScreenRes.y ); Matrix4x4 guiMatrix = Matrix4x4.identity; guiMatrix.SetTRS(new Vector3(1, 1, 1), Quaternion.identity, new Vector3(ratio.x, ratio.y, 1); GUI.matrix = guiMatrix; 3.
24、1.3死亡窗口角色死亡时会显示死亡窗口,代码如下:using UnityEngine;using System.Collections;public class DeadWindow : MonoBehaviour System.Serializablepublic class GUISettingpublic Vector2 position;public Vector2 size;public Texture2D texture;System.Serializablepublic class ButtonSettingpublic Vector2 position;public Vecto
25、r2 size;public GUIStyle buttonStlye;private Vector2 defaultScreenRes; /Screen Resolutionpublic GUISetting cautionWindow; /window settingpublic ButtonSetting buttonReturn,buttonQuit; /button settingpublic string sceneQuitGame; /name scene quit when you select quit button/Private variableprivate HeroC
26、ontroller controller;public static bool enableWindow; /check enable disable window/ Use this for initializationvoid Start () defaultScreenRes.x = 1920; /declare max screen ratiodefaultScreenRes.y = 1080; /declare max screen ratioGameObject go = GameObject.FindGameObjectWithTag(Player); /Find playerc
27、ontroller = go.GetComponent();void OnGUI()/ Resize GUI Matrix according to screen size ResizeGUIMatrix();if(enableWindow)/draw windowGUI.DrawTexture(new Rect(cautionWindow.position.x,cautionWindow.position.y,cautionWindow.size.x,cautionWindow.size.y),cautionWindow.texture);/when click returnif(GUI.B
28、utton(new Rect(buttonReturn.position.x,buttonReturn.position.y,buttonReturn.size.x,buttonReturn.size.y),buttonReturn.buttonStlye)controller.Reborn();/when click quit gameif(GUI.Button(new Rect(buttonQuit.position.x,buttonQuit.position.y,buttonQuit.size.x,buttonQuit.size.y),buttonQuit.buttonStlye)Inv
29、oke(LoadScene,0.3f);/ Reset matrix after finish GUI.matrix = Matrix4x4.identity;void ResizeGUIMatrix() / Set matrix Vector2 ratio = new Vector2(Screen.width/defaultScreenRes.x , Screen.height/defaultScreenRes.y ); Matrix4x4 guiMatrix = Matrix4x4.identity; guiMatrix.SetTRS(new Vector3(1, 1, 1), Quate
30、rnion.identity, new Vector3(ratio.x, ratio.y, 1); GUI.matrix = guiMatrix; void LoadScene()Application.LoadLevel(sceneQuitGame);enableWindow = false; 3.1.4任务系统界面作为rpg游戏里必须有的任务系统,代码如下:using UnityEngine;using System.Collections;public class QuestWindow : MonoBehaviour System.Serializablepublic class GU
31、ISettingpublic Vector2 position;public Vector2 size;public Texture2D texture;System.Serializablepublic class ButtonSettingpublic Vector2 position;public Vector2 size;public GUIStyle buttonStlye;System.Serializablepublic class LabelSettingpublic Vector2 position;public GUIStyle style;public bool enab
32、leStroke;public Color strokeColor;private Vector2 defaultScreenRes; /Screen Resolutionpublic GUISetting questWindow; /window settingpublic ButtonSetting buttonAccept,buttonCancel; /button settingpublic LabelSetting titleFont,detailFont,rewardLabel,itemNameFont,targetLabel,targetFont;HideInInspectorp
33、ublic HeroController controller; /script controllerpublic static bool enableWindow; /check enable/disable windowpublic static bool enableButtonAccept; / check enable/disable accept buttonprivate Quest_Data questData;private Item_Data itemData;private Monster_Data monsterData;Multilinepublic static s
34、tring detailQuest;public static string titleQuest;public static Vector2 condition;public static Vector2 reward;private int questID;private string itemRewardName;private string conditionName;/ Use this for initializationvoid Start () enableWindow = false;defaultScreenRes.x = 1920; /declare max screen
35、 ratiodefaultScreenRes.y = 1080; /declare max screen ratioGameObject go = GameObject.FindGameObjectWithTag(Player); /Find playercontroller = go.GetComponent();questData = GameObject.Find(QuestData).GetComponent();itemData = GameObject.Find(Item_Data).GetComponent();monsterData = GameObject.Find(Mons
36、terData).GetComponent();void OnGUI()/ Resize GUI Matrix according to screen size ResizeGUIMatrix();if(enableWindow)if(!controller.dontMove)controller.dontMove = true;/Draw windowGUI.DrawTexture(new Rect(questWindow.position.x,questWindow.position.y,questWindow.size.x,questWindow.size.y),questWindow.
37、texture);if(enableButtonAccept)/Draw accept buttonif(GUI.Button(new Rect(buttonAccept.position.x,buttonAccept.position.y,buttonAccept.size.x,buttonAccept.size.y),buttonAccept.buttonStlye)SoundManager.instance.PlayingSound(Accept_Quest);NpcSetup.resetMessageBox = true;NpcSetup.disableNext = false;Mes
38、sageBox.showMessageBox = false;MessageBox.showNameTag = false;MessageBox.showFace = false;questData.StartQuest(questID);controller.dontMove = false;controller.dontClick = false;enableButtonAccept = false;enableWindow = false;/Draw cancel buttonif(GUI.Button(new Rect(buttonCancel.position.x,buttonCan
39、cel.position.y,buttonCancel.size.x,buttonCancel.size.y),buttonCancel.buttonStlye)NpcSetup.resetMessageBox = true;MessageBox.showMessageBox = false;MessageBox.showNameTag = false;MessageBox.showFace = false;NpcSetup.disableNext = false;controller.dontMove = false;enableButtonAccept = false;enableWind
40、ow = false;/Title Questif(titleFont.enableStroke)TextFilter.DrawOutline(new Rect(titleFont.position.x ,titleFont.position.y, 1000 , 1000),titleQuest,titleFont.style,titleFont.strokeColor,titleFont.style.normal.textColor,2f);elseGUI.Label(new Rect(titleFont.position.x ,titleFont.position.y, 1000 , 10
41、00),titleQuest,titleFont.style);/Detail Questif(detailFont.enableStroke)TextFilter.DrawOutline(new Rect(detailFont.position.x ,detailFont.position.y, 1000 , 1000),detailQuest,detailFont.style,detailFont.strokeColor,detailFont.style.normal.textColor,2f);elseGUI.Label(new Rect(detailFont.position.x ,detailFont.position.y, 1000 , 1000),detailQuest,detailFont.style);/Target Labelif(targetLabel.enableStroke)TextFilter.DrawOutline(new Rect(targetLabel.position.x ,targetLabel.position.y, 1000 , 1000),Target,targetLabel.style,targetLabel.strokeColor,targ