233. 第一个电脑上的游戏:太空大战

在电脑发展的进程中,还有一股很强大的力量是电子游戏。在前面讲的那些节目里,一直都在说电脑的发展都是政府和企业的推动,一般来说要么为了做科学,军事上的研究,要么为了让电脑用在公司业务上。实际上,我认为还有一个很重要的驱动力是——游戏。

对大部分普通人来说,我们玩电脑就是为了找乐子,我现在相信99.99%的人玩电脑和手机的用途就是为了玩游戏,看视频,肯定不去做什么科研。我觉得这非常符合人性,如果超过10%的人用电脑或者手机是为了做研究,那这个社会肯定出了问题。

现在已经有专门用来玩游戏的电脑了,比如任天堂,微软的XBOX,SONY的PS,(多说一句,我觉得下一代主机,SONY要被微软打个半死,前两天我看了SONY的发布会,觉得一点诚意都没有,现在PS5长啥样还不清楚,兼容性好不好没说,人家微软那边都已经搞拆机测评了,如果大家只买一台机器的话,就买XBOX。对SONY有特别信仰的另说。)再说当年的历史,在1970年代的时候,肯定还没有专门给游戏做的电脑,这一期我就来讲讲初期的电脑是如何用来玩游戏的。

有一本很出名的书是Steven Levy写的《Hackers》,这本书里讲了这样一个故事:在MIT这个学校里,有一个组织是做模型的,主要是做铁路模型,这个组织叫“铁路模型技术俱乐部”(Tech Model Railroad Club),这个俱乐部到今天还存在,如果大家用这个当关键字在YouTube上搜的话,是可以搜到视频的。我也在公众号和B站里传一份,这个视频是2012年拍的。可以看到这些模型做的是真栩栩如生。大家看一眼视频就知道了,不止铁路,火车做的栩栩如生,连周边的房子,电车,等火车过去再开走的小车也非常的精确,这一点让我觉得太NB了。

搞这个实验室的人大部分都是MIT的教授和学生,其中两位非常著名的分别是John McCarthy和Marvin Minsky。这两位教授大家一定要知道,原因是现在人工智能这么火,人工智能就是John McCarthy提出的。我来讲个故事吧,在我的电台里,曾经讲过一期《十年学会编程》,电台的122期,这篇文章的作者叫Peter Norvig,非常厉害。

这个人最喜欢推广Python语言,在2002年,他去MIT演讲,当然是推广python语言,演讲的题目是Python是一种Lisp。演讲结束以后,要进入提问环节,他很虔诚的问了一位满头凌乱的白发,邋遢的白胡须,就像是从旅行团中落下的游客,完全迷路了一样,顺便来这里坐下休息一下的样子。Peter Norvig很关心的问:John,你有什么问题么?

然后,John McCarthy只问了一句话,这个问题是:”if Python could gracefully manipulate Python code as data.”Python能不能像数据一样处理自己?Peter Norvig想了一会儿,回答:不能。然后,他静静的等待着John McCarthy下一个质疑,但是老人没有再说一句话,此时,无语已胜千言。

虽然Python肯定算不上一种Lisp,但是我觉得Ruby是一种可接受的Lisp 🙂

DEC公司,前面电台里才讲过的公司,他们在1961年9月送了一台PDP-1电脑给这个铁路模型技术俱乐部。PDP-1大概有3台冰箱那么大,但是是世界上第一台可以和用户互动的计算机。这台电脑有一个键盘和一个图形显示器。这群学生编程最好的是Steve Russell,他是John McCarthy的学生。

举个例子来说明一下Steve Russell编程有多么厉害吧。Lisp是函数式的编程语言,但是这门语言在推出的时候并没有打算设计成编程语言,只是为了用更简洁的方式定义图灵机,Lisp的书写方式仅仅为了满足论文写作的需要,发明人John McCarthy本没有想过用它来编写Lisp程序并在计算机上运行。最后是John McCarthy的一个学生Steve Russell做出了一个Lisp的解释器,之后这门语言才在计算机上得到实现。在做之前,John McCarthy还特别建议他的学生,要注意理论和现实之间的差距,不一定能写出来的。但是牛人就是能变成现实。

他不但做出了Lisp,还做出了世界上第一个可以跑在电脑上的游戏《太空大战》,后来UNIX上移植的第一个游戏也是《太空大战》,有人说UNIX的作者是为了玩这个游戏才做出的UNIX,这个也没法考证。但是很容易考证的是,Steve Russell的老师是John McCarthy,他后来也当了老师,去了西雅图的一个叫 Lakeside School的中学当编程老师了,在1968年,他有两个学生比较出名,一个是Bill Gate,一个是Paul Allen,他们在这里学习如何使用PDP-10大型机。

我觉得这是一种长期的文化,可能需要长期的积累。大家的老师什么样,我不清楚,但是我知道我的老师是什么样。我总是想起我的生物老师,教我们的时候,要退休了,他也不懂生物,还有残疾。当时我们太蠢了,不清楚发生了什么事情,就觉得这人怎么能当老师呢?后来我慢慢知道了,他年轻时受了十年非人待遇,没结婚当了老师,然后那十年,老师很倒霉,就去山里炸石头,不知道因为被炸了,还是被打的,反正腿有了毛病。后来平反了,又回来当老师,年轻时被他的学生打,后来我们这群笨蛋倒是不敢打他,但是也瞧不上他,还学他一瘸一拐的走路。因为他要评一个什么职称,要拿退休金,必须要上课,据说以前他教语文的,被折磨了十年,脑袋也不太好了,就来教一些生物这种不太重要的课。后来,他也没熬到退休,人就去世了,这一辈子就这样过去了。我已经忘记他的名字了,只记得他姓王,因为他腿残疾了,也没法骑自行车,就一步一步的挪到学校来给我们上课,结果我们所有的SB孩子,都不尊重他。我经常想起这个老师,可是再也没机会跟他说声对不起了。

再来说那个Marvin Minsky教授,他和发明Lisp的John McCarthy是同事,两人都获得了图灵奖。他当时发明了一种可以在显示器上画图的方法,用这种方法可以在PDP-1的显示器上形成漂亮的图案。别的学生都用他这种算法画图,结果Steve Russell呢,用这个算法画宇宙飞船,画完宇宙飞船就开始想怎么搞这个飞船的轨迹。于是大家就说那你搞个游戏出来吧,他也夸下海口,就是不动手。

当别人问他你怎么还不做游戏呢?他就说,这个游戏还有一个算法没搞定,搞不定就没法动手。别人就问他啥算法没搞定?他说正弦函数。俱乐部的一个家伙说,这事他来搞,这个家伙叫Alan Kotok,他认识一个DEC公司的员工,那个员工正好有正弦函数的代码。然后Alan Kotok把代码拿回来,告诉Steve Russell说你赶紧干活。

在1961年的圣诞节,Steve Russell天天研究这个游戏,花了好几周的时间,先做了一个控制面板,这个面板上有控制方向和加速,减速,转向的按钮。一个程序用来生成飞船,另一个程序用来生成导弹。如果导弹和飞船重合了,就会发生爆炸。到1962年2月,这个游戏终于完成了。

那时候还没有源代码收费这一说,这个游戏一完成以后,就有了很多复制。作为一个开源项目,大量的人来改进代码。一个叫Dan Edwards的人给游戏加入了万有引力系统,星球会对飞船产生引力,如果飞的太近了,就把飞船吸进去。

还有一个叫Peter Samson的人认为星球要忠于现实,于是他做了一个软件,把星球都按照天文学中的图进行了重新设计,还模拟出了每颗星的相对亮度。随着飞船的前进,星空会慢慢的向后移动。

在这种合作开发的合作下,开发者还做出了许多其它的贡献。有个做出了一个类似作弊的功能,当发现敌人太多了以后,可以按一下,进入第四维空间,然后就消失了。但是从第四维空间出来到了哪里,可就不好说了,这个是随机的,有可能一出来就碰上一个导弹,也许一出来就撞向太阳。还有两个家伙做出更好的改进。当两个人对打的时候,用Steve Russell设计的那个键盘不舒服,这两个家伙就做了两个遥控器,这可以看作是最初的手柄,有了这两个遥控器,人们可以舒舒服服的坐在椅子上玩游戏了。

这个游戏的流传非常的广泛,以至于面向对象这个词的发明者,同时也是SmallTalk的作者之一Alan Kay说:“在任何有可能接电脑显示器的地方,《太空大战》这个游戏就自然而然的流行开来。”

《太空大战》这个游戏非常厉害,后来催生了世界上第一家以电脑为主要设备的游戏厂商雅达利,这个就是我下一期要做的内容了。

节目的最后再给我录的视频做广告。lmzdx.com

《233. 第一个电脑上的游戏:太空大战》有一个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注