Draw Something无疑是当前手机游戏领域最热门的话题,不论是关于其如何能获得成功的各类分析,还是它濒临破产之后又一飞冲天的神话,都足以吸引到大量的眼球。我也不例外。在沉迷于其中一个晚上之后,我决定再从技术的角度看看它,就像之前的小小帝国一样。
因为Android上已经配置好了抓包分析环境,所以在我的Nexus One上安装了Draw Free之后进行分析,从后来的分析结果看,iOS上应该类似。
首先是服务器。有两台服务器,一台是amazon的S3,用于保存静态文件,比如wordlist、道具列表等等。另外一台是omgpop.com,同小小帝国一样采用nginx实现的RESTful服务,用于实现游戏逻辑。
wordlist也就是游戏中所能够绘画的单词列表,在程序启动时会加载http://static.iminlikewithyou.com/drawsomething/wordlist.csv,里面的内容是类似于
这样的字符串,其中第一部分是单词,第2个数字表示金币数,只能是1,2,3,第3个数字表示是否为高级版才有的单词,只能是0或者1,0表示只能在Free版中出现。
之前在玩游戏的时候借助的是有道词典的DrawSomething辅助工具,里面会搜索所有的单词。有了这个词典,工具可以做的更完善,只从这1998个单词中搜索,结果会准确得多。而事实上也确实已经有人提供了这样的工具,在Google搜索“http://static.iminlikewithyou.com/drawsomething/wordlist.csv”,会发现Github上有两个gist,一个是用python写的,一个是用ruby写的。
道具列表则是游戏内商城里的物品信息,里面包括了android和ios上的product id,所以iOS和Android客户端取的应该都是这同一份数据。
游戏的功能则在omgpop.com服务器上实现,从返回信息里看到采用的是nginx server,传递的数据使用json格式,未加密。比如登录成功后返回的玩家信息:
进入游戏后返回的当前状态信息:
客户端向服务器发送的状态更新数据:
另外也会经常向omgpop.comPOST一些状态数据,比如玩家属性、游戏状态等。在完成绘画之后也会向服务器发送alert信息。
但是绘画信息及猜词信息使用的是二进制数据,或者是经过编码的二进制数据,不能直接看到内容。
在iOS平台上Quartz 2D API提供了很强大的绘图功能,比如Path API,可以很轻松的实现类似这样的效果:
在Github上一样也可以找到一些painting相关的代码。简单来说,把绘制的点信息记录下来,同时每次使用的画笔信息也记录下来,使用相同的绘制算法即可以重现绘画。如果数据量过大的话可以做一些优化,比如多个点如果在一条偏差不大的直线上的话,中间的点都可以省略掉,等等。
而服务器方面也没有做太多的工作,从发送的数据上可以看出,Draw Something与小小帝国类似,也是采用的客户端为主的模式,玩家的状态数据都是客户端自己维护,服务器只起到一个数据持久化与中转的功能。
但就是这样简单的技术与功能,也造就了Draw Something的神话。只能说,移动APP拼的确实不是技术,而是创意。
原创文章,转载请注明: 转载自All-iPad.net
本文链接地址: 关于Draw Something的一些分析
Tags: drawsomething, nginx, omgpop, RESTful, S3, 小小帝国 [...]