蝶恋花答李淑一的意思:有关网游编程的一些问答

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 02:38:23

有关网游编程的一些问答

Posted by 赖勇浩 on 六月 19, 2010 · 7 条评论 

赖勇浩(http://laiyonghao.com)

引子

今天一个朋友,主持开发过一个目前有几百万用户的SNS,向我问一些关于网游编程的问题。后来我觉得这个对话其实挺有代表性的,就我个人而言,类似的对话我已经做过不下十次了,所以这次我决定把它整理出来,如果有对 webgame 或 game编程感兴趣的朋友,可以参考一下。以下回复仅代表个人对网游编程技术的了解,可能有错误或偏颇,不可当作“权威性质的参考资料”。


正文

问:我最近对做webgame比较有兴趣,有没有什么可以参考的资料,我想学习下,以对有个了解。
答:额……我手上没有。我做 webgame 是因为我之前做的是泡泡游戏(http://popogame.163.com),泡泡游戏类似于 qqgame,我觉得可以把它搬到 web 上,所以就动了手,如果没有这个经历,我可能也不知道怎么去弄。

问:我现在就是不清楚游戏怎么做的,从业以来,没接触过。感觉和做网站不一样,交互性貌似不同。
答:经验不重要,只要你想做就可以做了,比如你就想着你要做一个“拳头剪子布”,然后分析应该怎么做,然后做一个出来……就可以了。

问:“拳头剪子布”和echo socket好像一样的吧:

答:不一样吧,echo server只响应一个连接,而拳头剪子布是两个连接之间的行为,而且你还为为它们行为做个仲裁。还包括怎么把这两个连接配对在一起,无法配对的时候怎么办,其中一个强制脱离配对怎么办……这些问题越问越多,你就越清晰。但最好不要有问太多“为什么”的习惯,尽快动手去尝试,会更好。因为做一个拳头剪子布对你来说,失败的成本实在太低,完全可以什么都不想,然后去做……做出原型,然后不停地抛弃原型,然后你就上道了……

问:现在业内评价一款webgame的技术点有哪些?
答:这个不清楚。

问:换句话说,那些地方容易出问题?
答:webgame 这个领域的技术日新月异,发展无比迅猛,而且 Web 领域的和 Game 领域的人都同时进入这个新兴区域,产生了技术碰撞,也引起了许多新的用法。我了解得也不多。

问:下游戏业内当前主流的服务器框架和技术有哪些?
答:Game 不像 Web,极少所谓的框架和通用技术。那些所谓的引擎、组件,也只致力于解决一部分问题。它们很乐意于被用户当成“项目的一部分而存在”,而不像 Web Framework 那样想一招鲜,想一个东西搞定所有需求。

问:连通用的模型都没有?
答:是的,游戏的种类太多,所以很少通用的模型。比如开心农场和开心水族箱用到的技术,大有不同。

问:那些引擎、组件都有啥?
答:我觉得你没有必要去了解引擎、组件之类。你现在想进入这个领域的话,最好的方法是“赤手空拳”,直接打入。

问:额……我没有一点基础……
答:充分地应用你在 Web 的经验,我觉得就够了。不要想着去补短板,多想怎么怎么发挥自己的长板。

问:不会 c++ 不会java 不会并发编程……
答:晕……这些东西未必用得上……最赚钱的 webgame 之一,热血三国,服务器端是纯 php。起码早期是这样的,后期我不太清楚了,估计不会有什么大的变动。

问:其实我说的网游不一定就是 webgame,也包括客户端那种的,对我而言很神秘。想了解下做服务器端编程。
答:你可以把网游服务器端编程想像成你自己要做一个 web server,当然,会更特定一些,对可扩展性的要求低一些,但是有些方面需要比 web svr 更强。

问:意思是只要有做 web 服务器的功力就可以通吃了?
答:不是可以通吃,web server 的业务模型跟 game server 的业务模型相差甚远。比如 web svr 看重并发性,而 gamesvr 更看重的是“顺序”,如果 game client A 发生事件序列的顺序是 1 2 3,game svr必须保证经过它的同步,client B 一定会发生同样的事件序列,并且顺序也一样。甚至 game svr本身就跑着一个业务逻辑,它本身也要发生事件序列 1 2 3。

问:这样一来并发性似乎不容易很高吧?业内单机的连接数一般是多少?
答:嗯。看情况啊,game svr 通常按组来算“容量”,一组服务器可能有 1、2 或更多物理机器。

问:这是个什么概念?
答:game svr 通常是一个“集群”系统。

问:没有单机连接数的说法?
答:有,因为很多时候一个物理器可以跑一个集群系统甚至多个集群系统,回合制游戏,一台现在的常见的机器,可以服务几千甚至上万个玩家。设计得结构良好的棋牌系统,一台物理机器也可以服务上万个玩家。当然,也有一些大型游戏,需要若干台物理机器才能够完成一个 game svr 的需求。

问:这么厉害?
答:因为业务量其实很小的。不像 Web,一个请求过来需要读数十次硬盘,game 的业务请求往往全部在内存里解决。

问:意思是全内存运算?数据库连接呢?
答:是的。我们通常会把若干 G 的数据 load 到内存,很多业务根本不需要读到 DB 的,因为玩家的状态全部在内存里。

问:上 G 的数据全部在内存中,万一当机或者数据不一致怎么办?
答:游戏会回档,就是因为发生了你说的这种“杯具的事情”

问:玩家数据就简单的放在内存里?没有任何分布式架构保证一致性和可用性?
答:通常来说,是这样的。游戏要的是性能,一致性并不那么重要,因为公司并不会为此有多大的损失。甚至这还是有好处的,玩家不投诉客服的话,他的损失就归开发商了……

问:那游戏每次升级之后的开服岂不是得reload?随着服务器的增多 reload的数据,岂不是会上T?
答:不……游戏中要保存的数据并不多,而且游戏还有区的概念,可以保证游戏不会有太多的数据。还有就是,如果玩家 A 不上线,其实 A 的数据并不在内存。所以 reload 的时间也不会很多。

问:A 登陆成功以后从数据库拉玩家数据到内存,然后再也没有数据库交互,直到下线?
答:不是的,通常会在一定的间隔(比如 5 分钟),把状态有改变的玩家数据序列化到数据库或文件;下线以后,通常也会把玩家数据序列化到数据库或文件。

问:网游服务器端一般是 c++ 吧?java 估计很少:
答:啥语言都 OK 的。语言真的最不是问题的一环,比选择数据库系统还要简单。

问:erlang就不知道能干啥了
答:erlang 应该不合适吧,刚才说了,game svr 注重的是“顺序”,而 erlang 擅长的是并发,用了它不是“以已之短攻彼之长”么?

问:有没有啥开源的网游项目,可以拿来参考学习的?
答:MaNGOS?(http://sourceforge.net/projects/mangos/)MaNGOSis an object-oriented Massively Multiplayer Online Role-Playing GameServer (MMORPGS). It’s an educational project, to help developers getfamilar with large scale C++ and C# development projects.

Filed under 游戏 · Tagged with webgame, 服务器, 网游

记2010.2.12兴宁互联网从业人员小聚

Posted by 赖勇浩 on 二月 18, 2010 · 6 条评论 

赖勇浩(http://laiyonghao.com)

2010 年 2 月 12 日(农历腊月廿九日)晚 6 时,我、江玲、林刚(http://www.lingang.gd.cn/)、赖伟波、严滔、林秋冬和毛文共七人在兴宁南坛路口的满堂红酒店小聚,经我和林刚互相介绍之后,大家就广泛感兴趣的领域(如编程技术、三四线城市的商业机会和可能存在的合作方式等)交换了意见,以下是简单的关于这次小聚的记录。

初识林总的时候,他就有提到过找合适的机会见一下面。那时我还计划着 09 年 12 月初会回家一趟,可以跟他私下先见一面,认识一番。后来我 11 月中旬有急事回了一趟家里,短短两天,忙完之后已经抽不出闲余时间了,只好在网上相约以后再聚。转眼到了 2010 年 1 月下旬,我发邮件给林总,请他帮忙组织一下兴宁互联网从业人员一起聊聊,小聚一下,林总欣然应允。

不几日,林总就约到了兴宁在互联网业叫得上名号的若干人;然后我再邀约了公司的一些同事,到腊月廿九的时候,又多了一些变动,出席的人没有预想的多,但效果却颇为不错。我与江玲是同事,都早到了,喝了两小杯茶,等来了林总等一行四人,然后到厢房里等严滔前来。林总替我们外地归来的游子点了若干本地特色美食,就不作细表了,单说我们聊天的内容。

一开始,大家都不是很熟悉,就先扯淡了一下社会问题,作为技术宅男,大家的观点都差不多,跟 Twitter 上大家的表现相似。然后进入正题,我们主要交流了以下几个问题:

一、当前兴宁互联网业的主要关注点是什么,大家是怎么样创造收入的。 以收入的“颜色”分,主要是三种:白色的、灰色的和黑色的。其中白色的以本地社区,本地信息服务(如本地化的网站导航)为主,其它的在此就不作细表了。大家都认同林总说的:虽然腾讯、阿里和百度等巨头占据了大部分市场,但是对于三四线城市的本地信息,他们永远也做不到本地人能够做的那么细,那么具有实时性,这就是我们最为关注的点。

二、当前大家普遍遇到的困难是什么,讨论了相应的解决方案。 大家最大的困难仍然在于技术,有很多想法,但没有足够的技术人员去实现。整个梅州市,有 600 余万人口,只有一个嘉应学院能够输出本科和大专学历的人才,而这些人在毕业之后,极大的一部分外出务工,一部分从事企事业单位或公务员工作,肯留下来从事 IT 业的,往往数量极小而且质量不是很好了。林总曾经多年来都招聘新人培养,但往往工作一年翅膀硬了就会离开,如何构建一个稳定的技术团队,是大家最大的困扰。而毛文也提到,如果高薪从一二线城市找人回来,也存在磨合的问题,这些回来的“牛人”,各有自已做事的风格和迥异的技术观,非常难合作。

三、外地技术人才如何与本地从业人员优势互补,合作共赢。 这一点,我们都是一些探讨性的想法。林总提出一些本地信息分类,与地面团队有偿合作的共赢的方式,而我则认为研发技术的团队很难得到营收的保障,然后对三四线小城到底有多少信息可以放到网上去表示担忧。最后我提出一种跟游戏紧密切合的合作方式,在以下单独作为一点讨论。

四、三四线城市中游戏业的机会何在? 据赖伟波提到,现在三四线城市还是很多人玩棋牌的,另外客家龙城游戏这种小棋牌的红火,也印证了这一点。我自己之前有做过一整套棋牌游戏,基于 Python 开发的跨平台服务器端和 Flex 开发的基于 Flash 的 web 客户端,我觉得如果找到一个合适的方式,能够让现在拥有数千或上万 IP 每日的本地网站可以无缝挂接这个棋牌游戏,然后提供一个公平公道的分成模式,既让本地网站创造营收,也是棋牌这一块的机会。

关于棋牌游戏下乡,也许很多人说 QQgame 那么强大,根本没法做。其实不然,我手上掌握有许多数据和事例,证明这一块随便做个三四线城市就能够年收入在 200 万上下,中国有多少三四线城市,你可以算算这个市场有多大。这一点仍然会是我未来会花最多的精力去关注的方向,因为我在游戏方面有多年的积累。

五、落地的广告与互联网结合的模式。 与一二线城市拥有大量网民不同,三四线城市满街派发的传单,仍然是最低成本和最有效果的广告。目前广东、广西等地已经出现“纸质的广告发行商”,他们征集零散的广告,然后整合出效果“雷人”的排版,通过乡镇、街道的派发员派发,目前这个广告效果听说不错。而这种落地的广告与互联网存在天然的结合点,派发员就是业务员,他们可以搜集到最细节的本地信息,是当前任何互联网大鳄都无法做到的(也许是不宵去做的)。现在本地已经有互联网人士做这两种广告行业的整合工作。

六、移动互联网 。这一块目前兴宁还没有人做。估计其它三四线城市也只有少量人去做,或者还没有人做。宜再观察,再出手。

七、小结。 以我们所在的四线城市兴宁(hao123.com 和雨林木风的诞生地)为例,这个总人口百万出头的小城,每年创造的互联网利润应该在千万元以上,如果能够找到一种可以低成本复制的模式,以三四线城市为突破点,不仅创业的成功率远大于在一线城市创业,而且可以通过复制一线城市的创业模式,快速低成本地尝试。

对于已经在本地创业成功者来说,如何增强自己的技术团队是一个令人头疼的问题,估计也是任何一个三四线城市的互联网创业者和计划回去三四线城市创业的技术人员的一大拦路虎。关于这个问题,我们也没有什么好的模式和方法,仍然需要大家去摸索着解决。但林总的自信,给我也带来自信——只要是问题,只要耐性地变得法子去解决它,总会解决的。

据我掌握到的双方的情报,在一线城市工作的技术人员,估计收入远没有在三四线城市创业者高。那么如何发挥自己所长,找到本地资源优势,展开合作或竞争,已经成为一个迫在眉睫的问题。对于我来说,已经不是回不回来创业的问题,而是何时创业、如何创业、怎么发挥自己所长与现有的创业人员合作共赢的问题。

我呼吁大家回去自己的家乡创业,建设三四线城市的互联网,将大有可为,大有所为。

Filed under 技术聚会 · Tagged with 兴宁

参加了 Adobe 开发者技术日

Posted by 赖勇浩 on 十二月 2, 2009 · 2 条评论 

赖勇浩(http://laiyonghao.com)
昨天将要下班的时候,突然身体不舒服,感觉要晕倒在地,赶紧去会议室躺下,没想到一躺几个小时,晚饭也没吃。九点多挣扎着起来,天旋地转,到水吧拿了点白糖泡热水喝了以后竟然在办公室就吐了起来。不得已,怕自己在路上晕倒,把老婆叫来接我去医院。吊了两瓶药水之后,终于恢复了一些,折腾到凌晨一点多了,觉得可能这次报名去参加 Adobe 开发者技术要失约了。
今天早上八点,竟然能够起得床来,虽然还是头重脚轻,但既约了同事一同前往,又想问一下 Adobe 官方一些问题,还是咬牙去了珠江新城的富力君悦大酒店。


到会场的时候,已经九点一刻了,会场满满的应该到了一百余人。签到,拿了很漂亮的参会卡乖乖找了个后面的座位坐定。九点半准时开始,奥多比公司中国研发中心总经理南宁如先生做了简短的致辞,跟日程表上的时间分秒不差。后来才发现所有的演讲人员都有一手绝活,就是演讲时间都是非常准时结束的,可以看得出 Adobe 公司对参会的开发人员非常尊重,谢谢。
因为今天的状态不佳,所以听到的东西大多没有能够记住。不过马鉴先生(http://www.7yue.com)所说的 Flash Platfrom 的最新动态颇为振动人心,特别是 Slider 这个 Flex Mobile Framework 能够运行在400Mhz、128MB RAM 的移动设备上,而 Flash Player 10.1 也将能够在 ARM11 架构的 500-600Mhz的机器上运行,且只占用 50MB 的内存,莫非移动 Flash 的时代真要来了?第一次看到 Flash Catalyst的演示,我和同事都觉得非常有用,应该在很大的程度上能够打通设计师与开发人员之间的鸿沟。然后就是孙颖先生的《RIA与开放平台》演讲,因为之前看过他一《Flash as3 殿堂之路》,所以先入为主地觉得不过了了,另外演讲中也有颇多是为东家淘宝网做广告,既然如此就不多评论了。

转眼就到 12点一刻,因为一直没有看到这酒店的餐厅在哪里,也没有指引,另外估计在酒店用餐比较贵,就没有问工作人员,直接出了酒店。施工中的珠江新城,那么个荒凉哇!幸好年初曾经来过这里,记得有一间真功夫,凭着依稀记忆,竟然顺利找到,于是在祭了五脏庙之后杀回酒店。在这里抱怨一下 Adobe的组织人员,下次请在“大会信息”页面提供餐饮、交通指引,毕竟你们活动都是在大城市里搞,不可能我们在这个城市讨生活就真的很熟悉这里的每一个角落。如果您们看到我的抱怨,下次活动时请您们多下些工夫,这次为午饭折腾了一下的朋友估计不少。
下午回到会场,Adobe 公司高级软件工程师曹金明先生(http://swfever.com/)作了《What’s new in Flex 4 SDK ? 》报告,这是一个颇为实用的topic,介绍了很多新的特性。因为之前在网上有了解过一些,加上午休时间,所以我走神用手撑着头竟然小睡了一下。唉,再好的 topic也抵不过困乏,醒来发现不少朋友都趴在会议桌上梦周公。
在茶歇之后,郭少瑞先生讲了《Spring ActionScript 与 Cairngorm框架的结合开发技巧》。嗯,我现在对设计模式已经不那么敏感了,觉得这东西主要作用是让比较水的程序员写的代码不那么水而已。不过话说回来,Cairngorm 还是让我觉得开始信息化应用的话,比直接用 Flex SDK 方便了许多。不过 Spring ActionScript我只能说是一个怪物了,这玩意非常符合一个老笑话,怎么说来着,哦,对,“我有一个问题,我觉得我应该用 XML 解决它,好,现在我有两个问题了。”

最后又是由马鉴先生做了一番 Drawing API讲解,因为自己出身游戏业界,所以前面一小段就没有听真了,后面介绍的几个粒子系统很棒,还有 Pixel Bender Shader 让我觉得Adobe 的这个 Flash Player 真的是不错的“游戏图形引擎”,值得研究研究。
最后是现场答疑时间,我问了一个这样的问题:“作为游戏开发者,我非常关注 Flash Player 的扩展和嵌入;所谓扩展就是指由开发人员使用C/C++ 编写动态连接库供 FP 调用,而嵌入则是指将 FP 嵌入到用其它语言(比如C++)编写的宿主程序中;在目前无论是 C++ 调用AS3,还是 AS3 调用C++,都非常麻烦,不知道 Adobe 有没有计划改进这一方面?”
很无奈,马鉴先生给了我一个非常明确的“No”,理由大概是有两点,一是为了安全性(我觉得这点不太成立啊,python 或 lua 等直接提供C-API 的语言就不说了,连 java 都有 JNI 啊);二是目前在游戏领域,Adobe 注重于 Webgame 和 SocialGame,所以大家不用期待了。因为自己参与的项目目前使用 Flash 作为 Game UI 系统,这个官方消息让我 Feel so sad。
最后感谢 Adobe 公司赠送给我们 Flash Builder 4 beta 2 和 Flash Catalyst beta 2 等Adobe Flash Platform 光盘以及 Tour de Flex、tour de LiveCycle的光盘,可惜的是抽奖没有抽中我,蛮想要《Adobe Flex 3 大师之路》这本书的。

Filed under 技术聚会 · Tagged with Adobe, flex

浅谈技术难度与公司收益

Posted by 赖勇浩 on 十一月 27, 2009 · 12 条评论 

赖勇浩(http://laiyonghao.com)

朋友打算创业,找我聊了几次。他虽然不是技术出身,但也在网游业界混过几年,所以也很相信技术改变世界。今天他找我聊说起“云计算”,瞬间我就震精了。我劝告他说不要去炒这些概念,这些东西不是创业公司炒得起的东西,老老实实用最简单的技术做出东西来。为了让他更好的理解我的技术观,后来我给他画了这样一个图:

在我心目当中,技术难度的重要性,也正是如此:

一、在技术难度到达 1 号点时之前,技术难度对于收益几乎毫无影响。在我心目中,1号点之前的技术难度的差别大概就是编程语言的选型,比如用C++ 还是用 PHP,用 python 还是用 Go;又比如是平台的选型,用windows 还是 linux,用 MFC 还是 WinSDK。虽然 C++ 比 PHP 要难掌握得多,Linux 比 windows也更难上手,但从商业角度看,在这个层面上,怎么选都无所谓,唯一要注意的是选“熟悉的、趁手的”,以保证 idea能够实现,能够快速实现。这个层面上,商业 idea 要重要得多,如果水平都差不多,你用 C 并不会比用 php带来更大的成功的可能性;而请一个二万月薪的人也并不会比请一个一万月薪的人更加靠谱。

二、当技术难度在 1、2 号点之间的时候,通常是你的 startup已经成长起来,有了固定的忠实用户,并且新用户不断增长,而且商业模式开始明确起来,有了明显的技术压力,比如你的服务器开始经常宕机了。这时候通常需要做的是对之前实现的技术根据业务重点进行调优,比如开始把数据库分库分表,开始把一部分功能分到专门的服务器上(比如专门的图片存储服务器)。这个阶段,以“拆”为主,分而治之;在技术选型方面,通常都是仍然使用以前的技术。这时候技术难度与收益基本上是成正比的,你请一个五十万年薪的技术带头人,比请一个十万年薪的要有用的多。

三、所谓合久必分,分久必合,当用户越来越多,“拆”字决的神通就到头了。这时通常就得开始整合。抽取各种业务最基本的需求,然后实现一个极具扩展性的组件来作为平台。比如对于数据存储,这时会开始实现各式的分布式存储系统,提供统一的抽象的接口,只做数据的高效存取,比如手机之家前段时间所说的DAL 2.0 就是(DAL开发人员自己的说法:http://club.blogbeta.com/25.html)。甚至会开始抽象出一类机制,超越策略的层面,比如 google 的 map-reduce思想及其实现。这时候技术难度的重要性就表现出来了,在技术人员看来,这些技术难度只是提升了一点点,但在商业角度上来看,却能够给公司带来无穷大的收益。可惜的是这时候要提升一点技术难度也变得相当困难,所以很多公司做不大的原因是当他需要花大钱请大牛的时候,boss和投资人的眼光仍然觉得技术不重要,白白错失时机。

关于技术难度与公司的收益的关系,我觉得之前豆瓣公司的洪强宁做的演讲极具价值,特意找来放在这里给大家参考参考:http://www.infoq.com/cn/presentations/hongqn-douban ,大家可以听听他的演讲,也欢迎大家留言讨论一下。

最后说一下我的朋友最终接受了我的观点,打算采用 PHP(或python)+ mysql + flex 的方式来制作webgame,如果有朋友对这些技术熟悉,欢迎跟我联系(联系方式在“关于”页面),到靠谱的团队一起创造未来,小声泄一下秘密,他们给优秀人才提供分红。

Filed under 扯淡 · Tagged with 创业, 技术选型

深入 GalCon:Python、游戏开发和人工智能

Posted by 赖勇浩 on 十一月 20, 2009 · 留下评论 

Alex. J. Champandard
赖勇浩(http://laiyonghao.com) 译

原文地址:http://aigamedev.com/open/interviews/inside-galcon-python-ai/

AiGameDev.com在这个周一的 pratical insights 是对 Phil Hassey 采访。Phil 是一个独立游戏开发者,也是游戏产业社区的活跃分子。他曾赢得2006年4月的 Ludum Dare 比赛(这个比赛关注群体行为),结果就是产生了名为 GalCon 的非常流行的游戏——上世纪 80 年代叫 Galactic Conquest 的游戏的复刻版。

我最近经常跟 Phil 通 email,问他很多关于 Galcon 的问题,比如人工智能、用 Python 开发游戏等。你可以在访问他的网站或 GalCon 的网站找到关于他的项目的更多的信息。此外,还可以下载游戏的demo 。


截图1:Ludum Dare 比赛的参赛作品。

Alex Champandard:您好,Phil,感谢您抽出时间来回答这些问题! 您能否简要地介绍自己,以及关于成为游戏开发者的背景呢?

Phil Hassey:我自 10 岁以来就一直在制作游戏。我想大概是因为我没有其它事情可做 ,我最喜爱的语言是Python,所有的游戏都是用它开发的。当然我也用 C 写性能敏感的东西,也基于 PHP 来开发 Web 项目。我的游戏大部分都是开源的,我写了不少适用于游戏开发的开源工具/库。

Phil Hassey 开发的游戏:

  • Imitation Pickles — Games

AC:Galcon 创意从何而来的呢? 能否向不知道这个游戏的读者简单地介绍一下这个游戏?

PH:2006年4月有一个48小时的游戏开发竞赛称为Ludum Dare。比赛主题是群体,而且我一直希望再度缔造“银河征服”风格的游戏,所以我尝试实现飞船群。游戏的原型在48个小时内做出来并赢得了比赛。后来我接受了大家的鼓励,继续开发,然后就有了 GalCon。

Phil Hassey 的相关材料:

  • The Glorious History of Galcon

AC :这些飞船是游戏的重要组成部分,我很好奇你如何实现它们的。 是否基于 Craig Reynold 的操控行为理论? 需要实现很多特定的算法吗?

PH:其实算法很简单-给所有的飞船指定目的地即可。然后执行碰撞检测,让它们腾出地方。

AC :模拟这么多的飞船,你遇到性能问题了吗? 如果是遇到过,又是如何解决这些问题的呢?

PH:当然遇过。以前的版本一屏上最多能有 4096 个元素,而我用的又是蛮力碰撞检测。所以在某些情况下,速度就变得相当慢了。当前版本的最大值是2048,并且使用了网格细分屏幕的碰撞检测算法。在把飞船放到屏幕上的时候,我也用来些心思来初始化它们的显示,以避免太多的碰撞。在原始版本中我把它们都放在一个中心点(行星的圆心),然后让它们慢慢地扩散,这产生了非常昂贵的检测代价。


截图2:在 GalCon 的完整版本中可以选择多个 Missions 和多种 AI 机器人。

AC:请问你是如何实现机器的 AI 的? 你是先构建了游戏的大部分,还是迭代改进的?

PH:在那 48 个小时里,我把大部分时间花在如何让数学和图形整合在一起的事情上。AI 是最后几个小时里实现的。

交流 :在开发过程中,你觉得 AI 有用吗? 例如,用来调整参数?

PH:并非如此。来自玩家真实体验的反馈更加有用。

AC :Galcon 的玩法看似相当简单,但要找到一个最佳的策略并不容易! 在实现 AI 的时候你用到了哪些游戏理论?

“尝试实现 神经网络 有助于认清确定决策所需的 信息 。”

PH:制作最终版本的时候我在 AI 上花了相当长的时间。无数简单的更改自不待言,我甚至还花了一个星期来弄神经网络,但没有任何进展。不过尝试实现神经网络帮助我理清了实现 AI 决策的所需的信息。我在游戏中的机器人上使用了许多新学到的东西。

我仍然在开发一些新的机器人,并发现阅读 Galcon 攻略极其有用。我已经实施了一些战略,也创造了一些非常具有挑战性的机器人。有些策略看上去似乎有反直觉,但他们的工作非常好。

在某些场景中体验某种特定的 AI 非常有趣,比如多人游戏中加入一个新手级的机器人,这种机器人在公平的比赛中非常容易击败它,但如果给机器人 30 个星球,你只有 2 个,那么玩家就必须正视这个新手,才能赢取比赛。

相关的网页:

  • Galcon’s Forum on Strategy

AC:我注意到这是个基于 pygame 编写的游戏。 谈一下你使用这个框架的经验如何? 有何特别之处?

PH:pygame 棒极了:)!我无需用到什么特别的东西,不过我想在以后使用 OpenGL。因为渲染这多么飞船耗费很多 CPU 资源。


截图3:Galcon 基于 pygame 开发。

AC:深入 mod 的脚本之后,我感叹 Galcon 的 API 竟然如此简洁和结构化。 对想跟 AI 对阵的玩家,你有什么要说的?

PH:祝你玩得开心!


截图4:机器人战斗模式对测试 AI 非常有用。

相关材料:

  • An AI Bot to Colonize the Galaxy in 5 Minutes at AiGameDev.com
  • Galcon Forum on Mods and Scripting

AC:接下来你有什么计划? 是否有项目正在进行?

PH:我正在做一个Galcon增强版。希望它几个月后就能够发布出来。:)

AC :感谢 Phil 抽出宝贵时间回答这些问题,也祝你的项目好运。 如果大家喜欢 demo,请大家去购买完整版。

Filed under python, 游戏, 编程 · Tagged with galcon, python

[译]星际争霸人工智能比赛——规则

Posted by 赖勇浩 on 十一月 15, 2009 · 留下评论 

赖勇浩(http://laiyonghao.com)

昨天在广州技术沙龙第 3 期的会场上通过 Google reader看到这个消息(http://developers.solidot.org/article.pl?sid=09/11/14/0641223& amp;from=rss),一阵激动。回来就把相关的文档看了一下,觉得蛮有意思,就顺手翻译了。如有错漏,恳请指正。


  • 无需报名费
  • 没有奖金
  • 比赛后公开赛所有录像
  • 所有比赛都使用星际争霸 Brood War 1.16.1
  • 星际争霸是暴雪娱乐的注册商标
  • 参加者须拥有的星际争霸和扩展的合法拷贝
    1. 我们将确认参赛者所拥有的星际争霸是否合法,要求参与者登录到battle.net是注册过程的一部分
  • 暴雪不承担任何责任
  • 我们不承担任何责任
    1. 包括因为运行第三方星际争霸运行器而导致你的 CD key 被 Battle.net 封号
  • 参赛作品必须使用本网站提供的 Brood War API
  • 机器人执行恶意行为将被取消和禁止参加接下来的比赛。所谓的恶意行为包括但不限于:
    1. 故意使星际争霸崩溃
    2. 安装蠕虫/病毒/恶意软件
    3. 恶意利用资源,如 sockets,文件,僵尸进程(使用100%的RAM和100%的CPU是允许的)
    4. 在游戏控制台散播”垃圾”(干扰信息等)
  • 试图作弊将被取消资格
    1. 机器人需要在1,2和4场比赛中禁用完美信息标志
  • 比赛中,使星际争霸崩溃作负
    1. 比赛开始前几个星期,将有一系列测试,以确保参赛程序能够在比赛机器上正确运行
  • 机器人将在安装了 Windows XP / Vista环境中运行
    1. 参赛作品应该在安装了的Windows XP / Vista的测试后再提交
    2. 我们将不承担责任由于我们的系统配置而导致参赛程序使星际争霸崩溃的责任
  • 比赛以半自动化的方式进行,详情请参阅比赛配置页面
  • 机器人将在一个LAN中运行,不能接入互联网
  • 一个名额只能提交一个比赛程序但可以为每一个子比寒提交不同的机器人。
  • 机器人不能减慢游戏速度
    1. 比赛将使用最快的设置,每秒24帧
    2. 关于编写人工智能远程进程的细节在这里
    3. 比赛中,机器人减慢游戏速度时间长的将作负
  • 参加者无须公开源代码
    1. 提供一个DLL即可,详情请见提交页面
    2. 不过,参赛程序必须提供执行细节的简短说明
  • 参赛作品允许使用开源或闭源组件
  • 参赛作品允许使用 socket 与远程进程通信
    1. 远程进程必须是点击运行应用程序(例如,我们不会在主机上安装一个Lisp编译器来运行一个机器人)
    2. 编写远程进程的其他详细信息,在这里
  • 参赛作品可以在本地目录写入文件
    1. 允许机器人保存双方在一轮比赛中的状态
    2. 但这些文件在每一轮结束后会被清除
  • 机器人不能暂停游戏,比赛中如果机器人暂停比赛将作负
  • 下面的星际争霸错误/技巧是允许的:
    1. Plague on interceptor
    2. Units pressed through
    3. Drops to defuse mines
    4. Mineral walk
    5. Manner Pylon
    6. Lurker hold position
    7. Observer over turret
    8. Stacking air units
  • 但以下所有其他错误/漏洞被禁止。机器人陷入利用这些漏洞将被取消比赛资格。这包括但不限于:
    1. Flying drones and templars
    2. Terran sliding buildings
    3. Stacking ground units
    4. Allied mines
    5. Gas walk, to get through blocked entrances or ramps
  • 不鼓励其它比赛中的不良行为举止,但不禁止