【问题标题】:How were graphical DOS Games written? [closed]图形 DOS 游戏是如何编写的? [关闭]
【发布时间】:2023-04-01 08:25:01
【问题描述】:

我一直想知道Sky RoadsTurboAladdinDuke NukemCommander Keen 6 这样的 DOS 游戏是如何编写的。我找不到好的来源。如果我用 C#、C++、Java 等编写控制台应用程序。它总是显示并保持静止。它总是文本。

  1. 他们是如何生成图形的?
  2. 是否有任何库可供使用?
  3. 他们使用什么语言?

任何好的来源将不胜感激。

【问题讨论】:

  • Duke Nukem 是使用“构建”引擎构建的,该引擎有可用的源代码 here
  • @user786653,Duke Nukem 3D 是使用该引擎构建的。 Duke Nukem 是 1991 年的 DOS 平台游戏。
  • 有人能解释一下为什么这是一个离题吗?它的编程相关。一些声望高但自尊心低的人让我恶心。
  • 我没有投票关闭它,而是投票重新打开它。不过,这个问题对于the FAQ 来说有点偶然。 《一个特定的编程问题》:你不知道怎么做图形。 “基于您面临的实际问题”:......很难说。我不会这样写游戏。如果你正在写一篇编程历史论文,那么它就是 OT。 “如果你能想象一本书能回答你的问题,那你就问得太多了”:在过去的 20 年里,我读过几本这样的书 :) IMO,你的问题在这个网站上是 50/50 的。跨度>
  • 天哪,这是一个非常有趣的问题!那时我喜欢 Borland Turbo C,但它附带的图形库实在是太慢了,以至于我不得不从我在 BBS 上交谈过的书籍和装配专家那里复制装配 sn-ps,同时我的电话费在一个月内就涨到了 400 美元。在 13h 模式下加快基本的事情,如图像 blitting 和旋转。我最终投票决定重新开放。多么有趣!为什么所有最有趣的问题总是被关闭?

标签: graphics dos


【解决方案1】:

Assembler、Pascal 和 C 是流行的语言。图形是通过直接与显示硬件接口生成的,例如Color Graphics Adapter。 (CGA)

可能有图书馆,但不像今天这样,而且图书馆通常不在公司外部共享。

可以在此处找到与 1988 年有关的资源:

https://web.archive.org/web/20170910230837/http://gd.tuwien.ac.at/languages/c/programming-bbrown/advcw1.htm

【讨论】:

  • 自从您发表评论后重新阅读了该问题,我可以看到这更符合实际提出的问题。
【解决方案2】:

他们是如何生成图形的?

那个时代的游戏通常直接写入图形硬件。它们映射到内存中的一个特殊位置,并像数组一样直接操作像素。

有什么库可以使用吗?

声音和网络驱动程序库很常见。哪些,我不知道 - 由于操作系统本身提供了Hardware Abstraction Layer,这些天您不必在游戏中提供驱动程序。

除此之外,还有 C/C++ 语言标准库。直到那个时代之后,游戏中间件库才变得如此普遍。

中间件的例子有:

  • 物理库,例如Havok
  • 图像格式加载器库如DevIL
  • 声音格式加载器库,例如FMOD
  • 视频处理程序库,例如Bink

然而,DOS 时代是Game Engine 的流行诞生。那天的例子包括:

他们使用什么语言?

C 和汇编非常普遍。

很少有Pascal,或者更多其他更晦涩的语言。


如果您想像在 DOS 时代那样开发低级软件,那么为旧游戏系统编程可能是个好主意。 NES、C64、Gameboy 和 Gameboy Advance 编程都要求作者使用直接硬件访问,并要求您了解 C 或某种形式的汇编。您可以使用模拟器来运行和调试您的成品,因此它不像当前的控制台那样高门槛。

如果您只是想开发一个 DOS 风格的游戏,现在您可以使用大量的图形和声音库。我建议不要像他们那样做事,而是使用其中一个库。 AllegroSDLPyGameOpenALOpenGL 等等。

您仍然可以进行低级图形编程,但您的游戏运行速度会更快,出现问题时将获得更好的技术支持,并且您的游戏将是跨平台的。

【讨论】:

  • +1 我喜欢你的回答,只是 OP 不是问现在如何做一个新的 DOS 游戏,而是问当时制作了多少旧 DOS 游戏。就像某个历史学家调查 100 年前人们是如何耕种的,你说,是的,但最好使用拖拉机。 :)
  • @Amigable:哈哈!你最好用拖拉机;)我把这句话解释为他们拿起锄头开始耕种田地:“如果我用 C#、C++、Java 等编写控制台应用程序。它总是显示并保留仍然。而且它始终是文本。”
【解决方案3】:

您可能混淆了控制台/终端的概念,即由带有一些转义命令的文本流提供的纯文本窗口与 DOS 计算机本身。控制台不是 DOS,DOS 也不是控制台。

控制台负责显示其客户端应用程序通过输入和输出流发送给它的文本,向上滚动旧文本并静态显示它。控制台是图形硬件之上的一层,是操作系统的一项服务,您需要它来显示图形。在 DOS 时代,程序会直接写入图形缓冲区,绕过您看到的纯文本显示。

另一方面,现在存在控制台(例如 xterm 或 windows 命令提示符),它们与 DOS 无关。

【讨论】:

  • 不,游戏机是电子游戏,就像 Xbox 360 一样...嘘... :-) 开个玩笑。
【解决方案4】:

真正古老的游戏有时是用汇编程序编写的,图形库也是如此。但是 C/C++ 也被大量使用了。

那时我也尝试编写一些图形/游戏代码,我使用了 C、Basic 和 Assembler。我最喜欢的是graphics mode '13',它是 320x200 的 256 色。该图形模式为您提供了两个 64000 字节的缓冲区,每个字节代表屏幕上的一个像素。一个用于绘图的缓冲区,一个用于显示的缓冲区。

这种非常高效的模式让您可以轻松绘制像素(每个像素为一个字节)。由于屏幕的大小,您可以通过位移 Y 坐标并将 X 相加来轻松找到正确的像素。由于有两个缓冲区,您可以在背景中绘制,并在想要绘制时交换“显示指针”下一帧。

但我承认,这已经是 VGA 模式了。我在真正旧的显卡上没有取得太大的成功。 CGA 更难,写入 Hercules 图形适配器真的很麻烦,我从来没有掌握它。

在这里你可以找到一些旧的 DOS 游戏,包括源代码(它们都不是我的): http://www.classicdosgames.com/misc/source.html

【讨论】:

  • 如果您有一台带有 ISA 的计算机,但它可以运行 Linux,您甚至可以从 Linux 为 Hercules 编写代码。 :) X11 甚至支持 Hercules。当然,这些天找到监视器是一个问题。 :)
  • 尽管 VGA 硬件有 256K 的 RAM,但该内存被组织为四个 64K 的存储库,并且模式 13h 仅限于使用其中之一。还有其他几种 320 点模式(320x200 或 320x240),有时称为“模式 X”,其中每组四个像素由每个存储区的一个字节表示。对于某些类型的渲染任务,布局确实很麻烦,但对于其他渲染任务来说效果很好,因为显示硬件包含一个功能,可以将一组四个像素作为一个单元写入一个统一的值或值从另一组四人中阅读。
猜你喜欢
  • 2020-08-05
  • 2010-10-20
  • 1970-01-01
  • 2010-09-09
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多