steam休闲游戏戏的后台开发有什么明显的区别

游戏开发的编程算不算是 IT 行业中难度最大的【程序员吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:106,296贴子:
游戏开发的编程算不算是 IT 行业中难度最大的收藏
游戏开发涵盖几乎所有CS领域的知识,然后需要把所有这些东西(有些可能在单独领域中老死不相往来的算法),整合到一个大而全的稳定系统里面实时运行,这TMD就是一件不可能完成的事情啊!
一、关于游戏开发编程难度的定义
我认为,游戏开发编程就是围绕着游戏开发的一切写代码行为。有人回答说现在很简单啊、有引擎啊、写个逻辑没难度之类的,这都是没有帮助的答案。那引擎算不算游戏开发?如果不算,我能不能认为研发汽车很简单,只需要把汽车生产的流水线买回来,然后自己采购材料装配就算研发汽车?荒谬!没有引擎,算个J【哔】。没引擎研发你好意思说自己在做游戏么?那是策划和美术干的事情,没技术人员个J【哔】事情。
游戏研发的技术含量,绝大部分就在于引擎研发里面,没有引擎研发,等于技术人员没什么鸟事情。所以我认为游戏研发编程,应该用引擎研发的来定义,而不是简单用游戏逻辑敷衍过去。当然,游戏逻辑要开发好也绝对不是一件简单的事情,之前有人讨论过的,如何搭建一套任务系统,非常讲究。这里先不展开。
二、游戏引擎是个什么鬼东西
绝大部分人,特别是小白,只是认为游戏引擎只是画出游戏画面的那么一坨东西,只是一个执行游戏逻辑脚本的程序。嗯,这都是业余看法。
游戏引擎虽说是引擎,实际上是一套生产工具,代表着游戏开发者的生产力。要开发游戏,就需要通过这套工具,去进行游戏的内容创建(Content Creation),并且进行游戏的维护、迭代、再开发(DLC、资料片)。而且游戏引擎还包含对自身开发的工具,比如专门debug引擎的工具,专门profile工具等等。再深入一点,针对网络游戏,服务端有专门的部署工具、管理工具、测试工具、维护工具、GM工具等等。所有这些东西,加起来,一整套工作流水线的总和,才是游戏引擎。Runtime部分,只是一小坨东西。
游戏引擎Runtime部分的东西,都是实时或者准实时演算的、也有实时重演的,这部分对技术的要求是效率高,无论是图形、还是物理、AI等都必须在毫秒级别完成复杂运算,还需要跟游戏本身的表现进行配合,抠得很死。
游戏引擎编辑器部分的东西,大而全,一般稍微完整的编辑器都几乎要克隆大部分Autodesk 3DS Max的基本功能,而且还需要针对引擎本身特性作出一些定制,还需要根据不同游戏类型、游戏资源创建的pipeline进行调整。而这个调整、这个pipeline本身的合理性和流畅度,直接影响美术资源的制作、游戏内容的制作迭代,很多游戏胎死腹中,死就死在这个上面。什么东西是游戏制作预算最大头部分?你们猜?
游戏公司的生产效率,就直接体现在编辑器的制作效率上,以及内容生产者对pipeline的磨合程度。磨合得好,效率高、成品率高、往返扯皮少、预算低、项目可控、产出可控。磨合得不好,就跳票、跳票、跳票、挂。
服务端部分比较敏感,不多说,就一笔带过,用集群的,有可能你全服挂了还不知道哪个结点出问题了怎么死;逻辑不严密的,交易复制金钱一个星期了还没log没警报没言论监控察觉,游戏直接金钱通胀GG。
三、游戏引擎开发的难度
没做过引擎的、做过引擎的、和设计过引擎的人,想法完全不一样,不能同日而语。屁股决定脑袋,你不在那个位置上,不能把问题思考透彻。很少人可以从无到有搭建一个完整的引擎并且让它变成一个游戏可以卖钱,于是很少人能想明白,有些东西为什么这么做。
比如 ,这里列举了一堆所谓的问题和采用的算法,指出他们在很多年前就已经进入瓶颈了。真的吗?那么为什么这些年引擎还在进步?游戏画面在提高?游戏体验在加强?游戏引擎的算法在更新?举个栗子,LPV/SVO算不算图形算法的突破?二十年前卡马克时代有LPV么?有全局光么?他动态光都不敢多用两个,何况现在用的brickmap style的light point cloud做无穷多光源的模拟。这些例子太多,实际上还真不算什么难度,有算法出来了,我们集成就是了。
然而游戏引擎真正难的部分在于,架构。
重要的事情要说三遍:架构、架构、架构。
很多算法看上去很美,单独实现很简单,但要真的用起来,一点都不容易。因为你的引擎不一定容得下它。架构并不是很玄乎的东西,他实际上看起来就像一个架子,用来放一些业务和算法。牛逼的架构就是可以放好多好多东西,可以兼容不同类型的业务和算法,并且相安无事。挫的架构就是需要不断的进行整体的更替以适应业务的变化和新算法的需求。
简单的来说,架构源自于对重复性业务的抽象和对未来业务扩展的前瞻。即你的经验和预见。比如你的Entity底层架构是否带树状更新结构,要知道树状更新结构会在大量采用嵌套性挂接结构的时候引发性能问题,即如果你在做MMO,那么要小心咯,策划可能会做一些复杂的圆环套圆环装备、宠物、翅膀、坐骑、双人坐骑、移动平台,这些都是嵌套性的挂接结构,在树状更新的时候需要遍历树的每个节点,可能有性能问题(在移动时代这还可能产生耗电问题)。但如果你在做FPS,那么这个不是什么大问题。(请参考采用Unreal2的天堂,对照Unreal3的ActorComponent改动)。
所以,你的架构,决定了你做什么游戏有利,什么游戏不一定有利。
那问题来了,没引擎之前,怎么来架构?踩坑啊!踩足够多的坑。没做过实际游戏,一定、绝对、100%是没法做引擎设计的。因为引擎架构来自于业务,没有业务的洗礼,不知道什么才是引擎真正需要的。于是在做引擎之前,必须先熟悉游戏开发本身。引擎架构还必须足够宽容和庞大,以容得下各种不同领域的算法;同时架构还必须足够高效,本来已经繁重的游戏计算需要更轻更快的信息交互。
试想一下,你的逻辑结构每帧需要从设备抓取玩家输入,监听网络事件,然后转换成逻辑响应、驱动游戏逻辑运算、驱动AI运算、驱动物理运算、再变成Entity的属性、由Entity发送到渲染层、渲染层把属性翻译成渲染属性、组织成最合适渲染设备调用的数据、发送到渲染设备、设备在进行最复杂和繁重的渲染计算、这个时候引擎很可能在并行的做一些收尾工作、准备下一帧更新、同时调度后台的文件系统读取即将需要的游戏资源、并且游戏逻辑可能利用等待渲染的时候做垃圾回收、或者进行脚本的热更新操作。
上述工作,横跨数个大型模块:
引擎层对象模型脚本逻辑AI层的数据更新物理引擎的模拟运算(更新、交互、反馈)渲染层的更新运算(Vertex/Index/Texture/Shader/Framebuffer/Parameter)网络层(RPC/Data Replication)鼠标键盘输入输出GUI的组织和更新
嗯,基本上,计算机几乎所有领域的算法,都基本涵盖了。(还有反外挂技术,开发到最后基本和杀病毒杀木马无异……)
游戏引擎的架构,相当于把上述这些大型的模块,当做老婆一样娶在一起,然后让他们相安无事,和平共处。可是他们天生都是相互嫉妒的啊!物理的数据渲染不能复用啊!渲染的数据无法反馈啊(反馈的代价很大啊)!逻辑的数据要稳、引擎的数据要高效、不同算法需要不同的对齐/排列,要快还要考虑SIMD啊!尼玛的,这些东西要传递要交互几乎都是要设计n套交互协议啊!
于是我们利用了一个伟大的发明,那就是OO。所以C++是必须的,游戏引擎必备的语言。OO拯救了游戏开发者的世界……
然而你在用OO抽象这些东西的接口之前,你需要先熟悉上述所有这些领域的算法,才能设计出一个中心框架架构……要知道这些东西,每一个模块的具体算法,随便拿一个出来,都足够你做一辈子的。
君不见 vczh 就做好GUI已经足够骗11w粉了吗!游戏引擎就是要把上述所有的东西,都做好,你说有多难?
更难的是,上面这个每帧更新过程,是实时在跑的。更更难的是,这些东西,有可能是在玩家的小霸王学习机上跑的。更更更难的是,玩家可能在网吧、而网吧安装的是非标准的操作系统、并且用的是垃圾cpu加非常不错的显卡跑的。
这些问题,作为游戏引擎开发者,特别是苦逼的国内开发者,都要考虑到,都要想办法兼容、压榨,否则玩家分分钟问候你家人一个晚上。
所以,基础架构,对游戏引擎尤其关键,而恰恰它的开发却是困难无比。
(我很想展开服务端啊,可是我不算特别懂,而且游戏服务端比上面这个客户端的高大上很多啊,牛逼的服务端引擎很屌很腻害啊,想象一下像黑客帝国里面的情节一般,我和你面对面释放魔法造成伤害,但我们在不同的服务器上,不过下一个瞬间,我们又在同一个结点上了——所谓的动态迁移)
四、游戏引擎最复杂的部分
无疑,在引擎runtime(我这里仅仅说runtime,其实tool chain部分有更复杂的,但绝大部分人接触不到,不提作罢)部分,最复杂的,要数图形引擎。
首先图形引擎是一个门槛很高的开发项目。虽然学的人多,但靠谱的人少;靠谱又懂美术的,少之又少;靠谱、懂美术、做过游戏、又可以设计引擎整体框架的,凤毛麟角。图形引擎需要的并不是一个实证式的算法,它需要更多的是trick,是cheat,要骗过玩家的眼睛和感受,需要的不只是一个书呆子式的研究员,而是一个深入了解游戏美术制作的、懂那么一点美学和电影的算法设计师。每个引擎都会根据自己需求定制一些图形算法,去adapt自己的优势。
其次图形引擎是一个弱理论强工程的产物。即使你理论水平已经达到发西瓜paper的地步,也不代表你可以设计出优秀的图形引擎。因为图形引擎需要应用——要接地气。你面对的可能是一个很广泛的GPU type,可能有不同的渲染管线架构,可能有不同的API,甚至可能你的图形引擎需要兼顾PC、移动、console平台,每个平台你需要有针对性的调用策略,而必须保证他们看起来差不多。
更加操蛋的是,你可能需要关注很多技术细节,比如PC机器用的是dxtc、大部分android机器用的是etc1、而ios用的是pvrtc、xbox one用的是bc6、metal gpu family 2用的是astc。这些贴图压缩格式各不相同、却各有优劣、在不同的场合有不同的优势也有不同的弱点。比如pvrtc在低频图像上可能会有一些斑点、etc1没有alpha通道需要用一些额外的手段进行模拟。
这些技术细节却决定了你画面的成败。可能你读了一篇很棒的西瓜论文,发现了一个碉堡了的新算法,然后开始要在你的引擎上大展拳脚,结果放到目标设备上却发现效率奇低。
在最新的军备竞赛中,unity和unreal4都在图形引擎架构上花了很大力气,比如用了诸如glslopt、hlslang之类的中间shader编译器来保证跨平台的shader正确性,把编译器这个程序员三大浪漫之一引入到了复杂的游戏引擎开发里面,瞬间提高了游戏引擎开发的难度和逼格。
最后图形引擎现在还面对对gpu驱动撒手不管的操作系统,最新一批API,DX12、Metal、Vulkan都采用了薄驱动,即“老子不管你们怎么用gpu了,引擎自己管吧”。
这样相当于把图形绘制的状态切换、资源管理、数据更新、命令调度全部抛给了游戏引擎自己做。这样可以大大提高拥有优秀架构设计的引擎效率,却也大大提高了引擎的设计难度。
五、功夫在诗外
游戏引擎更多的需要项目的洗礼和验证,多一个项目采用可以踩更多的坑,让架构更加成熟和稳定。但游戏无法像网站一样持续的推出、热更新、选择性更新,一挂即挂,所以游戏公司需要开发一款引擎,其难度更可怕的在于,你需要用游戏产品,作为引擎的炮灰,去历练出一个优秀的引擎架构和tool chain。
所以别问太多为什么国内的游戏山寨居多啊,也别问太多为什么国内没有像样的引擎。
其实,引擎、游戏、效果,都是用钱堆出来的。前面的是炮灰,是试验品,不过很多公司不懂,很多管理者不明白,当然也烧不起这个钱。有时候一个游戏失败了,一家公司就倒了,一个有希望的团队就散了,一个有志气的人就磨灭了。
国外环境宽松,机会也多,生活简单,上世纪有很多炮灰,也磨练出了一堆伟大的引擎架构师,他们艰难的存活下来了,把这些经验变成引擎设计的智慧,重新运用到了新的引擎上,升华,变成更厉害的游戏引擎。这个过程其实很艰辛,很痛苦,很难,这个过程倒了无数个tim sweeny和john carmack,大家只是看到了成功的那两个而已。
国内有时候也会有成功的游戏,但积累的意识太少,持续发展的想法很难被支持,和环境有密切关系。当然,更重要的是,游戏引擎开发真的太难、太难、太难、了。
————————————————————————————————————
嗷,写着写着就有点偏了。还想展开更多,先算了,有疑问评论区提出,我再展开。最后给自己反补一个,我相信开发操作系统会比游戏引擎更加复杂很困难,不过这鸟事儿有多少it企业会正儿八经的做呢?
————————————————————————————————————
关于匿名用户的评论,很多细节我不想反驳,其中一点,我非常非常不认同,
大学里实习过的学生都会用石英和磁铁加个喇叭组装出一台收音机来,这些学生如果因此觉得自己是收音机的发明者而希望得到他人认可就成刻舟求剑了。同样,unreal4都开源了,照着临摹下还要自我陶醉的话和刻舟求剑有何区别?
Unreal4开源了,就可以临摹?你就认为设计引擎真的就是把这些东西打开临摹一下算了?嗯,或许很多人都在这么做、可能你做过的项目也是这么干滴,但可以很负责任的告诉你
老子不是。
我认为Unreal在某些架构(只是某些)上的设计,有很大的局限性,它的业务框架,和即将到来的新时代,有巨大鸿沟,恰恰就是国内引擎赶超的一个非常好的时机。
我不敢夸下海口说一定可以做得完全比Unreal4好还是要超英赶美怎样的,但至少,我在做这样的努力,而且我也很有信心,我写了差不多二十年的程序,从业差不多十年,自己对自己认知非常充分,这是一个机遇,我们可以把引擎真正做好。
如果你的对手已经把事情都做好了,然后你因此躺着,就觉得没事情可以做了,觉得不需要做什么事情了,那就是废物,赶紧走开吧,你和传统行业的废物没什么区别,别说自己是做技术的,别说自己是做互联网的。
我从最早开始接触这个行业的那天起,就一直在内心保持一个信念,怎样做到最顶尖,即使有人在上面了,还是需要想怎样爬上去,怎样爬过去。Unreal也没有停止更新,Unity还在不断升级,何况还有n多Inhouse的引擎,其实performance比这两个玩意儿牛逼多了,都在不断前进,你这么轻易就说没东西可以玩儿了?
游戏行业真正的技术竞赛才刚刚开始,Runtime只是一部分,还有更大的一部分是Tool Chain。因为现在最重要的是Content Creation,即我还没展开的引擎工具制作部分,直接影响着整个游戏开发的预算和投放时间。考虑以前开发游戏,需要一年到三年,如果你可以改进生产力,把整个流程缩短到半年到一年,那么你的竞争力就会大大提高,你的产品可以更快的进行迭代改进,策划的想法可以得到释放、在早期的时候花更少的时间和钱就做出prototype验证。
最后反驳一下,用一个大新闻里面的一句策划的采访来印证技术问题,你可真够弱爆了的。第一、技术人员根本不需要策划的言论支持自己的技术观点,他们根本不懂技术、一知半解,我基本在技术问题上忽略他们,只需要告诉他们,你给老子等着,我帮你搞定就是了,所以在策划的角度看来,技术似乎很容易,实际上是因为你队友给力啊有木有!第二、一个专门针对市场的采访有什么技术含量?请问外交部发言人的问答可以表明国内高层的真正内心想法吗?
难道技术人员现在真的弱鸡成这个样子?像个老油条?一边喊着我真的什么都做不了啊,没什么价值啊,连挖掘一下的想法都没有啊,一边还用不懂技术人员的外交辞令来强化一下自己的心理压力。荒谬!
我现在每天都精力充沛,每天都觉得时间不够用,一打开代码,我每天都会感叹,这真是一个大有可为的世界啊!
————————————————————————————
忍不住又补充一点,现实生活中我就是个话唠。
我并不是一开始就做游戏的,我曾经跨界。
温赵轮提出的所谓程序员三大浪漫里面,我深度的践行过两个,十多年前,我完整的实现过了一个符合RenderMan Specification的光线跟踪渲染器,当然和现在 空明流转 做的牛逼光栅化渲染器有比较大的差距,毕竟其实鄙人战斗力还是有点渣的,而且当时还是大学,互联网也没这么发达。我的需求就是要一个可以和Pixar的RenderMan一战的电影级渲染器,并且跑的是Raytrace,并且可以速度超过MentalRay。嗯,作为一个大三学生,当时我的想法是足够可笑的。内行人会明白上面这些鬼东西是什么意思。
最后,我做出来了,一个兼容性可以直接跑MTOR(Maya to RenderMan)、非Global Illumination场景下比MentalRay快的这么一个渲染器
这个渲染器其中包含了大量各种不同的技术,包括,raytrace、光栅化、贴图采样的基本图形学技术,以及一大堆图形学的算法(基本上能说出来的都用到了),而且你需要比MetalRay快意味着你需要把所有的这些东西都要自己手写(那时候没那么多牛逼哄哄的开源库),而且要手写得比别人的快。于是我又做了两件事,一、把核心部分(包括raytrace和BSP traversal)用SSE指令集改写了一次;二、把Shader部分,彻底的做了一个Shading Language Compiler。
我有比较严重的完美主义情节,为了做好Shader语言编译器,我翻了一遍gcc,把可以做的编译优化都做了,比如Constant Folding、基于DU-Chain/UD-Chain的使用分析、Control-Flow分析、等等,甚至到最后我开始做SSA。
当时大概是2006年,我当时还是一只弱鸡。基本上这些东西,都有点难度吧,我不认为特别难,至少RenderMan Specification要跟着做完,也就是一些比较繁琐的事情。而最后我可以做到360 x 240的分辨率下,可以实时跑一次反射一次折射一次shadow的raytrace。这个东西当时几乎可以用在一部国产动画的渲染工作上。
后来我进入了游戏行业,然后我慢慢接触到了游戏引擎,然后我傻了眼。
在真正做游戏引擎之前,我自认为还是没见过什么特别难的东西,渲染器啊,其实也就那回事儿,大学作业可能还简单点,要写一个RI Spec的、带RSL的、高速的渲染器,那就是再复杂一点点。当然,我自己有点自大,其他人要做这个,可能会痛苦死(主要是烦)。编译器啊,也还是那么一个鸟样啊,当然也是烦啊。不过这些东西,都是有算法可以套的,有非常严谨的做法和规矩的,业务也很单一。就像渲染器,99%的hotspot可能就在一个函数里面,这真的就没什么可做了的,你就死扣这个函数得了。(然而,迪士尼做了Hyperion,在有Pixar RenderMan的情况下。所以为什么我说Unreal并非不能超越)
在看完了游戏引擎的真正全貌之后,我的感受是,这是什么鬼东西,一大堆我不知道我不认识的技术?大而全,而且每个部分都要求“实时”。疯了啊,渲染想快,改SSE啊,改多线程啊,出了新算法马上adapt过来啊,业务很单一很简单啊,就是计算啊。编译器也是啊,我可以做中间结构啊
顺着定义回溯使用啊,用各种分析工具进行用量检测啊,DAG分析啊,做各种辅助结构啊。但游戏引擎业务纷繁复杂,最后我发现自己曾经在做渲染器和编译器里面用到的大部分技术,都需要Re-apply到引擎里面,而且要求更高,因为实时。
一个大学生,从不懂RenderMan,到设计一个兼容的渲染器(RenderMan不开源),到为了他的RSL要设计相关的编译器,到最后设计出一个并行的SSE加速Shader虚拟机执行Shading、超越MR渲染速度,花了大概两三年的业余时间。
然而在上面的水平基础上,要懂得设计引擎、重新设计整个游戏引擎的业务框架、并且提出可以与世界现代引擎架构相提并论的架构设计,我花了十年的时间,全职,而且几乎每天自觉回家加班到凌晨。
要么我真的老了,没以前聪明了,脑袋退化了,要么,游戏引擎这真是个可怕的玩意儿。
程序员?来上市公司博为峰学软件技术,零基础授课,零元入学,就业有保障!程序员?学软件技术要学多久?学软件技术毕业起薪8K,入学即签就业协议!
不知道,不是有引擎吗?
登录百度帐号推荐应用95被浏览5861分享邀请回答233 条评论分享收藏感谢收起51 条评论分享收藏感谢收起写回答1 个回答被折叠()后使用快捷导航没有帐号?
 论坛入口:
  |   |    |   | 
游戏编程十年总结:任职主程那些年我踩过的坑
评论数: 10
-0.jpg (61.82 KB, 下载次数: 45)
15:31 上传
  GameRes游资网授权发布 文 / 深圳-宝爷
  自敲第一行代码起,已经十年多了,今天既不是十年整的日子,也不是一个有特定意义的日子,本来像这种大总结的文章,当择良辰吉日,斋戒沐浴三日,方可动笔。一开始计划是写一篇五年总结的,但各种原因一拖再拖,于是就变成了十年总结。光阴似箭,时不我待,转眼已经在奔三的路上了,离大叔的称呼很近了,但离大神的称呼还很远,在此谨以此文总结反思这十年技术生涯的点滴,与诸君共勉。
  编程之前
  大概是读初一的时候,家中有幸让我得到了一台二手电脑,那时的心情比现在让我得到一堆苹果电脑更加兴奋。但这是一台不能连网,也没有任何游戏和软件的电脑(扫雷、纸牌接龙等内置程序除外),这样的电脑能有什么用呢?只能瞎折腾,很快电脑被折腾坏了。去电脑店修了几次之后(被宰了几次),决定自学电脑维修。
  跑了很多书店才买到跟电脑维修相关的书籍,也就是在这时建立了对计算机的初步认识,并掌握了屡试不爽拔插内存条、重装系统大法。还从帮我修电脑的大叔身上学到了修电脑的装逼套路,在帮别人修电脑时不论如何,一定要进一下BIOS捣腾一下,一定要在DOS的黑窗口下快速地敲几条命令,让旁人看不懂,以彰显我的技术高超。在2002年左右,像老家那种小地方,估计会重装系统的人都不多。
  之后从修电脑的大叔那买了不少游戏碟,如CS、红警、帝国、炎龙骑士团等等,安装游戏是一个隐藏天赋,只要把游戏碟插入光驱中,这个隐藏天赋就会被自动激活,自己摸索着把游戏装上去。从此电脑上的内容开始丰富了起来,获得了近视成就。玩游戏的同时也对游戏和游戏的背后产生了浓厚的兴趣,那时候经常会思考游戏是怎么做出来的?实际上更多的同学比我接触电脑和游戏更早,但他们对游戏的背后并没有什么兴趣,所以他们现在很多都成了小老板,而我成为了苦逼的程序员。
  初学编程
  2005年的某日,应该是在信息技术或数学课上,第一次接触到了编程语言Basic,一开始用的并不是VB6.0,而是一个蓝底黄字的命令行IDE,虽然只能倒腾出HelloWorld和一些简单的数学程序,但对此仍然有着浓厚的兴趣,因为我知道了游戏是通过编程来实现出来的,那时候满脑子都是,游戏是怎么做的?但没人告诉我,我只能自己探索。
  这时候对程序的了解,也只是最简单的一些语法而已,直到一个亲戚送了一套VCD,是开天辟地的视频教程,里面介绍了VB6.0,在我看来,那是非常适合新手,培养程序思维的一套教程,在大叔那买了3块钱一张的VB碟子,装上VB6.0之后,就跟着视频中的示例操作起来了。于是我写出了人生中的第一个游戏,一个猜数字的小游戏,并尝试着改变游戏的规则,制作类似石头剪刀布这样的游戏。
自敲第一行代码起1238.png (83.02 KB, 下载次数: 48)
15:17 上传
  视频教程中的东西很少,很快就学完了,但这远远不够,我只能写出一些简单的数字游戏,寻找新的资料成了当务之急,但骑着单车翻遍了老家周围方圆十几公里的新旧书店,都没能找到合适的资料,如果是在广州深圳这样的城市或者是像现在这样的网络环境,应该可以很快地找到合适的资料,最后通过学校的上机课,上网找到了一本《Visual Basic游戏编程21天自学通》的书,学校的网速经常只有几KB,寻找以及下载这本书都相当不易,实际上这本书也不是最适合我的,中间存在严重的知识断层,但是最终我硬着头皮挺过去了。
  书中的第二个例子是一个模拟细胞生存的游戏,里面用到了一些简单的数据结构和算法,但在这时候我还不知道什么是数据结构,对书中的代码尽是问号,大约经过了一周的死磕,在炎炎夏日,昏暗闷热的小房间里,汗水不断流进眼中,不为所动,因为完全沉浸在代码中了,全神贯注地做一件事情,这是一种奇妙的感觉,这段回忆很是深刻。
  最后终于将细胞生存的游戏跑起来了,这是我到目前为止写过最酷的东西了,并且在这个例子中领悟了简单的数据结构与算法,贪吃蛇怎么写?飞机游戏怎么写?俄罗斯方块怎么写?五子棋怎么写?似乎都能从脑海中模拟出来了,应该用怎样的结构,怎样的逻辑?我想这就是初步的程序思维了。接下来的时间里,我将脑海中想到的游戏都一个一个地实现了,虽然实现的效果看上去惨不忍睹(使用Windows自带的画图工具绘制)。但依然是很有成就感的。细胞生存小游戏用的大概是一个简单的图结构,在做贪吃蛇的时候,依葫芦画瓢,写出了一个链表结构,然而直到后面学习c语言的时候,我才知道这是数据结构、是链表......
自敲第一行代码起2066.png (60.66 KB, 下载次数: 51)
15:17 上传
自敲第一行代码起2200.png (181.03 KB, 下载次数: 47)
15:17 上传
自敲第一行代码起2332.png (80.47 KB, 下载次数: 48)
15:17 上传
  虽然写出了一些简单的游戏,但我想写的远不止这些,我想变强啊啊啊!!!我想写出更好玩更炫酷的游戏,就像当时非常火的游戏《大话西游》,什么代码可以写出这么炫酷的画面,什么代码可以让两个人的屏幕同步出现这么炫酷的画面呢?后来在云大组织的广州skynet大聚会上面讨论实时同步方案时,提到过在高中时就有在思考大话西游的实时同步,大家都笑了,这是一句缓解个人紧张情绪的话,但并不是信口开河。
  《Visual Basic游戏编程21天自学通》介绍了DirectX,看上去使用它就可以写出更酷的游戏,但书中的代码片段无法编译,而且并不是循序渐进地介绍DirectX,挣扎了很久只能放弃。
  在这之后,又学习了一下ASP、Html以及JavaScript,这一方面是因为对网页开发也略有兴趣,另外一方面主要还是没有好的学习资料,有什么资料就学什么。
  当我知道,做游戏应该用C/C++语言的时候,就开始寻找C/C++的资料,那时候没有找到合适的入门书籍,不知从哪里找来一本VC++的编程书,一上来就是MFC框架的消息映射,各种控件等等,让我觉得,C++真的好难啊。
  学校的上机课,我都用来找资料,下载资料。在网上找到了一些简单的C语言资料,开始自学C语言,那时候最最让我头疼的就是指针了,听很多人说指针很难,所以在这方面下了不少功夫。初步掌握了C语言之后,接下来开始学习一本《C语言游戏编程从入门到精通》,虽然没让我精通,但还是跟着写了一些简单的小东西出来,学到了不少古董级的知识,例如如何用图形模式调用哪些系统中断来绘图,这些大概是最古老的像素游戏的开发技术了。
  学生的时间是最多的,上课的时间,脑海里想的都是游戏编程,偷偷地看着编程书籍。高中三年过得很快,转眼就到了高考。像我这种不爱学习不认真上课的人,自然考不出好的分数,那时候对未来的憧憬大概就是,如果考得不好,那就在一家小网吧里面当当网管,修修电脑,继续这种自学编程的日子。最后高考虽然没考好,但还是考上了位于韶关的一所没有什么名气的大专学院,在那里,由于佛祖的庇佑,我的技术迎来了一个飞跃,并结识了不少益友。
  大学之路
  高考之后的暑假,决定系统地学一下C++,由于家里拉上了宽带,所以极大方便了我找资料,在网上找到了孙鑫老师的C++视频,通过这套视频对C++、面向对象和MFC,都有了一个初步的了解,但对很多概念都还是一知半解。
  暑假很快就过了,2008年的九月份,来到了学校报到,饱受了缺乏资料之苦后,看到大学图书馆中海量的计算机书籍,仿佛几年没吃肉的人看到一盘美味的红烧牛肉!这次的兴奋仅次于得到生命中的第一台电脑。在图书馆中找了一些VC++21天自学通之类的书籍,巩固了一下C++基础,以及如何使用C++来开发游戏的《VC++游戏开发》一书,读完后尝试着用了GDI写了一些游戏,例如《坦克大战》(这个应该是第二学期做的)。另外也巩固了一下VB的基础,使用VB做了一个简单的系统管理工具,有点类似优化大师。
自敲第一行代码起3724.png (396.54 KB, 下载次数: 41)
15:17 上传
自敲第一行代码起3856.png (224.59 KB, 下载次数: 44)
15:17 上传
  由于高中阶段的努力,让我自认为在同龄人中的技术已经是很不错,开始有些骄傲膨胀的时候,蚊子和志仔的出现狠狠地打击了我的“嚣张气焰”,学无止境,一旦满足于当前的技术,那便是逆水行舟不进则退。
  蚊子并不是我们学校的,是一位大学同学的高中同学,同他一见如故(其实那时候尚未见面),但相似的经历,对技术的热爱,让我们有很多的共同语言。蚊子和志仔都是从高中便开始自学编程,并且学得比我好得多,大一时蚊子已经制作了不少看上去还不错的软件作品,对游戏外挂也略有研究,蚊子推荐给我的《Windows游戏编程大师技巧》,让我受益匪浅,后来此书成为了少数几本我反复翻阅多次的书。《C++Primer》和《EffectiveC++》是另外的两本,通过这些比较经典的书,我慢慢理解了C++和VC++的区别,面向对象、泛型。
  志仔是一个超级邋遢的人,发型杂乱,每次见他都穿着拖鞋和大棉袄,然后挂着一条鼻涕。但很多时候看上去越邋遢的程序员越牛逼,大一的时候他就已经在研究木马之类的东西了,不是简单地使用工具,而是开发木马,终端控制,屏幕传输,视频压缩等等,都是他自己做的。对于php等网页编程,他也颇为擅长,对于OpenGL和一些图形学算法也有研究,这两个家伙都自己写过操作系统(当然,不是大一的时候),毕业之后,他们变得更牛逼了。受志仔和凯文米特尼克的影响,那时候花了一段时间玩了玩黑客,但仅仅只是停留在表面,玩了一段时间发现,编程才是王道,于是丢下手上的黑客工具包,继续回到编程的正道上,有牛逼的对手一起前进,路上才有意思,这种相互竞争相互追赶的感觉非常地美妙。
  大学前期基本都是围绕着C++游戏开发学习的。在大一的第二个学期,接触了汇编语言,这是一种与之前的语言完全截然不同的语言,需要运用新的思维方式,应该算面向寄存器编程,看了一些汇编教程之后,自己调用各种中断,用汇编写了一个打飞机的小游戏。在后面接触了面向对象的思想之后,就渐渐把汇编忘干净了。在五一的3天假期中,准备了泡面在宿舍闷了3天时间,把之前没看完的孙鑫视频看完了,初步理解了C++的类、MFC、多线程、网络编程。并制作了一个内网聊天工具,在网上断网之后可以和其他宿舍的同学聊聊天。
  从大学开始就总是给自己制定着一堆完不成的学习计划,因为不想让自己有借口停止学习。特别是寒暑假,回家的行囊中总是塞满了计算机的书。
自敲第一行代码起4987.png (622.62 KB, 下载次数: 43)
15:17 上传
  大二之后,我渐渐被两位大牛甩在了后面,因为认识了我现在的老婆,这是一段一波三折的复杂故事,这里就略过不谈了。虽然学习的时间少了很多,但大二这一年还是看了不少书,例如C++Primer、EffectiveC++等等,对C++的理解上升了一个层次。DirectX3D相关有Windows游戏编程大师技巧,精通DirextX3D图形与动画程序设计、DirectX9.03D游戏开发编程基础等等,OpenGL相关的有OpenGL游戏编程、Nehe的OpenGL教程以及计算机图形学等等,对3D编程的理解又上升了一个层次,计算机图形学一书介绍得非常深入,如果完全理解了此书的内容,几乎可以不依靠OpenGL和D3D手动实现一个软渲染3D引擎。另外由于课程需要,还系统学习了Java语言,看完马士兵的Java视频,非常过瘾,顺带学习了一下设计模式,感觉对面向对象的理解又上升了一个层次。如果说大一学习的是如何将代码写对,那么大二学习的更多是如何将代码写好。
  除了看书之外,大二还做了一些兼职,例如在勤工俭学那边帮忙送桶装水,送一桶水大概能赚5毛钱。与这种苦力活比起来,赚大钱的脑力活更适合我,辅导员给我和志仔介绍了一份兼职,维护一个PHP门户网站,每个月两三百的收入在那时看来已经颇为丰厚了,做这份工作也学到了蛮多东西,例如mysql数据库,还有网页抓取,正则表达式等等。
  除了看书和兼职之外,另外还做了一些小玩意,例如用自己写的简陋的OpenGL游戏引擎做了个3D的坦克小游戏(3D模型文件的加载是自己在官网研究这种文件格式,然后手写的一个模型文件解析和渲染类),另外还学习了生命中的第一个游戏引擎——HGE,在七夕的这天花了一个上午用HGE制作了一个《鸭子下楼梯》小游戏送给了老婆。其他还用Java、VB、C++写了一些乱七八糟的软件。
自敲第一行代码起5900.png (242.63 KB, 下载次数: 38)
15:17 上传
自敲第一行代码起6032.png (197.14 KB, 下载次数: 50)
15:17 上传
自敲第一行代码起6165.png (249.22 KB, 下载次数: 45)
15:17 上传
自敲第一行代码起6298.png (142.9 KB, 下载次数: 44)
15:17 上传
  大三时,编程基础勉强还算可以了,对C/C++掌握到一定程度之后,学习其他语言都非常快。大三只在学校待了两个月,然后就提前出来工作了,这两个月里就做了两件事情。参加一场比赛和一场考试,学期开始时辅导员跟我说让我去深圳参加一个省里面的比赛,有很多学校参加,这让我很兴奋,大一入学时,就听到老师说某某学长在广东省的XX比赛中拿到了三等奖,那时心里满是羡慕和崇拜,而现在轮到我了。
  我决定用HGE制作一款塔防游戏,和老婆组队(老婆是美术),第一个星期简单地学习了Lua和Delphi,然后用HGE搭建了游戏框架,使用Lua编写游戏逻辑,另外再用Delphi写了一个简单的游戏编辑工具,写到差不多的时候出现了一个重大事故,硬盘坏了,无法修复,是希捷的固件门,于是只能重新写过,幸好前些天去机房的上机课把代码拷过去看过,损失并不算太严重,但从此再也不敢用希捷硬盘了。
  现在看来当年的这款作品实在是非常糟糕,但凭借着上台演说时的对答如流,侥幸拿了一个一等奖。如果志仔也来参加的话,一定可以拿出一个比我好很多的作品,但他总是神龙见首不见尾。比赛之后开始潜心准备软考,2010年的软考还是蛮难的,考的内容特别广,包括什么编译原理、网络等一大堆东西,考试时发现蛮多成年人来考的,学校参加这个考试的人不多,通过的就更少了,侥幸通过之后,就开始准备简历,打算到广州或深圳好好历练一番。
自敲第一行代码起7023.png (342.9 KB, 下载次数: 47)
15:17 上传
自敲第一行代码起7156.png (128.89 KB, 下载次数: 43)
15:17 上传
  美好的大学生活就这样提前告一段落了,人总是在失去之后才懂得珍惜,工作之后回过几次母校,每次回去,看着熟悉的场景,回想起和同学朋友们在学校渡过的时光,心中总是百感交集。大学生活结束了,但另外一段苦逼的故事即将开始......
  前面五年算是一帆风顺,而接下来的经历,则充满了挫折与失败。
  第一份工作
  由于学历不高,还没毕业,经验不足让我吃了不少闭门羹,在大三刚开始时就开始在网上投放简历了,但基本是石沉大海。虽然没有面试邀请,我还是独自一人来到了深圳,因为对深圳这个城市很有好感(因为前面来深圳比赛的经历)。为了得到面试的机会,我不惜跑到人家的办公楼去霸王面,可惜并没有获得面试的机会,但现在回想起来,直闯人家的办公楼要求霸王面的时候,还是蛮有魄力的,虽然没有拿到面试机会,但年轻人就该如此,想做的事情就放胆去做,不要逃避,不要让自己后悔。
  初来深圳时,已经在深圳做了几年游戏开发的梁师兄对我很是照顾(过来深圳比赛时认识的),在深圳晃荡了一周之后,终于否极泰来,接到了两个面试通知,面试的过程很顺利,也学到了不少东西,两边的面试官都对我挺满意的,拿到了一份转正后3K的3D客户端开发Offer和一份试用期4K的C++服务端Offer,于是我选择了后面的那份Offer,除了因为薪资高些之外,上班的地方在师兄附近(后来住的地方也在师兄附近)。
  在工作的第一年里学习到了非常多的知识,网络编程和Linux服务器开发是我从未接触过的,几乎是从入门到熟练掌握服务器开发,这段时间的进步比以往任何时候都要快。在入职之前BOSS就给我描绘了一下美好的未来,C++服务端这个部门现在就你和另外一个工作一年的程序,但是马上会有3位经验丰富的大牛入职,其中有超过10年经验的大神,而且我们还有一位非常强力的技术支持——于彤,来自博雅的服务端大神,他为我们提供了一套高并发的服务端底层框架,虽然他只是偶尔来客串一下,但却给了我非常大的帮助,也很大程度上影响了我,他的话不多,但每句都很受用。在认识的人中他的技术几乎是最好的,但也是最谦虚的,他的头衔是架构师,但他说他只是一个程序员。
  首先复习了网络编程的基础,并将其搬到linux上,这是我把linux玩得最溜的一年,在于彤的指点下看完了《APUE》《Unix网络编程》《TCP/IP详解 卷一》等著作,大学时看《TCP/IP详解》如读天书,但在了解网络编程之后再看这本书反而津津有味,下班之后没有其他事情,独自回到白石洲的农民房里就是看书。为了解答疑惑、解决问题而学习比起普通的系统学习效率要高得多,因为目标非常明确。
  在工作中还了解了sql以外的nosql数据库,如memcached、redis、mongodb等等,让人大开眼界,在于彤的指点下,自己依葫芦画瓢用epoll+单线程非阻塞的模式写了一个简单的服务器框架,用这个框架实现了一个负载均衡的服务器,于彤看后赞赏有加,跟我重申代码要简洁,这个词深深刻入了我的脑海里。那时写的服务器能在数万并发连接的生产环境中稳健运行,是一份非常宝贵的经验,像什么远程调试,core和日志的分析,性能瓶颈分析也是那时候总结下来的经验。
  后面在读过于彤的底层框架、memcached和libevent等开源代码之后,自己又写了一个开源的迷你服务器框架,之后包括现在的项目,用的都是这套框架在开发。如何设计分布式的服务器架构,来保证服务器的可扩展性,保证每台服务器的功能单一简洁,满足一些跨网关的实时转发的交互需求等等,这又是另外一份宝贵经验。一个靠谱的后端程序员需要拥有能够解决各种问题的能力,与前端程序员不同,后端程序员更多是靠经验堆起来的,没有经验的后端程序员连可能会遇到什么问题都不知道。
  后端主程
  在公司待了一年,只为公司的一个页游开发了一个PVP系统,之后由于没有项目做,闲得发慌。由于和主程相处的不是很融洽,所以也就打算离开了,他的脾气火爆,不尊重人,并且不喜欢承担责任,在项目中解决了他的不少BUG,例如死循环、内存泄漏等等。记得他曾使用strlen来判断一个结构体的长度,向他指出这个错误之后,他跟我扯我不懂操作系统内核实现的原理,于彤知道后笑了,说那你让他讲讲操作系统内核是怎样实现这个原理的。火爆脾气的主程去到其他公司之后,听那边的朋友说,他的火爆脾气一点没改,并且还掌握了使用挖掘机挖坑的高级技巧。
  过完年,部门发生了巨大的变化,C++开发部的两个大神就离开了。本来我也打算离开了,拿到了Double薪资的Offer,但由于是做Java,心里并不是太愿意。然而在准备提离职之前,公司让我做后端主程负责一个新的MMO手游项目的后端开发,我一下子就来精神了,这显然比写Java要好得多,这可是领导对我的信任啊!而且如果去新公司的话,我上班得多踩10分钟的自行车吧。开新项目的同时,新的血液也注入了进来,有3个小伙子进入了我们部门,其中的穗智小师弟后来成为了我最得力的助手,但有一个小伙子表现不佳,怎么带都没带好,后来他转行去做测试了,主管问我,他不是我面试的吗?他是怎么通过我面试的?我说面试的时候,我出的各种题目他都答得很好啊,其他人都没答对,就他答对了呀。直到前几天想起这个问题才恍然大悟,面试时是在他们的培训机构面试的,一群人在外面轮流面试,只准备了一份面试题,前面的人答错了,我都会跟他们讲解一下,估计最后一个进来的他,已经了解了所有的面试题......
  于彤说主程并不是要自己成功,而是要帮助下面的每一个人取得成功,这样才是成功。所以后面招了一些新人进来的时候,我总会花比较多的时间进行培训,当大家都能独当一面的时候,主程也就轻松了。磨刀不误砍柴工,帮助其他人进行提升,也是磨刀。新项目的后端比较简洁,人也不多,开发进度也是稳步向前,但前端的进度看上去颇为糟糕,起码从给我看到的一些代码来看,算是耦合性较高,可读性较差的代码了。构建在这样代码之上的程序,BUG自然也是颇多,这个做不了,那个无法实现。在这个项目中我在技术上并没有多大的提升,只是默默地攒着主程、管理的经验值,包括如何规划分配任务、沟通传达、如何上政治课、如何给他们打气加油、碰到问题帮忙解决等等。虽然是初任主程,但秉着负责的态度,基本上保证了后端的开发进度稳定快速。
  这一年因为总体上比较悠闲,所以业余时间自学了一下Irrlicht和Ogre等3D游戏引擎,翻译了Ogre的初级和中级教程,CEGUI的相关教程以及PhysicX物理引擎的官方文档,并用OpenGL开发了一款物理冒险游戏《小铁蛋历险记》。在差不多年底的时候,还和师兄使用Cocos2d-x一起开发了一款ios手机游戏。
  然而又是过完年,项目组发生了巨大的变化,项目经理、主策、客户端程序纷纷离职,然后又空降了一波人过来,原先写的代码全部推翻,使用新的后端主程带来的框架,项目重新开始...。新的后端主程也是一个经验丰富的程序员,带来了一套Windows的MMO服务器框架,什么东西都是现成的,需求大部分都是在这套框架上稍微改一改就做出来了,有点类似所谓的换皮,复制粘贴成为了最常用的开发技巧。但我并不喜欢做这些工作,也不喜欢开发Windows的服务器,与Linux相比性能要糟糕很多,在这里完成了一些简单的模块,吸收了框架里的一些经验之后,我提了离职。
  这是一次裸辞,因为我和一个美术同学(我称他为淡总)使用Cocos2d-x一起开发一款病毒塔防游戏,想离职了好好把这款游戏做好,业余时间开发游戏还是蛮累的,但这款游戏是我目前为止做过最棒的游戏了,有强力美术的加盟就是不一样。这次辞职并没有成功,改为了请两个月的假期,假期里基本将游戏的代码写完了,还接入了ShareSDK,但是淡总怂了,因为后续要制作的各种关卡需要花费的时间太多了,从关卡的设计,到关卡中每个地图的绘制,再到数值的调整,这些看上去还是需要一个专业的策划才能搞定,于是这款游戏被搁置了。之后淡总提议用这套美术资源开发一些其他的不需要关卡的游戏,不要浪费,于是我们使用这套资源开发了病毒射击和病毒消除小游戏,这两个游戏都做完了,但是玩起来感觉很单调,于是病毒射击又改成了病毒射击塔防,在病毒射击的基础上增加了很多新元素,设计了各种地形,各种道具,看上去游戏的可玩性增强了很多,但最后又回到了和病毒塔防一样的问题,关卡、场景、数值.....结果这些游戏一个都没出来。
自敲第一行代码起10772.png (399.16 KB, 下载次数: 48)
15:17 上传
自敲第一行代码起10905.png (393.89 KB, 下载次数: 49)
15:17 上传
自敲第一行代码起11038.png (358.2 KB, 下载次数: 48)
15:17 上传
  在这些小游戏的开发过程中,总结了不少经验,那时Cocos2d-x刚刚兴起,资料还很匮乏,于是有了编写Cocos2d-x书籍的念头,小游戏不搞了,那就将Cocos2d-x积累的经验写成书吧。
  U3D主程
  结束两个月的假期回到公司,就开始了打杂,这时手机游戏和手机游戏引擎Unity3D、Cocos2d-x正是非常火热的时候,BOSS希望搭建一套通用的Unity3D底层框架,把游戏的规则抽象出来,每开发一个游戏都只需要继承一些类,然后实现类里面的一些接口即可,这样就可以很快的开发一款新游戏。但我完全没有接触过Unity3D,多次的开会讨论都没有得出一个好的结果,因为这种框架很虚,如果说有这样一套框架的话,那不就是Unity本身吗?最后只是用C#的委托实现了一套消息机制底层,另外由于原先U3D的网络底层实在是太糟糕了,根本无法重用,于是实现了一套U3D通用的网络底层框架,代码非常地简洁易用。后面这套消息机制和网络底层被应用在了公司的所有U3D项目上,MMO手游项目的新主程接手项目的时候,直接推翻了所有的代码,只保留了这套消息机制和网络底层,再后面一些这套消息机制和网络底层也被应用到了不少其他公司的项目上了,然而在代码中关于作者和日期等注释信息,却被删掉了......这种感觉就是,我写的东西,变成了别人的了,再跟我没有任何关系。
  编写框架并没有花费我太多的时间,但为了设计好,为了简洁好用,我投入的精力却不少。业余时间仍然是和淡总他们一起开发着病毒系列小游戏。公司的一个主策建哥很有想法,很能忽悠,在他的忽悠下我和穗智小师弟也帮他开发了一些小玩意,穗智帮他开发了一个看美女图片的应用,穗智拿到建哥整理给他的性感美女图片时,穗智吐槽了建哥“这样的图片我百度可以随便找到一堆”,都是一些普通的泳装美女图片,这款手机软件的功能,就是一张张地翻阅这些图片,30张之后的每10张会有一个密码。建哥打算回老家卖低端的安卓机器,顺便推销这款软件,当用户需要看到心痒痒的时候,密码输入框弹出来了,然后用户就要带着手机过来找他,交钱之后,建哥偷偷地把密码输入进去,就是这么一个商业模式,建哥说靠这款破软件,他一年就可以进账100万,虽然最后这款软件一份都没有卖出去,但建哥混的要比我们好得多,我还是主程,他已经是四个轮子的CEO了。
  另外一个独立开发手机游戏的小团队邀请我加入,他们策划美术程序齐全,但我没有答应,经过了反复的游说,我答应帮他们用Cocos2d-x搭建一个框架和基础的Demo,仅仅是友情协助。在开发的沟通过程中,感觉并不是很靠谱,因为游戏不好玩,美术不好看,很多东西反而要我去催。Demo如期交付了Demo,一段时间之后,这个团队解散了,因为在开发的过程中有人还去接外单,当这个团队解散时,项目的进度仍然停留在我交付Demo的那一刻。这个团队的解散给了我很深刻的印象,要么不做,要做就全力以赴,兼职开发的这种小团队,一个拖后腿全部完蛋!每个人都要有很强的责任心,对自己做的东西有强大的信心,主动往前才行,如果是由一个带头的推着整个队伍前进,这样是走不远的。不久之后,我和淡总的病毒游戏也告了一段落,大家都太累了,病毒系列的几个项目的代码沉睡在了硬盘上的某个角落。
  接下来学习了一下U3D,发现U3D这个引擎比Cocos2d-x成熟的地方太多了,了解了各种更加成熟的理念,C#这门语言用起来也非常爽快。我开始作为U3D主程负责一个项目,这是一款局域网对战的项目,类似一个游戏平台,内部可以嵌套很多个小游戏,公司已经做了一年多,已经做烂了,原项目组的程序都跑去MMO的项目组了,于是从新招了2个U3D客户端一起捣鼓这个项目。项目的代码实在是非常糟糕,各种不规范,BOSS希望我在这个基础上继续,然而我选择了推翻重构。因为项目的业务逻辑都写到了我的网络底层框架里面了(像这种东西就该做成库,不然他们改),原本这款游戏是可以单机和局域网对战,BOSS希望可以加入广域网对战的功能,但广域网对战暂不开发。我和两个小伙伴花了2个多月的时间,只保留了原有的美术资源,所有代码全部重写,重新设计。并实现了一些新的功能,完成了这个项目!重构之后的项目代码简洁,耦合性低,巧妙使用了消息机制,完成了单机版本之后,只花了1~2天,就把所有的小游戏实现了局域网对战,再花上少量的时间,我们可以很轻松地实现广域网对战。虽然开发过程中换了3次人,来了又走,但我们还是按时完成了任务,最后打包的那天,我们好像加班到了快2点,这是加班的最高记录。
  最后,这款游戏在商务阶段,没有了下文,又是一个无疾而终的项目,而这些绞尽脑汁写出来的代码,又在硬盘上的某个角落,沉睡了。
自敲第一行代码起13604.png (224.02 KB, 下载次数: 44)
15:17 上传
自敲第一行代码起13737.png (281.72 KB, 下载次数: 45)
15:17 上传
自敲第一行代码起13870.png (189.62 KB, 下载次数: 49)
15:17 上传
  临危受命
  项目失败之后,又有去意,但此时已经差不多是10月份了,想着过完年再说吧。离职的主管介绍了一份不错的兼职,开发一款Cocos2d-x游戏,有点类似愤怒的小鸟吧,穗智小师弟跟我一起接了这个单子,大概花了3个月的业余时间比较轻松地完成了这款游戏,期间搭建了一个不错的物理框架,设计好,代码简洁,开发效率自然高。游戏的美术和关卡设计都挺不错的,我们签了一份5万块的外包合同,然而游戏做完之后我们只拿到了4万块,因为最后的一万块是要游戏上线之后才给,上线到Appstore时由于某个原因被打回来,然后这家公司就倒闭了......这个项目的代码又在硬盘上的某个角落进入了沉睡。
自敲第一行代码起14859.png (371.65 KB, 下载次数: 59)
15:17 上传
自敲第一行代码起14991.png (380.74 KB, 下载次数: 44)
15:17 上传
自敲第一行代码起15124.png (322.1 KB, 下载次数: 42)
15:17 上传
自敲第一行代码起15256.png (306.4 KB, 下载次数: 40)
15:17 上传
  在接外包之前,公司又开了一个新项目,这是一款精简的多人在线大富翁游戏,主要是山寨一款PC上的大富翁,我们都觉得这款游戏很好玩,把它搬到手机上肯定有戏。于是我作为后端主程开始了这款游戏的后端开发,当前端还没出Demo的时候,后端已经完成了复杂的游戏逻辑,例如各种随机事件的触发,并做了一个简单的文本界面客户端对服务端的逻辑进行了测试。大富翁的后端逻辑不同于一般的后端,一般是一个请求一个响应,但大富翁的一个请求可能触发的事件是不一定的,事件的流程也会随着不同的环境发生改变,并且中间有可能导致玩家之间的复杂交互。游戏的逻辑完全跑在后端,前端只需要执行少量的显示逻辑即可。由于进度超前,所以也有足够的时间完成外包项目。
  到了发Demo版本的时间,前端的版本问题很多,延期了一两周还是没能顺利给出版本。由于突发了一些我们并不知道的紧急情况,经理对这次的延期有很大的意见,并决定亲自操刀,他仔细阅读了前端的代码,并对一些代码进行了删改,对前端的代码提出了很多疑议,并整天坐在前端小伙伴旁边看着他们写代码,要求每一行代码都写上注释,前端几乎停止了开发,每天都在写注释。游戏也已经完全跑不起来了.....
  在前端小伙伴们奄奄一息的时候,经理找到了我,想让我把前端带起来,我一听吓了一跳。原计划是年前出一个Demo版本,年后一个月内出一个Alpha版本,经理希望我按照原计划把版本赶出来,在会议室中几个人对着我猛灌鸡汤,仿佛我能推平山岳,扛起这一切,把这个项目带向成功。而如果我拒绝,这个项目就进垃圾桶了,难道我做的项目又不能上线了吗???
自敲第一行代码起16817.png (289.37 KB, 下载次数: 46)
15:17 上传
  内心挣扎了很久之后,终于把这碗鸡汤干了。干完鸡汤之后,我大概向经理提了10个条件,包括不允许经理再看前端代码,以及坐在前端程序身边看他们写代码。砍掉了一些不必要的功能。给前端同学放一天带薪假放松一下。给我一笔经费,在过年的时候将一些完不成的任务打包,明码标价,外包给前端程序去做,这些任务量并不繁重,但价格还算比较不错的,这样即可以在过年期间让项目前进,又可以避免前端同学年后回来对代码生疏了,需要重新花时间熟悉代码。各种讨价还价之后,雷厉风行地扛起了前端项目的开发,接下来Demo和Alpha版本都按照原计划完成了。虽然名义上是前后端主程,但实际上后端的工作已经完全丢给穗智小师弟了。
  版本完成之后,又是各种新需求和周边系统,包括AI和托管等麻烦的功能,大概是五月份左右,腾讯的天天富翁上线了,我一看,跟我们的游戏一样,这对整个团队的打击都很大,而过年前,经理就已经提前知道腾讯会代理这款游戏了,也就是这个原因,他才亲自操刀。游戏接下来要做的功能已经不多了,但游戏的前景却是一片迷雾。之后开始对项目的前端框架各种优化总结,沉淀了一套通用的UI框架、资源管理框架以及新手引导框架。沉淀下来的框架简单易用,而且靠谱,这归功于长期基类下来的设计经验,以及在使用的过程中不断地调整打磨,还有对模糊的技术点的彻底研究,只有彻底搞清楚了,才可以更好地使用它。
  由于版权的问题,这个游戏最终还是没有上线。这些代码再次沉睡在了硬盘中。所以说,山寨并不靠谱,创新才是王道!
自敲第一行代码起17757.png (290.32 KB, 下载次数: 47)
15:17 上传
自敲第一行代码起17890.png (362.39 KB, 下载次数: 48)
15:17 上传
自敲第一行代码起18022.png (251.06 KB, 下载次数: 45)
15:17 上传
自敲第一行代码起18155.png (240.51 KB, 下载次数: 42)
15:17 上传
  又是一段空闲期,我和淡总商量了一下,决定快速开发一款小游戏,于是我们开发了一款躲避类的游戏,类似宫爆老奶奶,为了能吸引到眼球,我们决定尝试一下色色的主题,也就是卵子躲避精子,游戏命名为《避孕达人》,经过精心的策划之后,这款游戏上了一些安卓平台。几次优化之后,我们都觉得可玩性还可以,打算就靠卖点广告来赚钱,结果到现在就赚了21块钱的广告费,其中的20块还是我自己点的广告......
自敲第一行代码起19235.png (129.87 KB, 下载次数: 35)
15:17 上传
自敲第一行代码起19368.png (208.82 KB, 下载次数: 43)
15:17 上传
自敲第一行代码起19500.png (134.62 KB, 下载次数: 44)
15:17 上传
  一段有趣的面试经历
  接下来朋友推荐了一个Cocos2d-x的面试,面试官并不是很友善,大概就是这种“呵呵,你很牛逼是吧?”,然后就试图在面试中把我难倒,问了一些主观性的问题,两个人的思路根本就不在同一个频道上,例如我说搭建U3D的网络框架,他说U3D的网络底层框架有什么好搭建的?不就是个连接连上去就可以了嘛。我说提供对socket的封装,异步请求,自动处理半包粘包,将tcp流分割为完整的包最后传递到客户端主线程的一个服务处理对象中进行处理。答完看上去他对半包粘包这些好像一点都不知道,追问了我一句,那你是如何处理TCP丢包的呢??然后我就不想讨论这个话题了,TCP的定义讲得很清楚,TCP提供可靠连接,TCP底层实现是可以保证不丢包的,我反问了一句你们又是如何处理TCP丢包的呢?他说很简单啊,如果对方没收到就循环发送,估计到了这里面试官已经自动将我判断为没有处理TCP丢包经验的程序员。例如说到将第一个U3D项目代码推翻时,他问我为什么要推翻,我说因为代码耦合性太高了,游戏的业务逻辑都写到我的网络底层框架中,他说那说明你的框架设计得很糟糕(这个功能完全不需要写在框架中,框架的接口足够实现这个功能的,也许是这个框架无法处理TCP丢包,所以真是糟糕啊)。例如问了我一个特别泛的问题,大意是如何设计一个框架,我说这个要根据需求来啊,你可以现场提需求,我来设计,他坚持让我回答这个问题,我也只能回答一些比较泛的答案,然后他说不对,我问他那正确答案是什么?他说是抽象和封装......要不是看在我朋友的面子上,我真想抽他!
  本来我想通过这次面试,来积累点面试经验,补充一下自己的不足,没想到会变成这个样子,接下来他开始问了我一些Cocos2d-x和Box2d的问题,我有气无力地回答着他,扯了这么久,水都不给喝一杯,我都困了。反正我也不想和他共事,又学不到什么新的东西,就想草草结束这次面试了。接下来HR妹子和他一起来跟我聊,HR说他们的技术对我已经有了一个了解,虽然我了解的东西挺多的,但都不精通。嗯,我点点头,我确实离精通还很远。HR接着说到我的Cocos2d-x经验比较欠缺,还没有到达一定的水平。我愣了一下,刚刚明明Cocos2d-x相关的问题一个都没难倒我好吗,并且有些问题我还提出了比他们现在更好的实现方式,我已经用Cocos2d-x做了四五个游戏了,我那本Cocos2d-x的书也已经完成了第一次重构了,引擎的代码更是读了N遍,你可以说我其他的什么不精通,但你就算问我Cocos2d-x引擎底层的渲染流程我都可以给你详细地说出来。我真想拽拽地对面试官说一句,那就请你随便问一些Cocos2d-x的问题,来难倒我好吗?但我克制住了自己,因为没有意义,点了点头说道,确实对Cocos2d-x不怎么熟悉。然后他们问我薪资要求,我说了一个14K。HR说我们觉得你不值这个价格,11K怎么样?我点了点头,嗯,确实,如果我对Cocos2d-x熟悉一些的话,应该会好一点。后来HR打电话劝我过去,说面试官觉得我还是可以培养的,转正之后,如果你表现好的话,还是有可能拿到这个薪资的,我婉言谢绝了。
  后面,我带过的一个小师弟意外地去到了这家公司面试,被格外器重,我不知道当时的面试官还在不在,只知道他们给小师弟开了12K。
  Cocos2d-x主程
  在2014年的年底,公司又开了一个新项目,是一款实时横版竞技塔防手游,我兼任Cocos2d-x主程和后端主程,游戏的进展还算比较顺利,在这个项目中又沉淀了大量的经验和一套好用的框架,踩了Cocos2d-x大量的坑,使用一套通用简单的方案解决了实时同步的错误纠正以及断线重连等等(后面有空会写一篇文章分享一些实时同步的经验),相比起项目刚开始时的设想,经历实践之后的方案更加地成熟。
  和策划们一起用心打磨这款游戏的战斗系统,实现了非常多的玩法,支持策划配置各种特色关卡,例如双方争夺某个要塞,例如护送某个角色到达指定位置等等。各种拥有特殊能力的兵种都可以通过策划配置出来,不需要程序调整代码,类似LOL妖姬的标记,LOL大发明家的安置炮台,还有分身、闪现、传送、魅惑、隐身、召唤、复活、放逐等等一堆乱七八糟的功能,都可以配置出来。游戏关卡中的战斗场景也支持丰富的互动,例如一个寒冰法术打过去会顺带冻住场景后的植物,例如一个火焰爆炸开场景中的植物也会被灼烧,甚至旁边的石块也会被炸飞,这些都可以通过策划配置出来。开发的氛围很好,没有出现推卸责任这样的情况,大家一起认真地讨论着某个功能的实现,怎样能让它有更好的体验。
  开发了一年左右,皇室冲突强势上线了,这意味着我们做不了首款实时竞技的策略手游了,或许会被套上山寨的帽子,或许山寨皇室冲突的游戏会烂大街,从而影响到我们游戏......,所以我们必须把游戏做得更好,比皇室冲突更好!谁说国人就只会山寨?
  通过不断地打磨,关卡副本和PVP玩起来已经算是比较有意思了。直到现在,游戏终于到了最后的尾声,周边系统也基本完善,估计一两个月内就可以发布最终的版本,希望这款倾注了我们大量心血的游戏到时能够顺利上线吧,皇室冲突的成功也证明了手机上的即时策略游戏是大有可为的,如果这样一款有特色、有创意、玩法有趣、注重品质和细节的游戏都能失败的话,我真不知道怎样的游戏才能成功了。(为避免广告嫌疑,现在手上的项目就不详细介绍了,也不上图)
自敲第一行代码起22523.png (396.09 KB, 下载次数: 42)
15:17 上传
  在繁忙的工作中,我完成了第一本Cocos2d-x书籍,这是第三次的推翻重写。每次写了一段时间之后,回过头看之前写的文章,顿时觉得惨不忍睹,必须推翻重写,或者是Cocos2d-x的接口又改了,或者是自己能力的提升推翻了之前的一些想法。总之不想将就,就得重构!就这样断断续续地写了三年多,直到最近这本书终于出版了。虽然希望做到极致,但能力有限,精力有限。中间看着Cocos2d-x的出版物逐渐多了起来,有过停笔的想法,但最终还是坚持了下来,这个过程比想象中要难得多了,但语言组织能力、表达能力都能得到很大的提升,对于要表述的技术点也清晰了很多。写书不易,经常加班的IT人写书更是不易,有了这么一个经历之后,对一些写得不是很好的书籍,我也不会去吐槽它了。大概在项目上线的时候,第二本Cocos2d-x的书也该交稿了。第一本书介绍了Cocos2d-x的基础,虽然是基础,但有很多点还是挖得比较深,例如指针、内存、纹理、渲染等。这些往往是一些初级程序掌握得不好的点,相信对于基础不扎实的同学会有很大的帮助。第二本的内容要比第一本精彩得多,听了网友紫虾的建议,把第二本写成了一本杂文集,深入总结了Cocos2d-x实际开发中的各种技术,例如跨平台开发的相关知识、实时同步游戏的前后端开发、Cocos2d-x的各种调试技巧、Shader、裁剪遮罩、加密解密、分辨率适配、Lua、Spine等等一系列实用的内容。甚至开发了一个类似U3D编辑器一样,可以实时调试Cocos2d-x游戏内容的界面工具,这些内容都是实际工作中一点点总结出来的心血结晶。在征得出版社同意的前提下,接下来会将书中的一些章节发布到博客中。
自敲第一行代码起23523.png (585 KB, 下载次数: 51)
15:17 上传
  当完成书和项目之后,会有一段难得的空闲时间,可以好好陪陪家人,可以好好写写博客,可以好好踢踢球,可以把驾照考了。接下来也许会找一些志同道合的朋友继续做一些独立游戏,也许会好好学习一下如何编写操作系统,或者是研究一下Arduino,或者深入地学习一下算法,这些东西都非常有趣。
  相关阅读:
关注我们官方微信公众号
下载我们官方APP-游戏行
关注手游动态微信公众号
不是程序,没法评价,不过看你这十年生涯,同感慨!
无论什么职业,追求卓越!
看了你的介绍,万分惭愧,我也做了将近两年的服务器主程了,现在仍一无所成,客户端更是一窍不通,感觉自己学得太少啦,哈哈,大神,膜拜一下,客户端,服务器都精通,这个太NB了==
膜拜一下大神,顺便说一下,我也在深圳南山区的白石洲待过2年...还记得第一次看到企鹅大厦的心情..
从2014年底到现在一年多了就轻描淡写了……
这。。。我怎么感觉楼主的路还远的很。。。看下来感觉几个问题:
1,上线项目不多
2,项目规模偏小
3,自拍的技术书籍,明显太新了。。。
我没有资格评价楼主,但是这些是楼主的问题,相信他自己也承认吧。
白石洲我也很熟的,
我泡的第一个妹子就在那住,
一个肇庆妹子。。。。。。。。
同学真好,很用心,我做后端,希望有机会能一起做事,一起踢球,话说我是大力金刚腿,你是铁头功
我也是研发了十年,这是我上线测试版的视频.,想了解更多到我的QQ空间来http://user.//blog/
看好大婶,最后面试那段写得很搞笑哈哈 感觉大神开1.4W太低了把
我们跟丁磊聊了聊,养猪、卖套、做海淘,但年收入过千万,鬼人谈《火柴人联盟2》“做腾讯市值突破5107亿美元 超越Facebook指日XY游戏负责人林彬:页游盘子在收缩,但却依国人游戏黑马《死神来了》关卡设计分析《Game启示录》第五章:谁能证明世界不是一
微信扫一扫关注我们→}

我要回帖

更多关于 steam休闲游戏推荐 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信