分享两个好玩的编程项目

Scratch

Scratch 是麻省理工媒体实验室终身幼稚园组开发的一套计算机程序开发平台,旨在让程序设计语言初学者不需先学习语言语法便能设计产品。

是的,你没有看错,它是给幼儿园的小朋友准备的编程软件,我是大二的时候在上哈佛CS50公开课知道的,网易公开课上有翻译完的版本,讲的课很有意思。

让我们看一下这款编程软件的界面。

就像拼图一样,把 if else,repeat 语句拼接在一起,然后还可以导入声音,图片。看起来简单,但能做出很多有趣的东西。让我们看一下一些作品。

当时知道这个的时候印象深刻,人家幼儿园就接触了,而自己大学才知道。后来,上数据结构课的时候,老师要求每个人做一个 PPT 讲一个排序算法。自己突发灵感,就用 Scratch 写了一个讲解归并排序的。

归并排序

先不要考虑怎么排序,让我们想一下归并,就是如果是两个有序的数组,怎么合并成一个大的有序的数组。

我们只需要遍历两个数组,然后每次选较小的数放到新数组中就可以。看个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
初始状态,两个指针指向开头元素
1 3 6
^
i

2 5 10 11
^
j

上边,i 指向的更小,把当前元素放到新数组, i 后移
1 3 6
^
i

2 5 10 11
^
j

1

上边,j 指向的更小,把当前元素放到新数组, j 后移
1 3 6
^
i

2 5 10 11
^
j

1 2

上边 i 指向的更小,把当前元素放到新数组, j 后移
1 3 6
^
i

2 5 10 11
^
j
1 2 3
...... 就这样一直比下去就是一个有序的大数组了
1 2 3 4 6 10 11

是的,上边这个就是归并排序的基础了,前提就是有两个有序数组,我们就可以得到一个大的有序数组。知道了这个,就可以解决 1 43 4 3 66 这样乱序的数组怎么排序了,下边就是我当时用 Scratch 做的。做好的 Scratch 可以传到官方的网页,也可以转成 .exe 可执行程序。

TensorFlow.js

做过深度学习的一定知道,TensorFlow 这个 python 框架。在上学期深度学习结课的时候,同学介绍了 TensorFlow.js 这个框架,为什么加了 .js 呢?是的,深度学习也可以用 js 来写了,也就意味着深度学习的一些模型可以直接在浏览器或者服务器端 node.js 上跑了。甚至可以直接把 python 的模型转为 js。

深度学习加前端,想想是不是还有一些小激动呢,而官网给的一些 Demo 也是让人觉得想象空间非常大。最令我印象深刻就是下边的这款吃豆人游戏了,它可以通过视频识别来自定义键位,然后实时的通过视频来控制吃豆人。

现在说到 PAC ,就总是想到电影《黑镜:潘达斯奈基》,看的第一部交互式电影,和电影中的人物互动的感觉不错,里边关于吃豆人的解释,令人回味无穷。

There’s messages in every game.
在每个游戏中,都有信息。

Like Pac-Man. Do you know what PAC stands for? “Program and Control.”
比如吃豆人。你知道吃豆人(Pac-Man)名称里的“PAC”代表什么吗?“编程与操控”。

He’s Program and Control Man. The whole thing’s a metaphor. He thinks he’s got free will but really he’s trapped in a maze, in a system. All he can do is consume. He’s pursued by demons that are probably just in his own head. And even if he does manage to escape by slipping out one side of the maze, what happens? he comes right back in the other side.
吃豆人就是“编程与操控人”。这整个事情就是一个比喻。吃豆人以为自己拥有自由意志,但其实他被困在一个迷宫里,一个系统里。他所能做的一切就是消耗。他被魔鬼追赶,但这些魔鬼可能只在他的头脑里存在。即便他成功逃出迷宫,从迷宫的一侧悄悄溜出去,接下来发生什么?他又在另一侧直接回来了。

People think it’s a happy game. It’s not a happy game. It’s a fucking nightmare world, and worst thing is it’s real and we live in it. It’s all code. If you listen closely, you can hear the numbers. There’s a cosmic flowchart that dictates where you can and where you can’t go.
人们以为这是一个快乐的游戏。但这并不是一个快乐的游戏。这他喵的是一个噩梦的世界,而更恶心的是它是真实的,并且我们就生活在其中。所有一切都是代码。如果你仔细聆听,你会听到数字。存在一个宇宙流程图,它告诉你能去哪里,不能去哪里。

I’ve given you the knowledge. I’ve set you free.
我已经将知识传授给你。我已经解放了你。

哈哈哈,扯远了,回到重点。看了这个 Demo 以后,小组讨论中,我突然想到小时候玩的打砖块的游戏,这个也可以很好的结合在一起呀。

使用的是 MobileNet 模型,是谷歌 17 年 4 月针对手机等嵌入式设备提出的一种轻量级的深层神经网络,于是就有了下边的程序。

线上体验地址是 https://wind-liang.github.io/tfjsboard/,用电脑打开。

windliang wechat