看了羊了个羊的源码后我发现这个游戏花了最少钱,赚了最多的钱
“羊了个羊”如何进行发牌?
首先先介绍一下该游戏的牌堆。
下面是我反编译游戏源码之后得到的代码。
在我们每次进行游戏之前,微信小程序会向服务器进行一次通讯。
然后下面就是服务器返回的数据。
可以发现,客户端初始化的时候初始化了每种卡片的组数,也就是这里的blockTypeData。
也就是说没把游戏中卡片的组数是固定的。
而这里的levelData代表的是每张卡片的位置,一共两千多行,都是这个数据。
因此开始游戏的时候,服务器不会告诉这个小程序每个位置是什么牌,而只是规定了牌组的分布。
而具体每个位置是什么牌,需要去其代码逻辑中寻找。
下面介绍核心逻辑的代码。
当我们每次新建一个游戏的时候,都会执行下面的init或者initNextLevelMap函数
其中比较重要的就是createBlockTypeObj函数以及initBlockNodeLayer函数
首先查看这个createBlockTypeObj函数,其中blockTypeData是我们上文提到的不同类型的卡牌的分配。
然后可以看见他创建了一个Arr,并且把每个卡牌数量乘3然后放进这个Arr。
而这里放牌的方式是这样的,比如服务器说1号卡牌有1组,2号卡牌有1组,3号卡牌有两组,那么Array中的内容如下:
111 222 333333
然后就是如果了解过最近的消息的,就知道,羊了个羊底层使用的是shuffle(我一直听我朋友念叨这个shuffle)
这个shuffle也就是打乱了这个数组中的数据,本来数组中的数据是有序的,打乱之后类似于洗牌,所以数组中的卡牌的数量不变,但是他们的位置改变了。
之后来看initBlockNodeLayer。
可以看到这里有一个levelData。
也就是上文中我提到的有两千多行的这一关结构的数据了。
并且对这关结构里的每一个点,也就是每一张卡牌所在的位置,执行了一个addBlockFunc函数。
而这个addBlockFunc,其作用就是在每一张卡牌的类型还没被规定的时候,从我们上文中说的那个数组Array中取出一个值,而这个Array此时是一个打乱的,但是还没被分配掉的数组,取出值之后,将这个值赋值给type。
程序看到这里,大概就已经有一些头绪了,也就是这个代码是这样子的:
服务器返回一个包含了每种卡牌数量的Json,这个Json规定了每种卡牌的组数(组数随机),并且规定了层数,以及每一层中卡牌出现的位置,当然,卡牌都是叠罗汉的,比如我们查看levelData中的id字段,他就规定了某一层中那个位置是空的,那个位置是可以放置卡牌的。这是层结构和卡牌位置的确定。
之后,创建了一个数组,根据服务器传回的每一种卡牌的组数乘3之后,将这些卡牌按照他们的组id放入到数组中,也就是上文说的111,222,333333。
放入完毕之后进行shuffle函数打乱数组,也就是打乱牌序。
之后,根据levelData,将levelData每一层中的空缺位置用数组中的卡牌进行填充设置,遍历完毕之后,所有的牌就已经放好了。并且由于每一种牌都是根据组数乘3得到的,所以数组中所有的牌一定都是3的倍数,不会出现说卡牌数量不是3的倍数导致消不掉的情况。
所以,看到这里,可以初步认定这个游戏是一个真随机,也就是没有网络上说的程序员捣鬼不让过关,毕竟底层直接用的是shuffle,这就类似于洗牌了。
羊了个羊为什么这么难?
上面聊完之后,说明程序并没有刻意提高游戏难度,游戏就是一个正常的shuffle之后的随机分配的卡牌组。
但是为什么这个游戏那么难过关呢?
首先,虽然每种牌的数量都是3的倍数,但是这个只是本次能过关的一个必要条件之一。
程序直接采用了shuffle的方式,也就是程序并没有设定说这次游戏一定是有解的,这才是问题。
直接shuffle打乱牌,极有可能出现那种前面很好消,但是后面出现当前层全是不同种类的卡牌(脑补一下),因此即使你到了该层的时候卡牌区里一张牌都没有,但是这一层可以直接出现一个直接7张不同的牌,直接让你失败。
因此,让这个游戏有解,才是真的费力的地方(懂得都懂为什么我这么说),而如果程序直接使用shuffle进行打乱,是很容易的,这基本就是一种偷懒行为了。
所以,这个游戏你能不能过关,确实看运气,因为很可能,你一开始得到的牌组就是无解的。
“羊了个羊”商业模式你怎么看?
羊了个羊的商业模式很简单,就是单纯的一个团队开发出一个游戏,然后将这个游戏上架到微信小程序中去。
然后其盈利模式很简单,就是单纯的广告收入,而其之所以能在短时间获得大量的回报,就在于其死亡后可以邀请好友然后复活,因此可能出现滚雪球的情况,一个带一个。
而该游戏为什么能在短时间内获得这么大的热度?(两次热搜)
浅浅计算一下这个游戏赚了多少钱
该游戏的盈利方式看广告,其中分看了广告的,看了广告还点开的,以及看了广告点开还下载了的。
我们这样子进行计算,首先是看广告的人数,假设有1k人看,那么这1k人看到之后,就盈利30-50元。
而之后还会有人点,假设有100个人点开,那么就是20元,每人0.2元。
其中点开之后还下载的,设置为5人,那么就是40元,每人8元。
其中9月15日,根据网上数据大概有8kw人玩了这个游戏,我们假设每个人看了两次广告,那么就是1.6e。
那么按照上面的计算,可以得到1.6e /1000 * 40 + 1.6e /10 * 0.2 + 1.6e / 200 * 8 = 16000000(一千六百万/每天)
同时这个游戏只有9.15日当天最火热,那么之后按照一定的比例削减下去。
假设这个游戏火了十天(反正现在是没啥朋友玩了)。
那么我设定其收入为4kw。
然后我们计算成本:
开发成本(15w),广告成本(两次热搜,150w),博主宣传(45w),平台拿走(一半,2kw)
那么大概就是10天收入2kw。这个含金量,懂得都懂。