4

我想用 C 语言从头开始编写一些简单的类似马里奥的游戏。但老实说,我不知道该怎么做,而且我找不到任何好的教程,这是免费的。

但是对于实际的问题,到目前为止,我只编写了 WinAPI 程序,因此所有事件处理和用户输入都由操作系统处理,工作量很小,但是要开发游戏,例如带有非矩形按钮的菜单、动画等,我想,在 WinAPI 中没有这样的东西可以帮助我解决这个问题,而不仅仅是一些基本的例程鼠标指针位置和按键。

那么,编写游戏的正确方法是通过为玩家、敌人甚至背景自己操作对象来编写游戏引擎的整个绘制部分,而不仅仅是使用 directdraw 输出到屏幕?

编辑:我实际上想学习如何从头开始编写游戏,因为它必须是很棒的编程经验,如果你考虑像 DOS 上的 Commander Keen 这样的游戏,它是在没有框架或库的情况下创建的,但仍然非常棒。

4

10 回答 10

9

A good approach to this would be to have a look at the SDL library. I'm not saying it's necessarily the best library for 2D games, but it's easy to get started with and the web is flooded with tutorials and open source code samples for simple homebrew 2D games written using SDL.

于 2010-06-29T20:21:58.957 回答
4

我也推荐使用 SDL,但你绝对应该看看lazyfoo教程,它很棒。

于 2010-06-29T21:32:05.060 回答
2

当我开始编程时,我开始使用 Allegro 进行编程,回到过去的 DOS 时代。它是第一个与 SVGA 库一起使用的可用库,并且具有良好的 sprite 支持。然后版本 3 来了,他们增加了对 windows 的支持(使用 GDI 和 Directy X,你可以在运行时选择使用哪个引擎)。linux 端口来了,一切都很好。

这是一个非常基本的 2D 库,它将教您非常基础的图形和动画。现在它甚至包含了非常需要的音频支持(嗯,我还记得 V 2.9X...)。它们处于第 5 版的测试版中,我认为这是一个值得您研究的有趣项目。

http://www.talula.demon.co.uk/allegro/

于 2010-07-04T10:59:32.027 回答
2

我也使用了 SDL,但尝试查看HGE。它至少需要 DirectX 8.0,因此您的应用程序只能在 Windows 上运行,但在他们的论坛上,您会发现许多关于如何将其移植到 OpenGL 的主题。在我看来,HGE 会比 SDL 更容易学习,因为 SDL 是一个低级库,你必须学习如何自己处理很多事情。HGE 更愿意开箱即用。

于 2010-07-04T10:37:13.080 回答
1

你们在说什么,WinAPI 有低级绘图例程。

尽管使用像 SDL 这样的已建立的库可能是一个更好的主意,但您可以轻松地创建自己的 WinAPI 绘图例程抽象。

然后只需创建包含所有绘图指令和解释输入的 while 循环即可。对于 2D 游戏来说,这并不太难。

于 2010-06-29T21:40:24.990 回答
0

看看这个游戏开发者开始

他们确实拥有与游戏编程相关的大量资源和许多初学者的东西。SDL 很好,但您应该在开始编码之前考虑学习基本的游戏技术,甚至在开始考虑您使用的 api/libs 之前。

弄清楚你需要多少“智能”(Ki),考虑尽早加载/保存,......如果你想完成你的项目,你应该记住很多事情。你需要游戏编辑器吗?(也......工作)声音/图形呢?自己编写所有这些东西将花费大量时间(如果您没有经验)。创建内容是另一个可能会消耗大量时间的大问题,如果你真的做到了。

也许它会帮助你看看一些开发孩子,因为这会让你了解他们的引擎是如何工作的。像这个(过时的)开发小子

于 2010-07-04T10:51:20.090 回答
0

In short, yes - there's nothing in the WinAPI that will help you much. However, there are dozens of game engines that you could build your game on that would take a huge amount of gruntwork out of creating the game itself. A bit of Googling will help you.

(Personal recommendation: although it's technically a 3D engine, something like Unity is an excellent engine that includes tutorials for creating 2D games. Unity isn't C, but it does make your life a lot easier...)

于 2010-06-29T20:21:21.323 回答
0

Action Arcade Adventure Set(最初作为一本书出版)可能是关于如何编写 2D 横向卷轴游戏的最完整的教程之一。虽然是较旧的参考,但开发 2D 横向卷轴的许多基本原理并未改变。

完整的源代码示例和一些开发横向卷轴的工具以下载形式提供。只有一个外部库用于处理图形基元。由于这是一个较旧的 DOS 程序,您可能必须使用 DOS 模拟器(如DOSBox)或修改示例以适应更现代的环境。

我建议你略读第 1 章到第 9 章,然后专注于第 10 章到第 17 章。

于 2010-07-10T15:44:46.927 回答
0

编辑:我实际上想学习如何从头开始编写游戏,因为它必须是很棒的编程经验,如果你考虑像 DOS 上的 Commander Keen 这样的游戏,它是在没有框架或库的情况下创建的,但仍然非常棒。

这实际上并不完全正确。Commander Keen(以及任何 DOS 游戏)确实使用库:由 DOS、BIOS 等提供的库。如果没有一种或另一种形式的库,您将无法使用 C 做任何有用的事情。对于游戏编程,您真的会想要将所有低级细节留给其他人。

我推荐Allegro作为入门游戏编程库。

于 2010-06-29T21:29:01.523 回答
0

几天前我刚刚开始了一个类似的项目,你可以在GitHub 上查看它。
它应该给你一些关于游戏结构的想法。以及带有碰撞的滚动 2D 地图的一些细节(如果你想让它 100% 没有错误,这会变得非常复杂)。哦,它正在使用这里许多人已经建议的 SDL。

至于我,这是我的第一个 C 项目。但我不得不承认,我以前在 Java 和 Python 中做过类似的事情,所以这对我来说是快速学习 C 的好方法。因为它是学习而不是任何有生产力的东西,所以我使用的是普通的 C99,这使得任务更加“有趣”。

但是回到游戏中,你真的需要在开始编码之前考虑你的设计,把它写在一张纸上,或者如果你像我一样,你没有树的东西可以用伪代码写出来。

尽可能多地考虑可能的游戏状态,没有什么比仅仅因为您之前没有考虑过功能 XYZ 而从头开始重新实现整个玩家/地图/任何东西更糟糕的了。

设计非常重要,如果你一开始就没有目标,你的项目就会失败,就像我的Tuff一样,它也因为缺少音乐和设计敌人的人而失败,等等.

说到图形等,请记住,游戏将不仅仅包含纯代码。如果您不擅长图形,请在设计时考虑到这一点。因为当屏幕上唯一的东西是彩色矩形时,你很快就会失去动力。

于 2010-07-04T11:23:37.977 回答