分享

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

 稻草人1616 2019-12-03
为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

来源于:java版web项目

个人觉得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.代码全是汇编写成,直接操作硬件,基本不存在浪费的指令。

小编也整理了21个简单易学的小游戏开发项目供大家学习实践,既可以帮助你提高编程能力,又能让你感受到游戏的乐趣!这些项目的技能要求并不高,零基础的同学也能学会哦~

编程资料获取方式:转发文章+私信【资料】

一、web前端:

1、基于HTML5 Canvas实现小游戏

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

image

此课程较为简单,基于 HTML5 的 canvas 实现了一个小游戏,着重介绍了 HTML5 游戏开发的流程及游戏开发中需要处理的东西。对 Web 游戏开发感兴趣的同学可以通过这个项目实践 HTML5 及 JavaScript 基础知识。

2、网页版别踩白块游戏

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

不同于移动端采用手指触碰,网页版需要我们点击黑块,黑块才会消失。为了使代码尽量简单,逻辑清晰,去掉了很多的事件控制按钮,刷新页面即可以开始游戏,只保留了实现这个小游戏最重要的部分代码,让初学者也能很快看懂。

3、网页版拼图游戏

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

此课程基于 HTML+CSS+JavaScript 实现网页版的拼图游戏。实现过程中将用到 HTML5,CSS3 及 JavaScript 相关知识。完成这个项目,可以进一步扎实前端基础知识。

4、基于 JavaScript 实现打地鼠游戏

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

此课程基于 HTML+CSS+JavaScript 实现网页版打地鼠,你能学到如何开发一款 Web 小游戏,从布局到编写游戏逻辑。如果你刚入门前端,这是个不错的实践练习。

5、网页版扫雷

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

此课程带领大家实现经典小游戏扫雷的网页版,通过学习该课程,可以实践 JavaScript 和 CSS 等基本的 Web 开发知识,学习如何对游戏中的对象进行抽象、封装。

6、网页版2048

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

《2048》是一款风靡一时的,非常简单易上手的小游戏。此教程带领大家使用 HTML+CSS+JS+jQuery 实现一个网页版的《2048》。

二、Python

1、200 行 Python 代码实现 2048

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

实验仅用200行的 python 代码完成2048小游戏的编写。通过本实验将学习 Python 基本知识,状态机的概念,以及编写 python 游戏的步骤。需要用户具有 Python 的语法基础。

2、Python3 实现推理游戏Bagels

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

Bagels 是可以和朋友一起玩的一个推理游戏。你的朋友想到一个随机的、没有重复的3位数字,你尝试去猜测它是什么。每次猜测之后,朋友就会给出3种类型的线索:

3、人机对战初体验:Python基于Pygame实现四子棋游戏

实验利用Python模拟AI和玩家进行四子棋游戏,利用游戏实验Pygame库,为游戏提供界面和操作支持。AI算法借用蒙特卡洛搜索树思想。通过设置AI的难度系数,即AI所能考虑到的未来棋子的可能走向,从而选择出最佳的方案和玩家对抗。难度系数越大,AI搜索范围越广,它所能做出的决定越明智。

4、用Python做2048游戏

5、基于Pygame开发贪吃蛇和俄罗斯方块

6、数独游戏的 Python 实现与破解

7、Python 实现推箱子游戏

8、Python 实现康威生命游戏

三、C/C++

1、C 语言制作 2048

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

2048是之前十分火爆的一款益智游戏。此课程将使用 C 语言完成一个2048游戏。适合对C语言有一定基础,想做项目练手的同学,本课程学习后将会了解C语言,以及绘图库ncurses的实用。本课程适合有C语言基础,希望在动手能力上得到提升的同学,熟悉模块与主流程的运行流程。

2、C++ 实现俄罗斯方块

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

此课程将用C++动手实现经典游戏-俄罗斯方块,课程难度适中,适合初学C++并且有一定基础的同学,通过课程可以掌握C++编程的基本方法以及游戏设计中的逻辑算法,既能提高编程能力,又能感受游戏的乐趣!

3、C 语言实现贪吃蛇

4、C 语言快速实现五子棋

5、C语言版 Flappy Bird

四、其它

1、Shell脚本实现打字游戏

为什么魂斗罗只有128KB却可以实现那么长的剧情?附游戏开发项目

此课程使用 Shell 脚本在终端实现了一个打字游戏,体现了shell命令的强大和实用,在项目实现的过程中学习并实践了Shell脚本编写的知识点。熟悉了read,exec,trap,local,date等命令的用法。本课程适合有一定编程基础,与对于linux有一定了解,想更加熟悉和巩固shell命令的同学

2、GO语言开发2048

以上就是我们整理的游戏开发入门项目,也非常适合新手学习,大家可以收藏起来慢慢练习~

编程资料获取方式:转发文章+私信【资料】

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多