李永乐老师讲游戏(李永乐老师深度剖析史上最难小游戏羊了个羊)
西瓜视频观看:《史上最难小游戏“羊了个羊”深度剖析过不了关是智商有问题吗?》,我来为大家科普一下关于李永乐老师讲游戏?以下内容希望对你有帮助!
李永乐老师讲游戏
西瓜视频观看:《史上最难小游戏“羊了个羊”深度剖析!过不了关是智商有问题吗?》
0
00:00:00,220 --> 00:00:10,340
各位同学大家好 我是李永乐老师 最近有一个小游戏《羊了个羊》突然爆火了 他的游戏规则很简单 把堆积在一起的牌啊点到临时的卡牌槽里
1
00:00:10,820 --> 00:00:21,740
凑齐一样的三张就能消掉 如果全部的卡牌都被消掉了 那么游戏就通关了 而临时卡槽呢一共有七个位置 如果这些位置都满了 那么游戏呢就结束了
2
00:00:22,240 --> 00:00:27,920
这个游戏第一关非常的简单 就好像1 1=2一样 第二关的难度就飙升 直接变成了考研
3
00:00:28,490 --> 00:00:35,130
尽管通过分享游戏或者看广告可以有一些辅助的道具 但是还是有很多人呢 玩了上百局都没有通关
4
00:00:35,820 --> 00:00:44,580
有小朋友就问我说呀 为什么这个游戏这么难玩呢 他通关的概率到底有多大呢 这程序原因是不是故意设计的让这个游戏不能通关呢
5
00:00:45,020 --> 00:00:57,420
经过我34天的研究啊 我得到了一些心得 那今天的就把我的研究成果向大家汇报一下 我们首先呢 先来说一说这个游戏 它的设计逻辑到底是什么样子的
6
00:00:58,260 --> 00:01:05,420
那么在网上有一个大神把这个游戏的原代码呢给扒出来了 那么通过分析这个原代码啊我们就了解了这个游戏是怎么设计的
7
00:01:05,930 --> 00:01:15,330
那这个游戏呢 首先需要把一大堆的卡放在桌子上 对吧 那首先呢 我们就得在桌子上啊 我们去设计一些卡的位置
8
00:01:15,890 --> 00:01:26,130
设计这些卡的位置 每一个卡的位置 它应该在桌面上有个坐标叫 x i y i 但是它不是一层 它可以一层一层摞起来 对不对 所以呢 还有一个纵坐标叫最爱
9
00:01:26,910 --> 00:01:45,870
那一共有多少个卡的位置呢 这取决于你有多少张卡 这些卡的大约有15种 我们知道因为三个三个销吗 对不对 每一组就得有三个啊 而且呢 每一种卡呀大约都是6-7组 我们假设是六组吧 所以说呢 总共的卡的个数大约是270个 大约是270个啊
10
00:01:46,510 --> 00:01:57,350
那么你就得设计270个卡的位置 那么这些卡位的设计还是有一定的要求的 比如说相邻的两层之间的 它的位置要稍微错开一点 对不对 所以一层会压着 另外一层而且是斜着压的
11
00:01:57,610 --> 00:02:06,570
第二呢 就是这个卡的位置不能悬空 就是如果它底下都没有卡的话 那这个位置就不能放 是不是啊 所以总之 它是有一些要求的啊 那么我们要设计270个位置
12
00:02:06,950 --> 00:02:17,870
设计完了之后 第二个步骤就是要把这些卡呀要进行洗牌 你现在呢 有15种卡 每一种卡有18张 这些卡呢 是a1啊
13
00:02:18,780 --> 00:02:26,380
a1有18张是吧 a2种类也有18张一直到最后一种a10a15也有18张开18张卡
14
00:02:26,850 --> 00:02:34,010
他那可以把这一共是270张卡吗 我们调动一个函数这270张卡呀 我们就可以让它进行乱续了
15
00:02:34,380 --> 00:02:40,700
啊 就是可以把它的顺序啊打断一下 调用的函数自动就可以乱续了 相当于我们打扑克牌的时候那个洗牌
16
00:02:41,380 --> 00:02:53,980
好了 现在我卡的位置也有了 一共有270个 而且是排好序的 我这个牌也有了 而且我已经洗好了第一张 第二张 第三张对不对 最后一步干什么 我们再把它放回去就行了 所以将牌啊
17
00:02:54,700 --> 00:03:10,780
怎么样啊 按照这个顺序啊 将牌呢 按照顺序怎么样放入这个卡的位置中 卡位之中 哎好 那么这个游戏呢就设计好了 然后你就可以去点 可以去玩了
18
00:03:11,170 --> 00:03:17,290
在这个过程之中呢 这第一个步骤就是设计卡位 它是人为的啊 它是人人工的
19
00:03:17,810 --> 00:03:29,250
是吧 所以你会发现呢 这每一天呢 它这个卡的位置 它是固定的 对吧 就是你在今天你玩的时候 你会发现这卡的位置总是这个样子 到第二天的时候 在卡位置就坏了 这个呢 是人工设计的
20
00:03:29,430 --> 00:03:49,270
是吧 但是呢 这个洗牌的过程 它是计算机程序自动完成的 所以如果你在一天之中你打很多局的话 你会发现这卡的位置没有变 对吧 但是这卡是什么 它变了 是吧 整个的 这个排队的形状没有变 但是呢 它的顺序发生了变换 这就是因为你每玩一局它都会自动的洗一次牌 是吧 所以呢 在这个游戏设计的
21
00:03:49,350 --> 00:04:00,750
过程中啊 程序员并没有人为的让你根本通不了关 但问题就在于这 因为他是随机洗牌的 所以虽然他没有人为的设计障碍 但他也有极大的概率 他本身这个游戏就是无解的
22
00:04:01,000 --> 00:04:07,920
是吧 那么究竟这个游戏有多大概率可以通关的 这取决于啊人工在设计卡位的时候
23
00:04:08,180 --> 00:04:19,420
他的这个设计的卡位究竟是什么样子的 对吧 这件事情呢 我们可以做一个例子啊做一个例子比如说 那我们想计算一下通关的这个概率
24
00:04:20,220 --> 00:04:27,580
啊 我们呢 就先不管他最开始的时候是什么样子的 假如我们最后啊有了一个残局
25
00:04:28,230 --> 00:04:35,190
有的一个残局 我们就来分析这个残局 看一看这个残局他通关的概率有多大 我们就能大概的有一个印象
26
00:04:35,690 --> 00:04:42,970
举个例子啊 比如这个残局啊 我们把它分为五层 最底下这一层 就是最贴近桌面的这一层
27
00:04:43,340 --> 00:04:51,380
是什么样子的呢 就是最中间有一张卡 最贴近桌面的这一层 最中间有一张卡 那这就是第一张卡了
28
00:04:51,620 --> 00:05:00,660
这是最底的那一层 在这一层的上方又压了一层 对不对 压了这一层是什么样子的呢 哎 是这样的四张卡
29
00:05:01,210 --> 00:05:06,970
这四张卡呀 它都是压到了第一张卡的上面 2345
30
00:05:07,760 --> 00:05:16,520
啊 这四张卡压到第一张卡的上面 只有把这四张卡都点掉了 你才能够点最底的那一张卡 是不是好 我们在网上再设计一层
31
00:05:16,910 --> 00:05:23,110
他的上方是什么样呢 啊 他的上方可能是这个样子的啊 可能是 这儿有一张
32
00:05:24,060 --> 00:05:31,660
然后这儿有一张 哎 这儿有一张 这儿还有一张啊 这叫6789
33
00:05:32,200 --> 00:05:48,480
啊 这个六啊 它就压在二和四上的 你必须把六点掉才能点二和四是吧 这个七压到二和三上 必须把七点掉才能点二和三啊 就这意思好 继续 然后我们再往上走一层 再往上走一层呢 我们假设上面这一层呢 就又变成了一个这个样子的
34
00:05:49,250 --> 00:05:56,930
又变成了这样的四张卡了啊 这样的话就是十十一十二十三 再往上来一层
35
00:05:57,640 --> 00:06:04,760
再往上来一层啊 假设在上面这一层呢 又有一张卡14在中间压着他们那三张
36
00:06:05,320 --> 00:06:15,760
假如说啊 他们是这样的 这个五层五层的结构是吧 最底下的是这一层 然后倒入第二层 到第三层 到了14层 还有最上面一层 我们走到了这样的一个区
37
00:06:16,040 --> 00:06:28,240
当然我们还有一个额外的卡槽 我现在问啊 假如你在最后的时候碰到了这样的一个残局 那么请问你通过的概率有多大 是吧 通过这个问题咱们就可以了解一下大概的通应该对
38
00:06:28,610 --> 00:06:47,010
那怎么算呢 我们呀 可以计算一下他通关的必要的条件是什么 必要条件的意思就是 你必须满足这个条件才有可能通关 但是即便你满足了他呢你也不一定能通关 所以我们计算的是一个通关概率的上限
39
00:06:47,310 --> 00:06:55,550
对吧 通过概率的上限我们具体来看 你说这14张卡需要满足什么要求他才有可能会通关呢 我们想
40
00:06:56,070 --> 00:07:03,790
这14张卡 这14张卡它有多少种啊 我们假设它有n种
41
00:07:04,530 --> 00:07:11,730
那这个n的最小就是一啊比如这14张卡都是玉米是吧或者都是羊啊最多的是14就是14张卡谁跟谁都不一样
42
00:07:12,080 --> 00:07:27,320
你想一想 如果这14张卡谁都跟谁不一样的话 你肯定是过不去了 对不对 为什么 因为只有三个一样的才能消掉 是不是因此我们说呀 你必须得怎么样呢 你要是有n种卡的话 那么你这个牌的数量必须要至少是3n牌
43
00:07:27,780 --> 00:07:45,900
才行啊 牌至少得有3n张 你才有可能把这些都消掉 对不对 牌至少有3n张的意思就是 如果每一种类都正好是3张的话啊 那么它就应该有3张 如果有的种类有6张的话 那么你可能就得是3 3张
44
00:07:46,230 --> 00:07:53,310
哎 刚才不是说只有14张吗 你为什么还说有三张呢 也就是说你临时卡槽里可能还有一些牌
45
00:07:53,650 --> 00:08:05,130
对不对还有一些牌 但是临时卡槽里面的牌是小于等于六张的 因为临时卡槽一共只有七个格 而且满七个格你就死了 对不对 这游戏就结束了 所以它应该是小于等于六张
46
00:08:05,470 --> 00:08:18,550
于是我们就说 什么呢 我们就说 呀 这3张牌去掉 桌面上这14张一定都在卡槽中 这句话对吗 这卡槽中的牌是不得小于等于六啊
47
00:08:18,910 --> 00:08:38,670
大家能明白这个式子吗 这是非常核心的一个式子 对吧 假设啊 桌面上还剩下n种牌 至少你得有3n张才能通关 那么这3n张中有14张是在桌面上 那么还有3n减14张是在这个临时的卡槽里 这个临时的卡槽里的排数不能超过六所以就有这么一个不等式了 对吧 好解 这个不等式我们会发现
48
00:08:39,150 --> 00:08:47,630
n是小于等于二十除以三对吧20/3但它应该是把它变成了六为什么呢 因为n必须是一个整数 所以n必须小于等于六
49
00:08:47,970 --> 00:08:58,690
换句话说 如果最后的残局是长这个样子的话 那么桌面上这14张牌 它的种类不能超过六因为如果你超过六了 铁定是无解的
50
00:08:58,990 --> 00:09:06,990
是不是啊 就算你小于六也不一定有解 但这是个必要条件 你桌面上这14张牌必须种类小于六种 你才有可能会有解
51
00:09:07,260 --> 00:09:22,420
这是我们得出的一个结论 对吧 那么问题来了 你在做程序设计的时候 你洗牌是随便洗啊 你是给所有的位置随机的分配牌啊 所以最后的这14个位置你分配什么牌都有可能 因此它的种类有可能是一种两种三种四种一直到14种
52
00:09:22,710 --> 00:09:31,430
那么你小于六种的可能性到底有多少呢 这个问题很难算 所以啊 我们采用了一种计算机模拟的方法
53
00:09:32,110 --> 00:09:41,910
我们呢 让计算机帮我们做一个模拟 我们来算一算这个到底啊 这14张牌小于六的可能性有多大 具体的模拟方法是这样的
54
00:09:42,210 --> 00:09:49,610
首先呢 我们先让15种 每种18张牌 一共是270张牌 我们让他做一个乱序
55
00:09:50,320 --> 00:09:56,640
做一个乱序 做完了乱序之后 我们统计 我们统计前14张
56
00:09:57,600 --> 00:10:03,280
全14张的种类啊种类n我们统计一下这个种类n
57
00:10:03,750 --> 00:10:11,390
如果呢 这个种类n是小于等于六的 那么我们就让一个叫做成功次数的变量 我们让它加一
58
00:10:12,200 --> 00:10:19,120
那加一这样呢 我们把整个的这个循环呢 我们做1万次 我们做1万次循环
59
00:10:19,980 --> 00:10:30,220
做完了1万次循环之后 我就可以数出来 我说你到底成功了多少次了 对不对 那我就大概的能够了解你前14张牌 它的种类数小于等于六的概率有多大
60
00:10:30,650 --> 00:10:39,770
为了让这个问题看得更加明确一点 我们统计了成功的次数 之后我们再把整个的这个事啊 我们统计一个成功的次数
61
00:10:40,710 --> 00:10:52,390
统计这个成功的次数 然后我们再把它做1000次的循环 我们再看一看这1000次循环之中成功的次数有什么样的一个分布
62
00:10:52,830 --> 00:11:04,470
那么最后呢 通过计算机的计算啊 我们就得出了这样的一个图像 大家可以看一下结果 这个横坐标呢 就是我做1万次计算之后前14张牌 它的种类数小于等于六的次数
63
00:11:04,720 --> 00:11:15,240
是吧 他呢就表示的是你有可能是有解的这个次数呢啊 我们会发现大约呢都是在40-70之间
64
00:11:15,680 --> 00:11:31,360
那么纵坐标呢是它出现的一个频率啊出现的一个频率 比如说成功40次出现了几次 成功50次出现了几次 成功60次出现了几次 最终我们发现的大约是满足这样的一个正态的一个分布的
65
00:11:31,610 --> 00:11:43,330
而且这个正态分度呢 我们可以具体的去计算一下 它的这个期望值平均数大约呢是等于53而它的标准差大约是等于七
66
00:11:43,700 --> 00:12:03,180
换句话说呢 从平均来讲 如果你最后得到了这样的一个残局的话 那么在1万局中有可能有解的只有53次 那你能告诉我你成功的概率有多大吗 成功的概率p它就大约是0 5%是吧 1万次里面只有53次可以成功的 那么概率大约是0 5%
67
00:12:03,540 --> 00:12:23,380
当然了 他有一个标准差七是吧 也就是说呢 我们一般认为啊 这个值超过平均值加两个标准差的概率不太大 是吧 所以我们认为呢 这个更好的一个说法是你成功的概率会小于五十三加十四 大约是小于0 7%那什么意思呢 就是如果你遇到了这种
68
00:12:23,500 --> 00:12:38,460
残局的话 在1000局中顶多有七局是有可能有解的 这是顶多是吧 但是事实上的 就算是你发现最后这14张牌 它的种类数小于等于六 也不见得是有解的 它只是一个必要条件
69
00:12:38,850 --> 00:12:50,170
而且呢 你也不一定会达到这个残局 有可能在之前的时候游戏就已经结束了 因此呢 实际通关的概率更应该是小于这个 可能是分之0 01/0 1都是有可能的
70
00:12:50,510 --> 00:12:59,150
也就是说呀 这个游戏之所以通不了关 并不是程序员故意设计让你通不了关 而是因为他偷的懒 对吧 他很多情况下就是无解的
71
00:12:59,390 --> 00:13:07,590
而且呢 到底有没有解 这跟他第一步就是设计卡位很有关系 你可以想象一下 如果把所有的牌都平铺在桌面上 那保证是有解的
72
00:13:07,810 --> 00:13:21,770
对不对 但是呢 如果你把这些牌一个一个竖着躲起来 那游戏的可能性就非常非常低了 对不对啊 所以呢 这个程序员偷了懒就造成大家怎么玩也玩不过去 是吧 但如果我要设计游戏啊 我肯定不会这么偷懒的 我一定会让这个游戏一定游戏
73
00:13:22,090 --> 00:13:33,730
那怎么做到才能让他一定有解呢 只要你改进一下就行了 第一个改进就是在你设计卡的位置的时候 你一定要有一个什么呢 你一定要有一个解锁的逆序
74
00:13:34,610 --> 00:13:51,890
啊 什么叫解锁的逆序呢 就是说你首先呢先设计好所有的位置 对吧 设计完了之后 你先设计一个解锁的方式是吧 点完上面 点下面的那个寸解锁的顺序 然后把这个顺序再倒过来是吧 首先找到了一个能够解锁的一个顺序 这是第一步
75
00:13:52,380 --> 00:14:06,060
第二步呢 洗牌的时候 我不会把这270张牌大洗牌 我会怎么做呢 我会这么干 我会想让你在两个步骤中选一个啊 第一个步骤就是找出一组牌 我们知道一组牌也就是三张吧
76
00:14:06,700 --> 00:14:11,940
找出一组牌了 这三张怎么样呢 我们让他两张两张
77
00:14:12,670 --> 00:14:18,710
进入临时的临时的这个卡槽中两张进入临时的卡槽中
78
00:14:19,080 --> 00:14:30,800
而一张 我们把它放在刚才这个解锁的卡位之中啊 这个意思是什么呢 其实啊 我就是把消除的过程递过来了
79
00:14:31,180 --> 00:14:47,180
消除的过程就是 如果你卡槽里面已经有两张一样的了 然后你在这个桌面的卡位上再点一张过来 这样你不就消除了吗 现在把它倒过来 我就先找一组三张一样的 然后把其中两张放在临时的卡槽里面 把另外一张放回到卡位之中 这样我不就添了一个卡位吗
80
00:14:47,540 --> 00:14:56,460
或者你做第二个步骤 这第二个步骤是什么呢 就是我们在临时卡位中 那在临时槽中我们找一张卡
81
00:14:56,890 --> 00:15:16,530
我们找一张卡 我们把它放回到这个卡位之中啊 你在这两个步骤之间反复的切换就可以了 要不然你就找一组牌 然后让这组牌的两张放临时卡槽中 把一张牌放到那个某一个卡位上 对吧 要不然那你就在用临时槽中拿一张卡放在这个卡位上 在这两组之间你随机切换
82
00:15:16,770 --> 00:15:35,370
当然了 如果卡槽已经满了 你就不能做第一个步骤 你只能做第二步骤 如果卡槽已经空了 你就不能做第二个步骤 只能做第一个步骤 你只要反复随机做这几件事 那么你就可以把所有的这个解锁的这个卡位填满 你填满了之后再给别人玩 别人就一定是有解的 怎么样 我这个游戏设计师还是比较负责任的吧
83
00:15:35,620 --> 00:15:40,060
大家如果喜欢我的视频 可以在西瓜视频里关注我李永乐老师
西瓜视频观看:《史上最难小游戏“羊了个羊”深度剖析!过不了关是智商有问题吗?》
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com