如何编写图形DOS游戏?

时间:2011-09-18 09:38:03

标签: graphics dos

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

  1. 他们是如何生成图形的?
  2. 是否有可以使用的库?
  3. 他们使用了哪种语言?
  4. 任何好的消息来源都将受到赞赏。

4 个答案:

答案 0 :(得分:17)

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

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

可以在这里找到与1988年相关的资源:

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

答案 1 :(得分:7)

  

他们是如何生成图形的?

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

  

是否有可以使用的库?

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

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

中间件的例子是:

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

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

  

他们使用了哪种语言?

C和装配非常普遍。

更少Pascal或更多其他更加模糊的语言。


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

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

您仍然可以进行低级别的图形编程,但是您可以更快地运行游戏,在事情中断时获得更好的技术支持,并且您的游戏将是跨平台的。

答案 2 :(得分:4)

你可能正在混淆控制台/终端的概念,即带有一些转义命令的文本流提供的纯文本窗口,以及DOS计算机本身。控制台不是DOS,DOS不是控制台。

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

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

答案 3 :(得分:2)

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

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

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

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

在这里你可以找到几个旧的DOS游戏,包括源码(没有一个是我的): http://www.classicdosgames.com/misc/source.html