你的位置:首页 > ASP.net教程

[ASP.net教程]DOTA与面向对象的编程思想——三层架构,让游戏跑起来


      昨天的《DOTA与面向对象思想(1)》是我人生中的第一篇博客。特别开心,截止目前为止已经有200多人阅读过,有4个人给我留下了评论,在评论中我学到了一些东西。感谢各位的阅读,更感谢留下评论的同学们,谢谢你们没有批评,谢谢你们分享观点。同时,我希望有更多人指出我的错误之处,分享你们的看法。

  今天再次开笔,写第二篇,我的内心有了两种情感,1. 激情满腹,很激动。2. 忐忑不安。激情满腹,是由于会有那么多人看,可能将来会有更多的人看。让我突然明白了blog这个平台,太好了。至少来说带给我一点点成就感。忐忑不安,主要是因为所有关于DOTA和面向对象的东西,都是我臆想的,没有去看过任何大型游戏的编程资料。我只是按照自己的想法去描述DOTA是怎么实现的,用面向对象的编程思想自圆其说,不曾亲身实践。所以大家读来,可只为娱乐。如若误人子弟,罪过慎重,因此忐忑。

  OK,咱们言归正传。此篇题为“三层架构,让游戏跑起来”,先上图。

 

  如图,底层是魔兽1.24e中文硬盘版的各种,我是搞不懂那些文件具体干嘛用的。但是由于学习android,我理解他就像android里边的SDK文件,提供了各种编辑android软件所能够用到的API,包括图形,文字编辑,文字显示,按钮这些可视化的UI控件,以及更多不可见的方法。因此,我认为底层文件中一定存在着一个英雄的类,所有的英雄都要继承这个父类,他有血量、蓝量、移速、攻速等等许多共同的属性。

  第二层,地图,地图是一种可视化的展示了。它调用了底层的许多东西,使你可以阅读各个英雄的介绍,看看各个地方得地形,各个商店有什么物品等等。这让我觉得想Android的布局界面有点像,只需简单的编程,就能够把按钮,文本框等控件展示出来。但此时,游戏没有跑起来,因为主角还没上场。

  第三层,Replay。为什么是replay,不是游戏要通过鼠标键盘实时操作完成吗?我觉得实时操作和replay没什么区别。因为实时操作是你通过鼠标键盘实时控制你的英雄,而replay只不过是已经把你所有的操作记录了下来,然后控制你的英雄,所以你还可以不断回放,和你操作的一模一样。Replay真正的完成了让游戏跑起来,是因为你通过首选、-repick或-random得方式构建了游戏主角(英雄)的实例。这个英雄的实例,继承了底层文件中的英雄的类。但各个英雄的技能不一样,力量成长,智力成长,敏捷成长不一样,还有很多不同。但这都是他们共有的属性,只需要重写对应的方法,就完成了各个英雄的独特化。

  然后游戏进行,你看到英雄在地图上奔跑,在不同的地方放技能,杀人,暴走,拆塔….,推到冰封王座。所有这一切都是你操作你的英雄实例完成的。地图只不过是提供了一个可视化的效果而已,的操作实际上也是不断的调用底层的内容。

  到这里,我更加觉得这个游戏的思想和android的开发很相似,SDK就是我们需要调用的各种API所在的位置。而魔兽的这些底层文件,通过不同的地图,能够展示出不同的游戏,比如Imba,澄海等等。所以,是不是可以编辑一个地图,基于WAR3做一个火枪打小鸟的游戏,我想应该是可以的。

  由此,我又想,底层文件接近2G,也就是无论你是IMBA,DOTA还是如果可以的火枪打小鸡的游戏,都要带着这2G的游戏文件才能玩。这个就没有android做得好,因为最终我们编程完成的那些应用很小,它只需要将有SDK中用到的内容打包成apk,就成了。所以如果可以将war3做一个可开发的API存在,给编程人员提供变成接口,然后可以开发出各种各样的小型游戏,并且打包必需的文件,提供给用户。那时候火枪打小鸟,就不用带着2G的文件,而只是一个几十兆的文件包吧。

  感觉这是大型游戏,走向开源的一个方向,哈哈,纯属臆想,不知所云。

 

  未完待续…