当前位置: 首页 > news >正文

看了羊了个羊的源码后我发现这个游戏花了最少钱,赚了最多的钱

“羊了个羊”如何进行发牌?

首先先介绍一下该游戏的牌堆。
下面是我反编译游戏源码之后得到的代码。
在我们每次进行游戏之前,微信小程序会向服务器进行一次通讯。
然后下面就是服务器返回的数据。
可以发现,客户端初始化的时候初始化了每种卡片的组数,也就是这里的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。这个含金量,懂得都懂。

总结

在这里插入图片描述

相关文章:

  • 『 云原生·分布式』分布式基础——Docker容器详解与Docker的安装(Linux与Windows)
  • Web会话跟踪:Cookie与Session
  • 【大数据】Hadoop在呼唤Hive(附一键部署Hive脚本)
  • 8. SQL中Order by和Group by子句的使用简介
  • 27. 生成CSV文件
  • 【初学者入门C语言】之二维数组(七)
  • 深度学习 Day 14——利用卷神经网络实现运动鞋品牌识别
  • 索引的创建与设计原则(2)(适合创建索引情况 )
  • 写给Python社群的第2课:Python逻辑语句,天天要写的 if 和 while
  • 2022G3锅炉水处理考试练习题模拟考试平台操作
  • C++11:lambda表达式
  • [实践篇]13.6 QNX侧如何抓取日志?
  • Java中如何检测一个元素是否存在于HashSet对象中呢?
  • Cesium:OSGB倾斜摄影模型加载卡顿优化
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • 《剑指offer》分解让复杂问题更简单
  • EOS是什么
  • ES6系统学习----从Apollo Client看解构赋值
  • Map集合、散列表、红黑树介绍
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring Boot MyBatis配置多种数据库
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • vue中实现单选
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 力扣(LeetCode)965
  • 马上搞懂 GeoJSON
  • 你不可错过的前端面试题(一)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 优化 Vue 项目编译文件大小
  • - 转 Ext2.0 form使用实例
  • Hibernate主键生成策略及选择
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • # Java NIO(一)FileChannel
  • # 达梦数据库知识点
  • #NOIP 2014# day.2 T2 寻找道路
  • #pragma预处理命令
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (6)添加vue-cookie
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (zhuan) 一些RL的文献(及笔记)
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (十三)Maven插件解析运行机制
  • (算法)求1到1亿间的质数或素数
  • (转)Unity3DUnity3D在android下调试
  • (转)关于多人操作数据的处理策略
  • *Django中的Ajax 纯js的书写样式1
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?