🎉欢迎来到 2D 小游戏制作教程。教程的主要目的是教你如何使用纯C语言开发常见的小游戏。教程之所以使用C语言主要考虑两方面的原因:

一方面是因为C语言属于面向过程编程,上手容易,可以很好地将初学者的注意力集中到游戏的代码逻辑上,而非面向对象、模型范式等复杂的东西。

另一个主要的原因是教程主要面向的是 C语言初学者,特别是刚刚学习完C语言的基本语法,面对着黑乎乎的控制台程序很难提起兴趣的时候,这时候的小伙伴更容易迷茫,不知道接下来如何去学习,复杂的窗口程序不会开发,简单的控制台程序又没有激情,这套教程就是为了解决这个问题而存在的。

希望通过本教程的学习,可以帮助你迅速地掌握C语言的运用法则,并熟悉常见游戏开发的策略手法,为以后真正步入游戏行业打下坚实的基础,在未来的某一天可以做出真正属于自己的游戏精品。

1. 背景

现今市面上充斥着各种成熟的游戏引擎,在某些程度上它们其实是降低了游戏开发的门槛,与此同时,各种相关的培训教程也充斥着网络的各个角落,特别是对于常见的如 Unity、Unreal Engine、CRYENGINE 等等,显然培训游戏开发也成为了一个暴利的产业链。

游戏开发并不是一件容易的事情,如果你在网络上搜索 如何开发游戏怎样做游戏 等内容,你搜到的结果肯定是让你学习一门语言,熟悉一种引擎、更多的是列书单,我敢保证,它列出的书单肯定比你显示器要长得多……

本教程的目的是帮助新手建立起对游戏开发的一些简单认知,教程本身是有门槛的,它需要你至少学过C语言才能进行下去。事实上现在你只要想做游戏,学习编程语言这件事是无法避让的,最多也就是让你选择入门的语言而已,即便只使用类似蓝图的那种可视化编程控件,一样需要学习一些脚本语言丰富其功能,最主要的你需要通过学习一门编程语言来建立一些常见的编程思维。

相对于去学习那些脚本语言入门,我反而推荐你去学习C语言,因为现在大多数常用的编程语言都可以称为C语言家族,在它们身上多少可以看到一些C语言的影子,特别是C语言入门非常简单,再加上面向过程的编程模式,可以有利于你专注编程逻辑,当然相对而已,C语言并没有那些脚本语言写起来舒爽。

如果你已经学习过C语言,准备想用C语言来做一些游戏,那么这个教程就符合你的要求,否则你可以关闭本页去学习C语言本身了,当然如果你会其它语言一样可以继续,虽然以后使用的函数可能不同,但是游戏开发的思路是一致的,也许哪天我心情美滋滋,会选用一门其它语言继续接教程也说不定……

2. 知识

在开始游戏开发之前,推荐你最好看一下 编程综述 这篇文章,对程序的层次有一些相关认知。本教程的开发和运行环境都是 Windows,所以在开发游戏之前,你需要了解 Windows 编程相关 的知识概念,特别是需要了解 Windows 窗口的创建过程

开发游戏,你需要准备一些工具,本教程中推荐大家使用 Visual Studio IDE,这个是微软公司自身开发的,可是说是目前宇宙最强 IDE,非常适合初学者使用。如果你对它不是很熟悉,可以看看 Visual Studio 快速入门 学习如何配置和使用你的开发工具。

上面的内容看起来很多但只要了解就可以了,并不需要掌握的非常牢靠,但至少要看过。除了上面的知识外,我们都知道绝大部分游戏都是通过画面展现的,所以学习游戏开发,必须会一种图形 API,也就是说要知道如何在窗口上绘制图像,方法很多,这里推荐 SDL 多媒体开发库

之所以推荐使用 SDL,主要的原因是它使用 C语言编写,如果你想使用 Windows 原生提供的 Direct 系列的 API,则需要掌握 C++ 编程相关的知识,因为 Direct 系列图形库是基于 COM 组件的,并不是说使用 C语言不能调用这些接口,而是相比于 SDL 来说,过程复杂,细节颇多,特别需要涉及 COM 组件的相关知识,在这个过程中其实以及和游戏制作的本来目的相左。

学习 SDL 的方法很多,可以网上搜索相关教程,比较出名的老牌教程是 Lazy Foo' Productions,网上应该可以找到中文版,大家可以自行下载学习。不过个人感觉这个教程的内容有些散,一般学习一门陌生的知识,其实并不需要将所有的相关的内容学习完毕,只需要找出最小的知识栈内容学习即可,了解后立刻上手,特别是对于编程来说,学习一门知识,应该先做减法再做加法,找出和自己需求相关的核心内容先行学习,往往可以事半功倍。按照这个理论我也写了一个 SDL 相关的教程,不过整体感觉口语化较重,还需要进一步打磨。

3. 框架

在接下来的教程中,每篇教程都会以一个小游戏开发为中心,逐一讲解游戏开发过程中的实现细节,不过因为制作的游戏很多,每一次窗口创建的过程都差不多,所以我基于 SDL 写了一个简单的框架,大家可以自行下载学习,也可以根据自己选择的图形库自行封装,因为我以后写的游戏开发教程,更多讲解的是其实现的原理,所有的语言都是通用的,只要明白其道理,一通百通,不管是 SDL、还是 Direct,又或是 GDI 实现起来都是类似的,甚至和实现语言也是无关的,虽然如此但整个过程我还是会基于 C语言和 SDL 图形库来讲述,因为 C语言迁移其它语言显然比其它语言迁移到 C语言容易得多。

如果你想自己独立开发框架,我推荐你从几个方面着手:

  • 窗口。每个游戏都是基于一个 Windows 窗口进行的,并且 Windows 创建窗口的过程也是固定的,所以将窗口创建过程封装一下是有必要的。
  • 图形。每个游戏都涉及图形显示的问题,这里主要强调需要封装图形显示的相关接口,特别是图形加载、图形显示以及图形翻转等功能。
  • 音乐。每个游戏基本上都涉及音乐播放,这里主要强调需要封装背景音乐播放和特效音乐播放的接口,并且这些声音在播放的时候可以自动混合。
  • 控制。每个游戏基本上都涉及到玩家的互动,所以封装鼠标操作、键盘操作甚至手柄操作相关的接口也是必要的。

通过上面的学习,你基本上了解简单游戏的基本知识了,接下来就是具体游戏开发细节描述了,这个文章会实时更新,没完成一个游戏后都会将教程添加到文章的后面以便查询,如果大家在学习的时候发现错误,或者疑问的地方欢迎随时留言联系。

4. 游戏

4.1 掌机三连

俄罗斯方块 赛车 打砖块
俄罗斯方块 赛车 打砖块