Scratch第65讲:24点小游戏-想象版

网友投稿 2019-10-25 13:24

什么是想象版,就是CC哥光用脑子想了,没有真的编程!是不是有点尴尬,不过CC哥以后还是会抽时间把程序写出来的,大家放心。不过这一讲里可真的是只有想象,没有代码。

相信大家都玩过24点,CC哥就特别不擅长24点,我觉得24点就是跳跃思维的一种能力,能够迅速的尝试不同的算法,就是经验加跳跃思维的能力。CC哥的逻辑思维能力很强,但是跳跃思维确实不够,而跳跃思维往往也是人生发展过程中的一个重要能力。因为跳跃思维往往能帮助你打破现有的思维框架,找到另辟蹊径的解决方案。不论是搞科研,做生意,甚至玩金融,跳跃思维都是你致胜的一个有力武器。

不说废话,CC哥今天想用脑子想想编一个Scratch的24点游戏,两个关键词:一是用计算机来算24点,一是用脑子想,而不是动手做。

之所以用脑子想,而不是上来就动手,是想告诉大家,知道怎么做,比动手做要重要很多。让我们一起来尝试一下这个思维的旅程吧。

https://cdn.china-scratch.com/timg/191027/13241C255-0.jpg

用计算机来做24点,首先就要限定好条件,编程是严谨的,没有边界,那么就没有程序。我们平时做事情的时候,往往会忽略一些条件,其实条件是真实存在的,只是因为是常识,我们把他忽略而已。比如如果我问你早上醒来第一件事是什么?有人说起床,有人说上厕所,有人说洗脸刷牙,五花八门的答案,但实际上醒来的第一件事是睁眼!但是因为睁眼是常识,common sense,所以很多人就把它忽略了。而计算机不行,他需要我们在做每一个程序的时候,都要先做第一件事,把边界确定下来,如果不这样做,你的程序就可能有bug了,想象一下,早上醒来,你闭着眼去上厕所,刷牙会有什么后果。

如果想免费获得CC哥的讲座中的程序代码以及游戏素材,可以通过扫描二维码关注《跟我学Scratch编程》,然后点击获取代码即可。

24点的编程边界是什么:先确定规则:

1:数字,我们只做1~10。(其实也可以做到K,无非是多算几种组合,计算机也没所谓的)

2:运算方法,我们只用加减乘除(除法只算整除)的四则运算的整数运算。(排除乘方开方以及分数运算)

限定这两个条件是因为,这是我们正常经常玩24点的规则,另外编程也相对简单些。

有了规则,那么最关键的问题来了,算法呢?计算机该用什么方法来算呢?

如果是人,通常这会我们首选用的是经验和技巧,这里面有一些固定的思路:

常规的比如:

3*8=24,4*6=24,2*12=24,24*1=24。

频率略低一些的:

25-1=24,23+1=24,22+2=24,15+9=24,28-4=24,36-12=24。

有了这个思路,再想办法把四个数字尽量往上面的去靠,看能不能找到解。

但是计算机不会象人一样思考,计算机最厉害的就是速度快,但是并不聪明,所以计算机就用最笨的方法来做,穷举法!把所有的组合都来一遍,就知道答案了。

根本宗旨知道了,那么穷举法怎么做呢?仔细思考,其实这就是一种排列组合的穷举,只不过就是一种相对有些复杂的排列组合,如果把这个排列组合的方法想清楚了,那么程序就很容易编了。

24点的组合方法看似很乱,其实还是有规律的,首先:

1:24点最终是由两个数字运算得来的,我们假定是A和B。

2:那么A和B的任意一个数字,要么是4个初始数字之一,要么是其中两个数字,或是3个数字运算得来的,我们假定这个由三个数字运算得来的数字是C。

3:C如果是由3个数字运算得来,那么这个C也可以理解成其实是由2个数字运算得来的,其中一个是初始数字,另一个是另外两个初始数字运算得来的。

https://cdn.china-scratch.com/timg/191027/13241G460-1.jpg

理解了之后,我们就可以考虑用程序怎么实现这种算法了:

1:给出的四个数字中,首先调出两个数字来,由这两个数字进行加减乘除所有运算,再把得出的数字跟剩余的两个数字组成三个数字。

这样一共会得到多少组是3个数字呢?48组!

解:4个数字取两个有多少种取法呢?小学学奥数的就知道,用C(4,2)的公式做,C(4,2)=A(4,2)/A(2,2),答案就是6种。但是考虑到取出来的数字,减法和除法还是有顺序的,所以取出来的两个数也需要考虑顺序,所以还要乘以2。所以一共有12种。考虑到取出来的数字要进行加减乘除4种运算,那么我们一共得到48组三个数字,所以我们的问题就变成了如何把这12种三个数字来通过运算得到24的结果。

2:如果只有三个数字,我们该怎么做呢?还是取出任意的两个数字,进行加减乘除的所有运算,再把得到的数字跟剩下的一个数字组成两个数字。

这样一组3个数字可以得到多少组2个数字呢?24组!

解:一样的C(3,2),答案是3,考虑取出的两个数的顺序再乘以2,所以可以有6种取法,然后考虑到加减乘除,那么就是24组2个数字。

3:如果只有两个数字该怎么办呢?

到这一步就只有两种情况了,要么A和B做一遍加减乘除,或者反过来B和A再做一遍加减乘除。所以一共有8种可能,如果8种可能中有得到24的运算结果,那么就成功,但是如果没有得到24的运算结果。

所以一共也就是48*24*8了,一共有这么多种情况有机会组成24的运算结果。这对计算机是很小的计算量了,秒算!

现在大家对编程思路已经比较清楚了,那么用什么技巧呢?

1:用自定义命令的嵌套组合

2:取随机数的技巧

技巧有了,那效果呢?

1:24点肯定用扑克牌来表现啦。所以需要在网上找找扑克牌的造型。

2:显示答案可以用个角色去说出答案,也可以用个列表变量显示,或者做漂亮点,用造型来表现的漂亮些。

该想的都想差不多了,就剩动手做了,要不大家自己也动手做做试试。

不过事先说好,可能CC哥想的有bug,CC哥也不知道,只有过几天CC哥编程验证了才知道哈。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com