西瓜视频观看:《史上最难小游戏“羊了个羊”深度剖析过不了关是智商有问题吗?》,我来为大家科普一下关于李永乐老师讲游戏?以下内容希望对你有帮助!

李永乐老师讲游戏(李永乐老师深度剖析史上最难小游戏羊了个羊)

李永乐老师讲游戏

西瓜视频观看:《史上最难小游戏“羊了个羊”深度剖析!过不了关是智商有问题吗?》

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

大家如果喜欢我的视频 可以在西瓜视频里关注我李永乐老师

西瓜视频观看:《史上最难小游戏“羊了个羊”深度剖析!过不了关是智商有问题吗?》

,