免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 三月廿七
打印 上一主题 下一主题

倡议CUer为 c 语言做点实事,开发属于自己的游戏引擎 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2011-11-25 10:33 |只看该作者
本帖最后由 xhl 于 2011-11-25 10:43 编辑
游戏这块我只是比较感兴趣而已,毕竟电脑入门就是从琢磨游戏开始的。

实际的游戏开发,我只参与过一个棋 ...
狗蛋 发表于 2011-11-25 10:13



你们那个兄弟在MMX上写游戏, 早年都这样做, 因为早年DX不稳定, 性能也不理想。 但用MMX开发一般只局限在2D游戏。

而且游戏大厅, 平台啥的, 现在也没啥技术可言, 那不算什么高级东西, 做过及时通信的都会做, 基本属于游戏附属产品。

现在大部分视频游戏是3D游戏, 3D游戏我还没听说过谁不用DX或者GL的, 何况DX/GL只是对硬件抽象层的封装, 同时暴露了可针对GPU的可编程管线。

程序完全可以透过DX/GL直接使用GPU编程。

我的观点是, 类似LZ这样的, 基本完全不懂游戏, 就喊着要做游戏引擎, 这个太离谱。 对于LZ来说, 如果真的想做游戏, 首先应该选定一款自己喜欢做的游戏

类型, 找份相关工作, 进入游戏行业, 别老觉得自己造轮子可以无视前人的路, 游戏圈里有句老话, 别人做不到的, 不一定是别人愚笨。 然后开始了解相对简单

的游戏逻辑是如何做的, 例如简单的RPG游戏里的移动同步, 碰撞检测, 客户端做啥, 服务器做啥, 逻辑该怎么写等等。 然后在了解图形层接口设计, 如果有物理,

还的学学物理引擎该怎么用, 声效处理, 网络处理, 逻辑跟需求如何解决, 这些都弄过一套了, 你顶多会做以类型的游戏框架, 距离写游戏引擎, 还差很多。


说到现在, 我只是想让这里想做游戏的人明白。

不是不能做, 但要下定决心, 要用相当长的时间蹲马步, 起码要让自己先进入游戏行业, 一点一点的积累, 也许几年后, 你们有这个能力。 但现在绝对这里没人有这个能力。

论坛徽章:
0
42 [报告]
发表于 2011-11-25 10:53 |只看该作者
抛开图形不不谈, 就光游戏引擎, Unity3D是认为是做到相当不错了。 不过他只是能做到中低端游戏产品, 因为效果一般。

但他的工具跟整体解决方案, 已经很强了。 这个游戏引擎是专门针对2d, 轻量级3D单击产品设计的, 非常适合移动产品开发, 他自动跨平台。

最近非常火, 是外行入门的非常好的工具。 有兴趣的, 可以下载一个使用版, 看看他的开发IDE,


这个游戏引擎是一帮韩国棒子开发了近10年做出来的。


另外在说一下, 做2d, 3d游戏, 引擎程序还必须具备一个能力, 就是要对photoshop, 3dmax等工具很熟悉, 否则基本没法做。

不信就看看unity3d的开发工具把, 虽然我认为他已经很简单了, 但如果没做过视频游戏的人, 用那工具还是有些学习成本的。

论坛徽章:
0
43 [报告]
发表于 2011-11-25 10:54 |只看该作者
很悠闲啊!

论坛徽章:
0
44 [报告]
发表于 2011-11-25 10:56 |只看该作者
感觉压力很大!梦想啊!生活,怎么去平衡他!

论坛徽章:
0
45 [报告]
发表于 2011-11-25 10:59 |只看该作者
棋牌游戏跟MMO比并发 唉 看的我真郁闷。
建议大家多玩点游戏,没搞过游戏开发就算了,没玩过什么游戏还在这喊口号。
理想很丰满 ,现实还真的相当相当骨感,另外说一句国内还是有公司自己搞引擎的。

论坛徽章:
0
46 [报告]
发表于 2011-11-25 11:04 |只看该作者
棋牌游戏跟MMO比并发 唉 看的我真郁闷。
建议大家多玩点游戏,没搞过游戏开发就算了,没玩过什么游戏还在这 ...
pself 发表于 2011-11-25 10:59



    完美时空,金山,貌似他们的引擎就是自己搞出来的

论坛徽章:
0
47 [报告]
发表于 2011-11-25 11:14 |只看该作者
至于暴雪的5人引擎组,这对那些只会坐火车的小白,自然是不可想象的。

但,如果你真的自己领导过哪怕只是自己,就会慢慢明白,他们是怎么做到的。



举个很小的例子。

魔兽世界有几万个任务,这些任务五花八门:杀人;杀怪;探索;帮人送东西;寻找道具等等等等,当然还有它们的组合。

任务的结果,也是五花八门:装备;金钱;声望;允许下一步任务;改变“相位”;允许进入下一个区域;甚至是导致某个势力和你交恶等等,当然同样允许组合。

其中,相位要介绍下。它的意思是,玩家的任务完成进度会改变他看到的世界面貌,如各方势力分布甚至地形等等等等。



当国内一个S13程序员洋洋得意于,我们二百人的队伍开发了二十万行代码支持了一万个任务时,暴雪的程序员压力一定很大。他会弱弱的说:我只有能力维护500行代码。

但,他这500行代码,从骨子里体现了DRY原则。
也就是这500行代码,魔兽世界这各不相同丰富多彩的几万甚至十几万个任务,全都可以归一解决:因为它们都是满足某个条件则可见、满足另外一些条件则完成、最后得到一系列奖励。这只需50行代码而已。
至于那些不同的任务完成条件、奖励,完全可以归类,然后用不超过20个函数解决。

——没错,如果让我评估工作量,暴雪那几万甚至十几万个任务的驱动代码,就是500~2000行。
——优秀程序员写500行,菜鸟写2000行。
——先决条件、任务文本、完成条件、奖励,是任务设计者的事;而他们,其实就是在数据库里写一条记录。当然,这可以用某种图形界面解决,而写这个界面,也就是百十行代码的问题。

这就是DRY的威力。


当然,这只是个粗浅的例子。更好的例子有:

暴雪用“技能数据库化”方法,一举解决了10大种族9大职业外加boss、小怪的数千个技能的管理;

星际争霸的主程序只有几十K(这就是一个典型的核心引擎的大小);diablo/diablo2类似。

星级争霸1/2的地图编辑器,都可以支持几乎所有种类游戏的设计;而且这些编辑器很小,可以拷出来当独立程序。

我自己,为国内某知名公司做的配置命令单元测试框架,用配置就是生成/删除对象和改变对象属性的抽象,用大约不到500行代码作为核心,支持了一切已有未有的配置命令。


——事实上,就是3D引擎/GPU,它们的核心功能才有几项?掰着手指都数得过来!

软件设计,要的就是这种四两拨千斤的效果。尤其是核心设计,更是如此。

比如说,老外的开发人员,他们一周只写200行代码(再多公司认为你在敷衍),月薪7000美元以上。
也就是说,一行代码价值接近10美元。

原因就是,代码必须起到四两拨千斤的效果。

这也正是,我之前那位牛X同事,可以两年时间一人重写DX以及网络、服务乃至十几个游戏的核心代码的原因。

——我自己,也有这种寥寥几十、至多几百行代码把核心实现,然后把外围丢给其他人做的严重倾向。
——我把这个,叫做面向规律编程。


只有国内那些做外围的(而且还得比较傻,只会拷贝别人的东西),才可能出现动用几百程序员写出几十上百万行代码的壮观景象。

其实,联系我上贴就会知道。wow的强人们是自底向上、锱铢必较的重用而来的;国内则是拷贝表现,试图自顶向下还原人家的东西。

这种情况下,自顶向下实质就是无设计,或者更坏的,用胡乱设计来掩盖无设计: 你看到魔兽世界有几万个任务;却没看到人家处理这几万个任务,仅仅用了数百行代码;你看到暴雪设计了10个种族9个职业几千甚至上万个技能还每几个月就改来改去,却没看到这10个种族9个职业上万个技能,最终只需300~500行代码便完成了管理。

PS:这个估计,我自己都觉得吓人。但,或许事实反而是,我严重悲观了!!!

因为我自己就做过一个自动线程管理模块,支持动态创建和回收线程,支持自动资源分配和回收,支持以普通函数调用的界面来开启线程……还有若干次要功能,让我给忘了……

这个几乎相当于OS进程管理模块的东西该有多大?
300行代码,其中60%是注释;另外1/5是独占一行的{和}。
没错,搞定这个,只需100行代码。


四两拨千斤,面向规律编程:这就是老外16人能做星际二 自由之翼,同时还包括了重做引擎、写出牛X无比的地图编辑器要卖钱;而国内动辄几百人,只能拷贝一些不伦不类的山寨品,甚至还教出了“20~30个人做游戏就是笑话”的傻子的原因。

论坛徽章:
0
48 [报告]
发表于 2011-11-25 11:23 |只看该作者
至于暴雪的5人引擎组,这对那些只会坐火车的小白,自然是不可想象的。

但,如果你真的自己领导过哪怕只是 ...
狗蛋 发表于 2011-11-25 11:14



    膜拜

确实当人数过多的时候,效率就成问题。另外这些人都是潜心技术好多年的那种,所以其对程序构架的设计等等,不是一般人能达到的。

技术小白路过,希望大牛们多多分享经验,揭示普通人不懂,或者自以为懂的技术真谛。

论坛徽章:
0
49 [报告]
发表于 2011-11-25 11:25 |只看该作者
当国内一个S13程序员洋洋得意于,我们二百人的队伍开发了二十万行代码支持了一万个任务时,暴雪的程序员压力一定很大。他会弱弱的说:我只有能力维护500行代码。

但,他这500行代码,从骨子里体现了DRY原则。
也就是这500行代码,魔兽世界这各不相同丰富多彩的几万甚至十几万个任务,全都可以归一解决:因为它们都是满足某个条件则可见、满足另外一些条件则完成、最后得到一系列奖励。这只需50行代码而已。
至于那些不同的任务完成条件、奖励,完全可以归类,然后用不超过20个函数解决。

——没错,如果让我评估工作量,暴雪那几万甚至十几万个任务的驱动代码,就是500~2000行。
——优秀程序员写500行,菜鸟写2000行。
——先决条件、任务文本、完成条件、奖励,是任务设计者的事;而他们,其实就是在数据库里写一条记录。当然,这可以用某种图形界面解决,而写这个界面,也就是百十行代码的问题。



我不知道你是否做过游戏, 游戏逻辑部分开发主要分数据跟逻辑, 数据往往来源有三种, 一种是玩家输入, 一种是数据库, 还有一种是策划配表。

早期为了解决经常易变的逻辑, 吧可变的部分都参数化, 给策划配, 然后做调试客户端, 程序做完, 给策划调试自己的数值, 结果等。

现在基本都采用脚本化, 因为光把数据参数暴露出来, 还是不过灵活, 所以引进脚本工作, 很多逻辑底层只做个框架, 暴露必要的操作函数跟脚本接口, 然后由策划或者上层逻辑人员来实现这些逻辑

WOW的UI部分, 基本是淋漓尽致的体现了这个思路, 很多好的UI都是玩家自己开发的。

论坛徽章:
0
50 [报告]
发表于 2011-11-25 11:52 |只看该作者
本帖最后由 狗蛋 于 2011-11-25 12:24 编辑

回复 52# xhl


    你这个,就是我之前批评过的,胡乱设计,用想当然的自顶向下设计去模拟别人的东西。



没错,提供接口,提供统一接口;用lua;这些都没错。

但,具体到提供什么接口、如何统一接口、如何和lua配合上,道道就多了。不仅如此,游戏逻辑等等用lua解决是没错;但如何解决,仍然大有讲究。


这就好像,我用配置接口就=创建/删除/改变对象这么一个抽象,然后利用SQL的语义处理逻辑判断(这个判断为我节约了上百行代码),然后500行代码就解决了一切已知、未知的配置命令。
而且,这500行代码里还有至少50%的注释和1/5的{和}


你可以来抄我的接口甚至我的架构,你可以从里面扒代码去用;但,只要我删去注释,那么,除非完全照搬我的实现,否则最后你肯定得用2000行甚至5000行代码才能把东西实现。
——当然,你也是用配置接口就=创建/删除/改变对象这么一个抽象。
——不然的话,就是过去那样,无数人写了无数代码(至少几万行),而且还将随着新事物的出现,写出更多代码。


因为,你不知道我的判断藏在SQL语义里;你不知道我如何看待配置接口命令;你不知道我抽象接口的原则和思路;你不知道我整个系统是如何有机结合起来、最大限度DRY的(比如,为一个保护环开启某某功能、然后为设置这个功能的参数,如何放进整个设计);你更不知道我无时无刻不在应用的“面向规律编程”思路,实际都指向了哪些规律。


最终,有些人总是能用几百行代码就清晰准确的实现纷繁复杂、看似不可能完成的工程(比如wow的10大种族9大职业几千种技能,而且技能都还可以用天赋、雕文、buf/debuf等等改变:这要让庸人写,那还真是200人搞几年都搞不出来);而有些人,却总是能把简单的事情做复杂甚至变成不可能任务。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP