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

用python写一个魂斗罗 嗨!多一嘴: 童年玩过的经典游戏中,魂斗罗当属经典啊,最近用python写出来,赶一波回忆杀哈哈哈哈哈哈哈~ tips: 600多行代码,耐心耐心耐心!( 偷看*-||| 1、代码实现 (1)子弹类(bullet.py) import pygame from pygame.sprite import Sprite class Bullet(Sprite): def __init__(self,game_settings,screen,player): super().__init__() . 阅读详情

点击上方“Github爱好者社区”,选择星标

回复“资料”,获取小编整理的一份资料


来源:zhihu.com/question/50076174

  • 分析

  • 总结


分析

个人觉得fc最神奇的游戏还属超级玛丽,32个关卡,每关都不同,各种隐藏要素,好像代码区才10多k,数据区10多k。反汇编看完还是不敢相信这点东西能玩一个童年… 现在helloworld的二进制都可能比这大多了。

首先128k并不小,主要消耗存储空间的不是程序。当然对于128k来说程序大小自然也要考虑,鉴于fc是八位机而且FC采用的是CISC处理器,一条指令就能完成很多事情,所以程序的大小也就现代64位RISC处理器的十几到几百分之一。

资源才是大户(包括图像、音乐、地图数据、关卡数据等等)。就拿图像和音乐来说,图像在没有压缩之前 消耗存储空间和像素深度和大小有关。FC上的图像,像素深度就2bit的索引而已 ,现在广泛使用的真彩色是24bit,包含alpha的需要32bit,这里就差了12倍到16倍。图像大小更是差距巨大,FC普遍一个角色也就是宽高十几个像素而已,与现在动辄宽高几千像素图像资源相比差了数万倍到数百万倍,所以图像资源消耗的存储空间至少差了5~7个数量级。

音乐的话,FC采用的是8位midi音乐,而现在普遍用的是PCM音乐。类比到图像中,就像矢量图像和位图的区别。总之PCM音乐的大小和采样深度、采样率、通道数以及长度有关,midi仅仅和谱子的复杂度有关,所以FC实际上对空间的要求和现代游戏相比至少差了5~7个数量级。你把128k放大10w倍到1000w倍,你就不觉得小了。

对于什么64k 3d程序什么的,这完全是两码事,FC程序小只是因为需求的资源本来就很小而已,而那种64k 3d程序是因为采用Procedural generation方法,简单的说就是通过数学来描述,而不是通过记录结果的采样,Procedural generation不光需要的存储空间极小,而且可以做到无限精度,缺点是难以描述复杂事物,并且对算力要求高,而不是用了什么外星压缩法。

总结

  1. 游戏大量复用图块,图块还使用调色板索引,好像每个像素才占用2bit。

  2. 程序员精心优化各种数据结构,每一bit存储都不浪费。

  3. 声音只存储发声通道的调制参数序列,能复用就复用。

  4. 代码全是汇编写成,直接操作硬件,基本不存在浪费的指令。

好啦,今天的分享就到这儿啦,我们下次见啦~



GitHub原创推荐•  微软开源又一力作发布!刷屏GitHub!炸了。。•  GitHub标星1.4k+,IDEA 中相见恨晚的技巧,让你的编程效率飞起来!•  还在买爱奇艺,腾讯会员?GitHub这个神器标星12.2K,强势开源,支持多个视频网站片源下载 !!•  太骚了!GitHub上重磅开源爬虫工具箱,竟然可以爬小电影!关注「Github爱好者社区」加星标,每天带你逛Github好玩的项目
基于ROS2 Humble与Livox Mid-360的双雷达点云融合实战解析 本文详细解析了基于ROS2 Humble与Livox Mid-360的双雷达点云融合实战方案。从环境搭建、驱动安装、双雷达配置、外参标定、时间同步到点云融合核心实现,全面介绍了技术要点与避坑指南,并提供了工程化部署与性能优化建议,助力开发者高效实现高精度点云合成应用。 阅读详情

相关推荐

Hyper-V显卡直通实战:手把手解决Windows 11虚拟机错误码43(附完整参数配置)

本文详细解析了在Windows 11 Hyper-V虚拟机中配置显卡直通时遭遇错误码43的根源,并提供了从环境检查、核心PowerShell命令(如Set-VMGpuPartitionAdapter)配置到虚拟机内驱动替换的完整实战解决方案,帮助用户彻底解决显卡驱动无法加载的问题。

weixin_29238147的博客 898

Python魂斗罗小游戏源代码

Python魂斗罗小游戏源代码源程序,主程序Contra.py,游戏简易使用说明:A:向左,D:向右,W:跳起,S:趴下,J:射击,P:退出程序。 程序运行截图: Contra.py ''' 公众号:Python代码大全 ''' import pygame import sys from pygame.locals import * from settings import Settings from game_player import Game_Player import game_functions

Python代码大全 1万+

基于CNN的表情识别(FER)pytorch实现

Report for FER Jian Tang Abstract 我们使用卷积神经网络(CNN)实现了baby的面部表情识别(FER)。 数据上,我们获取了开源FER数据集FER2013[1],besides我们使用爬虫获取了baby相关的人脸图片,进行了手工分类标注以形成一个全新的baby FER数据集。 模型上,我们首先复现了Luan[2]的工作,即参考Kuo[3]在CVPR 2018上的工作并实现一个轻量的CNN网络,在FER2013上进行训练并得到了XXXX%的平均分类准确率(avg a

qq_20241587的博客 3683

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

点击上方的终端研发部,右上角选择“设为星标”每日早10点半,技术文章准时送上公众号后台回复“学习”,获取作者独家秘制精品资料作者:皮皮关链接:https://www.zhihu.com/...

这个时代,作为程序员可能要学习小程序 954

大白话系列:什么是微服务

用大白话和实际例子来通俗易懂地告诉你什么是微服务~

2401_87403086的博客 1242

Flutter:如何在Android中实现串口通信调试

本文介绍如何通过flutter_libserialport插件在Flutter中实现串口通信调试。

sg_knight的专栏 6098

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

经常看到有同学在抱怨现在的游戏、APP占用非常大的空间,基本都是 10G 起步。这让我想到初中时玩过的一款游戏魂斗罗,为什么它只有 128KB 却可以实现那么长的剧情呢?现代程序员 A 和 1980 年代游戏程序员 B 的对话:A:为什么你用 128KB 能实现这么多画面、音乐、动画?B:128KB 还不够么?其实为了表现力已经相当奢侈了,加了很多不重要的细节。A:就说你们的音乐,这个音乐,我压到最低码率的 mp3,也得至少 1MB 吧。B:你怎么压的?一首背景音乐怎么可能超过 1KB。

z1ztai的博客 759

HTML流光爱心(完整代码)

HTML语言实现红蓝色流光爱心效果的完整代码。

AIGC 1万+

为什么魂斗罗只有128KB却能实现那么长的剧情有答案了

PPU 首发公号:Rand_cs 本文继续讲述 NES 的基本原理,承接上文的 CPU,本文来讲述 PPU,较为复杂,慢慢来看。例子基本都是使用的魂斗罗,看完本文相信对那问题“为什么魂斗罗只有128KB却可以实现那么长的剧情”有一定答案。废话不多说,直接来看,先是 PPU 的地址空间部分。 地址空间 PPU 有自己的总线,再来看看这张图: 可以看出通过 PPU 总线能够访问到的地址空间主要由三部分组成:PatternTable, NameTable, Pallete,其中 PatterTable 是映

weixin_46645613的博客 3877

Yocto系列讲解[入门篇]36 - 编译arm虚拟机qemuarm

玩一下qemuarm,因为之前用的x86架构

fulinux的博客 2571

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python)

k8291121的博客 2723

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

在《魂斗罗》的年代,硬件资源极其有限,开发者必须发挥极致的创造力,才能让游戏呈现出最好的效果。而现在,我们拥有了海量的存储空间和强大的计算性能,但很多软件却越来越“臃肿”,甚至写个简单的应用都要几百 MB。游戏的场景是由一个个“图块”拼出来的,不同关卡的布局可以复用相同的图块,只需要稍微调整排列方式,就能呈现出完全不同的关卡。而且,红白机的图像是用 8x8 的小格子拼接出来的,叫“图块”。红白机的硬件虽然性能有限,但开发者非常熟悉它的架构,会利用硬件的特性优化游戏表现,比如图形的缓存机制、音频的波形合成。

m0_61562916的博客 1045

分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理

Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。

comli_cn的博客 341

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

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

公众号:Java后端 610

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

经常看到有同学在抱怨现在的游戏、APP占用非常大的空间,基本都是 10G 起步。 这让我想到初中时玩过的一款游戏魂斗罗,为什么它只有 128KB 却可以实现那么长的剧情呢?这篇文章将会给大家讲讲这里面的奥秘~

Rocky006的博客 1300

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

点击上方好好学java,选择星标公众号重磅资讯、干货,第一时间送达 今日推荐:是时候扔掉Postman了,又一个被低估的IDEA插件出来了...个人原创+1博客:点击前往,查...

好好学java 394

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 简直太牛了!这个微信插件神器开源,怒冲GitHub排名榜第一,网友:太好用了!...
下一篇: 再见,x 雷!这款 Github 全能下载工具,很强!
公众号:【GitHub爱好者社区】
博客等级 码龄6年 353粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值