游戏为模型的软件架构续

  Player, NPC, Map, Director, Controller。

  这里map交给谁来做,游戏里是场景设计手,从场景考虑的多方民协调来看有些像给内架构的任务。在游戏制作里,map是比较重要的文化核心,影响了出现在上边的怪和NPC,影响了将要形成的路线和可提供的服务。

  建模为了解决问题,不一定要锁定到模型本身,可以变化着适应需求。可我觉得这里的map并不能随便改掉。每个map代表着一项服务集合。这个集合的构成应该是有思考的。每个map像是一个服务器,同一个服务器里放什么东西比较不好分配。它本身的构建应该不是考虑如何容易director跑路,而是如何有一个很好的凝聚和主题思想。

  ...脑袋不好用了,这样实用性好差,只能用来帮助理解现行架构面对的问题,这个的理解还是容易走通的,就是map和其它内容的协调,再最后反馈到Player的属性设定还有走路方式。

  Player,NPC, Director 就是现在的MVC。这模型把分布式的考虑Map(Maps)直接加进软件架构里,还多了个新Controller把它们所有的进行协调。倒是容易让各部分的编码人员理解自己在做什么,有个大局观,好整理思路。

  因为我自己没有涉及过分布式,只从别人写的文章里来了解到。知道那种暴力的分布方式一看就让人头大,里边缺少进一步思考、组织。

  在游戏开发里,地图的设定很重要。想起来一个游戏分不清哪个(地图、种族、故事)是先哪个是后。看魔兽世界的过程是,...copy魔兽争霸里的,一步步过滤到早起版本,也就是本来从角色到地图还有故事情节都已经有了一个模型,参照这个被玩家适应好的模型直接过渡到的3D。

  这里对应的就是从原来的架构过渡到这个模型。从原来的分布重构和扩充。

  增加更多的思考和立体内容。

  原来架构里,比较容易懂的是,一个软件是一课大树,树根和树枝都有很多小分叉。开始架构的时候,在理清思路后首先把握的是主树干,用减法思考把主树干瘦身到差不多,再进行两边延伸。虽然生命的实际过程,好像也是这样的吧,种子从发芽的时候同时生长的是根和叶子,还有树干。这个时候树干也有增长。这种建模给人的思考可能只是让人先把握主线,把主线确定出来再下手。

  小软件编辑的时候没有想过架构和整体性,有什么功能需要增加,然后去写实现就可以了,不怎么想以后的扩用性或者成长。后来考虑到这个的时候,用的想法是尽量解耦,各部分都朝解耦努力,保证代码中的逻辑块容易修改更换,当增加新需求的时候也容易相互调整一些,改起来好找、方便。现在的框架也是在朝更容易解耦努力。解耦本身是一个过程角度的观察,是从处理过程上做修改,而不是回过头来从最开始的架构、整体搭构角度。

  这样就容易让过程繁琐不容易被理解。

  面向过程不容易时,编码找到了面向对象,当时只是在编码层次有这个思想。它从看向过程转变到看向需要建造的对象,站在对象的角度里思考这个对象应该有什么、可以做什么。这样把系统功能集合中的一部分功能吸过来到对象里,职责分配有从全局向各点分发,转到各点向总功能集合索要。

  问题就来了,要设置多少个点、设置多少个对象,每个对象的凭据是什么。

  最开始的时候搭建这个项目,考虑起来就费事了。不过这些好像都不是架构做的,架构更多是只给了接口,架构里大多都有面向服务的影子,写好了接口,下边去填写相应的功能。在填写的过程中,编码人员建立自己的类,在给自己分配的功能任务中进行类的规划。

  整个项目就是一个机械的服务,没有多少思考。如果从接口设计角度考虑架构的话,就会是这个样子。这也是现行的解决方式。

  从顶层到基础有两个二次构建,最下边的那次是面向过程的、在朝着面向过程转变。第一次划分却是简单平铺式的,是一个平面化分,没有多元化起来。

  所以功能在分配到底层之前,中间有个周折,设计好这个周折就能让项目好过。周折、第一次构建,面对的不是划分功能,而是划分类。不是设计功能接口,而是设计承载类的部门。那么首先大体抽象的是这整个项目有多少个小类去完成...

  想起了加速度。最原始的是力,把力除掉物体的质量就是加速度。加速度是对速度的观察,速度是对路程的观察。最终导致 力可以用来观察路程。

  给了一个了力,要如何确定它的路程,不能直接构连,过程中进行了两次构建。速度构建了路程,加速度构建了速度,给加速度包个壳就是力。这里,加速度构建角度有几个基础:速度构建路程的规则确定、力剥壳的规则确定。

  底层类建立的抽象规则确定、项目需求到架构领域的映射路线确定。

  抽象规则可以用人的思考进行功能赋予。映射路线就是类似建模方式、思维转变方式。

  面向对象的抽象规则并不被每个人都掌握,站在对象的角度思考。就像一个部门能做的事情就那些,把人安进这个部门后给这个人分配的职责。靠每个程序员的基本人文意识给安排工作。没有明确的条例,每个都是聪明的程序员的话,这规则勉强可用。

  建模方式负责需求到编程问题空间的映射,可以是一棵树、一个公司、一个立体的video game或者其它的更合适的模型。

  选取了video game,游戏模型,基本编码阶段的面向对象也可以用来抽象player和NPC代替。

  这并不是一个游戏,只是计算机里边的一个3D世界。它提供的是公司服务,划分用户类型和服务类型,以及把它们相连接的路线方式、分布方式。一个玩家从登入到登出所要转的一圈;玩家、NPC、地图和行走路线的包装过程。地图可以是服务器的分布,地图和行走路线都和NPC摆放位置相互影响。也和玩家数量、玩家任务量相互影响。

  这建模还是有问题。地图和路线是用来协调解决高负载和分布式。分布式也是高负载分离出来的,不过并不是一个很好的解决方案。

  每个NPC应该有它独特的思考,他们才是整个故事的首先雕刻。雕刻好了NPC再分配给他们需要的地图。每个NPC都要有他的故事内容,于是就很容易知道他需要站在哪里,周围是怎样的地图,还有什么人和他站在一起。也就是每个任务都是人性化的。

  每个需求都是人性化的,会产生这样的需求是社会交互的结果,所以对项目需求的划分应该从产生原因角度,而不是功能实现角度。也就是对项目需求有进一步的了解和思考。

  哪个NPC是地区的国王,牵扯出一系列重大任务。哪个NPC是一些平民在生活,给的是一些生活任务。哪些NPC又独特地存在于野外,有自己的跌宕起伏的故事,不在王室里,也开启了一份很重要的任务主线。

  地图从新手村开始建,再到稍大一点的城市,再到王国,就像一个游戏人的升级路线。有了王国再去周围,随着等级一点一点朝外扩。所以建图的时候先建新手村,随着需求的繁衍一点一点朝外扩。也就是拿到一个需求,思考它的繁衍过程。本来是个小企业,需求就那么单调,慢慢这个企业成长,需求也变多了。围绕需求从小到大 、成长到现行需求 这一角度,来建项目,也来推断并适应项目新需求的发展路线。

  设计一棵树,从推断出它发芽和成长的过程来描绘出树木现在的样子,预测树木的发展方向。

  待续。

  

时间: 2024-10-12 21:45:22

游戏为模型的软件架构续的相关文章

我的路子 - 发现游戏为模型的软件架构方式

总觉得如果一个内容被深刻地理解了,那么当在他口中说出来的时候,应该是很简单才对. 所以一直觉得,编程里那些不容易理解的,需要记住很多内容的东西都是有缺陷的.自己又比较自我认可强,看不到别人的角度,表现上有些自我.自己想的只是,事情还有很多解决方法,为什么要被那一种很难学的方式占了路子,而且找不到理解透彻的,有点为这种状况气愤,觉得肯定是没有好好做的原因,或者是一些人太安于现状的原因,或者是一些找不到出路就说没出路的人,自己没吃透却站在高处误导别人,阻碍大部分人的进一步思考. 即使这样,自己该做的

系统架构师秘籍(二)软件架构- 续

上次的文章中,我们简单描述了一下软件架构的概念,接下来我们描述一下软件架构中的具体细节. 软件架构 所谓软件元素,即指组成软件系统的一个最基本的模块.一个软件元素的特性在很大程度上取决于系统的类型,以及你考虑和选取软件元素的背景和关注点.程序Lib库,子系统,可部署的颗粒或者控件(如企业级Java Bean,ActiveX 控件等),可重用的软件产品(如数据库管理系统),全部的应用程序都可以称为一个软件系统的软件元素,它取决于软件系统的构建. 一个软件元素所拥有的特点如下: 一个明确的界定的责任

游戏聊天记录

战斗计算过程: (1)暴击.命中.miss等判定 (2)根据玩家属性和技能给予的逻辑进行计算,算出来攻击和防御的数值,综合两者计算出来伤害的血量 (3)基础计算-----技能逻辑加成----暴击---伤害吸收----伤害减免-----吸血----反伤 (4)基础计算公式: attack * (attack / attack + N* def) 可以通过技能传入参数来控制战斗计算公式 (5)基本伤害,自然伤害,金木水火土元素,奥数,冰,法伤,魔伤,这些都是为了玩法而引入的一些的参数和概念,只不过是

【Source教程】游戏SDK工具的安装与使用

返回[Source教程]文章目录 一.下载与安装 SDK,全称为Software Development Kit,翻译过来就是软件开发工具包.那么既然我们是做Source引擎的开发,那么SDK显然是必不可少的. 一些第三方工具更是依靠着官方的SDK来支持运行的,例如Crowbar.SDK的重要性可见一斑. SDK中一般包括有Hammer World Editor(地图编辑工具).Model Viewer(模型浏览工具).Face Poser(模型表情浏览工具)Workshop Manager(创

小议软件架构设计要点

如何更好地进行软件架构设计,这是软件工程领域中一个永恒的重点话题.过去几十年来,国际软件工程界在软件架构设计方面已经获得了长足发展,大量图书.文章和文献记载了这方面的成熟经验与成果.软件架构设计往往是一件非常复杂的工作,涉及到很多细节和方方面面,可探讨的话题也非常之多.囿于篇幅限制,以下只能根据笔者个人理解,遴选出软件架构设计的个别要点,结合当前流行的敏捷软件工程思想,与大家分享一下自己在软件架构设计方面的心得和体会. 架构决定成败 软件架构是软件产品.软件系统设计当中的主体结构和主要矛盾.任何

游戏制作大致流程粗谈之二

上次讲到了游戏原画的制作,在原画师完成原画的创作后,负责建模的同学便需要通过建模工具对原画进行建模,包括游戏的人物模型,场景,物品,等等等等, 游戏建模大致流程如下:1.建立模型   2.UV展开 3.绘制贴图 4.骨骼动画,同时还需要进行编辑的有模型的碰撞体积等等,然后用贴图对模型进行渲染,同时修改 一些材质. 游戏的模型完成后便该有程序员同学来进行代码的编写了,目前比较流行的游戏编程语言有C++,JAVA等,游戏编程接口有DirectX,OpenGL等.编程是游戏制作 环节中耗时最长,工作量

一个游戏制作的全过程

原文地址:http://tieba.baidu.com/p/1060660229 大家每天在玩游戏,真正知道一款游戏制作的背后故事么?以下,请看游戏策划一个游戏的诞生,往往都是策划们脑海中的灵感一现,这是游戏诞生的第一步,但是并不是想到就行,策划如果觉得可行,必然要制定一个策划方案,比如游戏的类型,背景,设定,种种例图:这是一个网游的策划方案,单机游戏也是同样的道理,策划游戏不是一件简单的事情,策划不仅要每天玩很多游戏(玩到吐,而且要写测评报告之类的东西)而且方案得不到老总的认可也是不行的,一部

【Unity】1.3 Unity3D游戏开发学习路线

分类:Unity.C#.VS2015 创建日期:2016-03-23 一.基本思路 第1步--了解编辑器 首先了解unity3d的菜单,视图界面.这些是最基本的基础,可以像学word操作一样,大致能明白有几个菜单,几个基本的视图,各自起什么作用就可以了.当然还要了解人物基本的比例和结构. 第2步-了解基本概念 理解场景里面的坐标系统,输入系统,简单的向量概念.Unity3D的坐标系统及向量概念如果不理解清楚,不理解世界坐标,局部坐标的关系,即使一个简单的移动,缩放,旋转的几行代码,也会困惑你半天

Quick-Cocos2d-x初学者游戏教程(八)----------------- 物理引擎和角色

Quick-Cocos2d-x初学者游戏教程(八) 续上章载入 TiledMap 背景后,接下来的这章我们将开始引入物理引擎相关的东西,并且会开始创建我们的游戏角色.游戏地图中各类障碍物和奖励品的创建则会留到下一章. 构建物理世界 首先,物理引擎是干什么的应该不用我说吧?好吧,还是说一下(百度的):物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动.旋转和碰撞反映.所以用它来模拟真实世界的飞行.掉落等功能是具有得天独厚的优势的,这也是为什么我们的游戏要使用它的原因. 然后,我们要怎样使用物