本文授权转载自知乎皮皮关https://www.zhihu.com/question/50076174/answer/1101330430

当代程序员A和1980年游戏程序员B的对话:

A:为什么你用128KB能实现这么多画面、音乐、动画?

B:128KB还不够么?其实为了表现力已经相当奢侈了,加了很多不重要的细节。

A:就说你们的音乐,这个音乐,我压到最低码率的mp3,也得至少1MB吧。

B:你怎么压的?一首背景音乐怎么可能超过1KB。

A:那你实现全屏卷轴,用了多少显存?

B:一共就只有2KB显存,多了也放不下啊。

A:……

1、我们对“数据量”无法直观认识

除非是专家,一般人根本无法估算到底多大算大,多小算小。

一般人对“数据量”并没什么概念。一篇800字的作文有多少数据量?按照GBK编码,约1.6KB,按照UTF-8编码,则是2.4KB。

只写了1个字的作文,按理来说1字节~3字节就够了。但只写1个字的word文档,有10956字节【汗】。而由于硬盘格式化要求,再多占用1332字节【再汗】。

我就写了一个字,真的什么都没干

现实中常见的产品、流行的技术,实际上和时代背景密切相关。

当你抱着15寸笔记本还嫌小的时候,1990年代初的家庭,可是一家人围着14~18寸的球面电视看的。把雪碧拿给古代人喝一口,估计他会齁得要死,必须喝点水压压惊。

当物质基础变得十分丰富的时候,一定会产生无法避免的“浪费”,这种“浪费”会进一步改变人感受的阈值,对度量的估计都变得紊乱了。

2、FC(红白机)时代的图形技术

由于早期的记忆芯片(ROM)非常贵,而且大容量磁盘的技术也不成熟,所以暂且不论硬件计算能力,仅仅是想增加游戏的总容量也非常困难。所以自然会使用符合当时水平的数据结构。

以红白机FC为例,它的分辨率为256x240。分辨率不算低,但却只有2KB显存,而且还要实现全屏卷轴效果。所以在FC设计之初,从硬件上就提供了充分利用显存的方法——使用Tile(瓦片)。

对每一个场景来说,使用若干数量的瓦片,场景用有限的瓦片拼接即可。这种“二级”表示方法能极大节约存储量。

3、音频容量和代码容量

现代音乐格式往往直接保存声道的波形,这种做法保真度高、通用性强,但很显然占用空间多,一首曲子的容量以千字节、兆字节计算。

而八位芯片时代的音频解决方案,关键是一颗专用芯片,例如FC用的理光2A03:

理光2A03

音频芯片可以产生合成音效,能提供的音色可以在一定程度上配置,但非常有限。听听FC游戏的音乐可以体会到常用的音色几乎一样。我觉得这个音频芯片最厉害的地方是可以同时播放几个音轨(但不能是和弦那种“同时”),《魂斗罗》、《沙罗曼蛇》、《忍者龙剑传》的殿堂级音乐,主要是靠多个音轨的交替配合实现的。

每个音符只要记录音色、频率和音高就足够了,音频芯片自然会识别出来。把音符按时间排列好就是“乐谱”了,可以简单理解为“简谱”。这种简谱需要的数据量十分有限,而且大部分游戏音乐都是循环播放,数据量更是小的可怜。

代码也是类似的

FC时代的游戏,没有所谓的“引擎层”,或者说引擎层就是“硬件层”。任天堂的主机完全是为游戏而设计的,瓦片、调色板、音乐、音效等基本功能已经预先考虑到了,这样一来就节约了大量底层代码。

程序员要仔细研究文档,在硬件框架下思考问题,比如如何显示图片、如何卷动屏幕等等;而且还要非常熟悉硬件底层和汇编,不要浪费代码空间。一来二去,代码也能写的非常小。

总的来说,128KB的游戏大作,在30年前稀松平常,放到现在简直就是黑科技。科技的剧烈变革带来技术指标非线性的变化,让我们的记忆和直觉彻底落伍 。

扫码加好友,加入海归Python编程和人工智能群

知乎:为什么魂斗罗只有128KB却可以实现那么长的剧情?相关推荐

  1. 为什么魂斗罗只有128KB却可以实现那么长的剧情?

    开发者(KaiFaX) 面向全栈工程师的开发者专注于前端.Java/Python/Go/PHP的技术社区 来自 | 知乎 来源丨https://www.zhihu.com/question/50076 ...

  2. 为什么魂斗罗只有 128KB 却可以实现那么长的剧情?

    大家好,我是一行~ 从小我就只需要3条命就可以通关魂斗罗,而且是魂斗罗1.2.3全通关的那种. 但是自己用代码写游戏之前,也会思考过为什么魂斗罗只有 128KB, 却可以实现那么长的剧情? 现代程序员 ...

  3. 为什么128KB的魂斗罗可以塞下这么长的剧情?

    大家好,我是小麦,小时候用小霸王玩魂斗罗的时候,三条命就可以打通关,感觉自己挺厉害的,因为魂斗罗的关数还是很多,剧情也比较长.那么,问题来了. 为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下 ...

  4. 为什么魂斗罗只有 128 KB 却可以实现那么长的剧情?

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 来自 | 知乎 链接 | https://www.zhihu.com/question/50076174 编辑 | 深度学习这件小事公众号 ...

  5. 为什么 128 KB 的魂斗罗可以塞下这么长的剧情?

    点击上方"小麦大叔",选择"置顶/星标公众号" 福利干货,第一时间送达 大家好,我是小麦,小时候用小霸王玩魂斗罗的时候,三条命就可以打通关,感觉自己挺厉害的,因 ...

  6. 为什么 128 KB 的魂斗罗可以实现那么长的剧情?

    为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下面来给新生代程序员讲讲这里面的奥秘吧. 现代程序员A和1980年代游戏程序员B的对话: A:为什么你用128KB能实现这么多画面.音乐.动画? ...

  7. 为什么 128 KB 的魂斗罗可以实现那么长的剧情 ?

    喜欢黑客技术和网络安全的,可以关注看看 为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下面来给新生代程序员讲讲这里面的奥秘吧. 现代程序员A和1980年代游戏程序员B的对话: A:为什么你用1 ...

  8. 编程黑科技:能玩几个小时的《魂斗罗》居然只有128KB

    <魂斗罗>一直是80后90后这一代人经典的童年回忆之一,曾经的无数个日夜,我们都坐在电视前搓着手柄度过. 然而,长大之后的汇智妹回头去看时,才惊奇地发现.<魂斗罗>的卡带大小只 ...

  9. 音效摸鱼还不够爽?试试IDE里打几盘魂斗罗?

    1. 前言 前几天分享了 IDEA 的马里奥插件,收到了很多私信.但是胖哥感觉这种还不够爽,今天分享的摸鱼游戏插件才是真正的回味童年. 2. 真正的小霸王 IDE 高能预警,小心使用,这个可是真的会触 ...

最新文章

  1. RDKit | 化合物活性数据的不平衡学习
  2. CodeForces - 1538G Gift Set(二分)
  3. spark 广播变量大数据_Spark基础知识(三)--- Spark的广播变量和累加器
  4. canvas笔记-lineJoin和miterLimit的使用
  5. fragment里spinner值设定_口袋里的扭力扳手 Topeak Ratchet Rocket Lite NTX测评
  6. python基础系列教程——数据结构(列表、元组、字典、集合、链表)
  7. 【造轮子】实现 memset、bzero 函数
  8. 小白也能懂的 Python 入门指南(1)——Python 的前世今生
  9. 第三章 直接连接的网络
  10. java设计四个按钮分别命名为,计算器 1.0
  11. 技术干货 | 实现模型透明化的有效技术:MindSpore可解释AI能力
  12. 操作系统真象还原实验记录之实验六:内存分页
  13. B05 - 048、ReduceTask工作机制
  14. 此情可待成追忆——九山顶畅游随想曲(九)
  15. 为什么选择0.1uF电容而不是0.01uF电容?
  16. 为什么Int类型的取值范围是2的31次方减1
  17. LINUX矩阵键盘简单介绍,介绍一种新型的矩阵键盘电路
  18. 0x80070570文件或目录损坏且无法读取 CHKDSK修复方法
  19. 计算机毕业设计node+vue基于微信小程序的西餐外卖系统
  20. 解决H5在微信浏览器中保存联系人问题

热门文章

  1. 计算机的试题步骤,计算机二级题目  做计算机二级试题,按照答案步骤,为什么word 爱问知识人...
  2. 频繁模式增长Frequent-Pattern Growth(FP-Growth)
  3. Java的四种引用方式
  4. linux 服务管理
  5. yum nginx最新版安装
  6. MySQL CAST与CONVERT 函数的用法
  7. Mybatis框架简单使用
  8. Shell命令行操作
  9. 不是美工却依然想写出美丽的CSS该肿么办
  10. 做YH更新,引发众多思考.