跳转到内容

视频游戏设计/编程

来自维基教科书,开放世界中的开放书籍

编程是你将概念付诸实践的方式,是你构建游戏的方式。有各种各样的编程语言。这些语言将在后面详细介绍。

游戏程序员或游戏开发者,负责实现游戏设计,视频游戏编程的大部分内容都枯燥乏味,缺乏创造性,除非游戏设计需要一些创新或更新。但要注意,对于任何开发人员,尤其是实现视频游戏的开发人员来说,最糟糕的情况是从一个糟糕的游戏设计开始,无法做出决定或不坚定地做出选择会导致开发人员不得不实现糟糕的概念,直到游戏设计师接受结果(或由于时间/成本限制而被迫同意),最终导致一个不合格的产品。

并非所有的开发工作都很有吸引力,在游戏中,大部分开发工作都不具有吸引力,例如,游戏的界面在大多数游戏设计中都很常见,做多一个只是走过场。现在,我们以支持视频卡硬件更改或低级优化任务为例,这对一个有创造力的程序员来说是最高级的。

注意
这些概念也有助于建立一个好的游戏开发团队,并非所有的工作都是一样的,甚至没有那么复杂,而且取决于你希望将你的想法开发到什么程度,你可能只需要很少的专家程序员。

学习编程

[编辑 | 编辑源代码]

因为它可以说是游戏设计中最难的部分,所以我们将花相当多的时间来学习它。如果你对想学习的语言有所了解,并且已经阅读了各种语言,你应该开始实际学习。如果你能参加课程,那就太好了,如果不能,还有很多其他选择。购买一些编程书籍,在互联网上或维基教科书上查找一些教程,并查看开源程序的源代码。不要认为这很容易,事实并非如此;但要尝试并从中获得乐趣。如果你没有从中获得乐趣,那岂不是违背了学习的初衷吗?

一些资源:Google CodeSourceforge

选择编程语言

[编辑 | 编辑源代码]

在你开始编程之前,选择适合你需求的编程语言很重要。请记住,没有一种语言适合所有人或所有情况。语言选择如此之多,以至于几乎不可能选择一种。在你决定学习 Java 或汇编语言之前,确保你清楚地知道要做什么。游戏的复杂程度如何?当然,花很多时间和精力学习一种能力不足以完成你计划要做的事情的语言,或者学习一种过于复杂而超出你需求的语言,都是得不偿失的。当你开始阅读各种语言时,你不可避免地会读到“低级”和“高级”语言。在这个阶段,这不是很重要,但在后面会变得非常重要。本质上,低级语言(例如:C++、C、Asm)更强大、速度更快,允许你控制计算机的内部工作机制。然而,它们通常更难学习。高级语言(例如:BASIC)更容易学习和使用,但缺乏低级语言的强大功能和灵活性。


声音在任何游戏中都起着不可或缺的作用,因为它在潜意识和意识层面上影响着玩家的情绪!你能想象玩 UT 或 Quake 却没有声音吗?那将是不可忍受的!游戏中的声音(当然,取决于游戏类型)通常包括背景音乐、事件音效(汽车喇叭、枪声等)和环境音效(脚步声、风吹声、鸟叫声、海浪声、虫鸣声、回声等)。

背景音乐,根据游戏类型,可能会一直播放,但也会像电影一样完全停止并改变以适应某些情绪,例如,如果你进入战斗,音乐可能会变成节奏更快或更不稳定的曲子。

另一方面,音效在由某些事件触发时播放。如果玩家要打开一扇门,门上可能会发出咯吱声。音效可以为游戏增添很多真实感,选择合适的声音可以使游戏真正栩栩如生。但请注意,音效太多或具有不切实际的属性,可能会影响游戏体验或让玩家感到厌烦。例如,有一个游戏中有一个喷气背包。这个喷气背包有无限的燃料,所以玩家可以在空中漂浮无限的时间。喷气背包运行时,会发出类似于气流的声音。这种声音随着时间的推移会变得非常烦人,因为它在游戏中经常听到。此外,如果声音具有奇怪的属性,它可能会降低真实感。例如,发出“嘎嘎”声的机关枪,或者其声音比实际射击速度更快的机关枪。

环境音效在玩家进入环境时触发,并循环播放,直到玩家离开。请注意,这些声音文件数量最多,并且有时会随机顺序循环播放多个声音,以在环境中营造出变化的感觉(例如,两只唱着完全不同声音的鸟,或者两个角色走路时,鞋子的咯吱声对每个角色来说都不一样)。

游戏通常为玩家提供许多关于输入的选项。常见的输入方式包括鼠标、键盘、操纵杆和游戏手柄。理想情况下,游戏引擎应该抽象输入,以便用户可以选择以上任何一种输入方式。此外,要记住的一件重要的事情是,所有玩家在按键或按钮位置方面都有不同的偏好,并且通常希望有特定的配置。这意味着输入也应该被抽象化,以允许按钮或键在游戏中执行不同的操作。

首先要理解键盘事件被程序解释的不同方式。接收键盘事件的最常见方式是通过回调轮询

  • 回调 - 通常由使用 GLUT 库的游戏使用,函数指针被传递给 GLUT,它将该函数“注册”为键盘事件回调。这意味着,任何时候按下或释放一个键,GLUT 都会调用相应的函数,传递键数据,并允许程序相应地做出反应。
  • 轮询 - 更常用于使用 SDL 的游戏,如果回调函数在引擎中破坏了抽象,则轮询非常有用。轮询是一个过程,游戏在空闲时间检查键盘事件集合。因此,对于游戏循环中的每一次传递,你的游戏都可以轮询集合,从而快速响应按键事件,并且不会丢失数据。

每个操作系统都有自己的 TCP/IP API,因此,如果你打算为特定平台开发,那么你必须查看该操作系统的 SDK(例如,Windows API 的 WinSock)。如果你正在编写跨多个平台移植的游戏,一个好的选择是SDL_net

选择网络 API 后,应该为游戏引擎构建封装套接字的类。你还必须在网络协议 TCP 和 UDP 之间做出决定(尽管通过抽象,可以使用任何一种)。

  • TCP - 此协议在两台计算机之间建立连接。如果存在任何错误,在计算机之间发送的数据将被重新发送。此协议的缺点是,它的整体速度不如 UDP 快。
  • UDP - 此协议不建立连接。数据包被发送到一个地址,发送者不知道它是否已正确到达并且没有错误。可以使用 UDP 编写协议来提供错误检查和重新发送功能。

决定权在于程序员,以及最适合游戏的方案。如果主题是网络象棋游戏,速度不是主要问题,可以使用 TCP 来避免一些麻烦。但是,对于多人 FPS 游戏,UDP 由于速度更快,是一个更好的选择。

《Free Fire》是一款非常火爆的游戏,拥有超过4100万玩家。Sea Limited 公司于2009年在新加坡成立,最初名为Garena,由上海交通大学和斯坦福大学商学院毕业生李小加创立。Garena最初是一家游戏开发和发行公司,后来扩展成为一家科技巨头,还提供金融服务和电子商务。2017年,公司更名为Sea,但数字娱乐部门保留了Garena的名字。

同年,《Free Fire》作为一款大逃杀多人游戏发布,并迅速获得国际成功。它在2019年成为全球下载量最大的手机游戏,并成为Garena的重要收入来源。

2021年,Garena 发布了图形增强版《Free Fire Max》,但尚未超越原始版本在收入上的表现。根据AppMagic的数据,这两款应用在2022年都是下载量最多的射击类游戏,分别超过1亿次下载。


《Free Fire》已成为与《PUBG Mobile》和《使命召唤:移动版》并列的“三大”射击类手机游戏之一,这是因为《堡垒之夜》在2020年8月被从App Store和Google Play中移除。这三款游戏占据了该类型游戏收入的大部分,而该类型游戏的受欢迎程度下降速度比其他游戏子类别更快。

2022年初,印度禁止了《Free Fire》和其他53款被认为威胁国家安全的应用;《Free Fire Max》仍然可以在Google Play商店中使用。根据data.ai的数据,《Free Fire》曾是印度下载量第二高的应用,也是消费支出最高的应用。虽然Sea总部位于新加坡,但其最大股东是中国社交媒体公司腾讯控股。2022年,《Free Fire》和Sea的年收入大幅下降,部分原因是印度禁令。

自2019年以来,《Free Fire》也举办了电子竞技比赛,其世界系列赛在2021年吸引了540万直播观众,成为历史上观看人数最多的电子竞技赛事。这些区域性赛事在全球范围内开放,并提供数百万美元的奖金。

《Free Fire》被《PUBG Mobile》的开发商Krafton指控侵犯版权,该公司在2022年1月对Garena提起诉讼,指控其游戏物品、机制和外观存在相似之处。苹果和谷歌也被列入诉讼,因为它们负责分发这款游戏,该诉讼尚未解决。

我们收集了关于《Free Fire》的数据和统计信息。请阅读以下内容以了解更多信息。

[编辑 | 编辑源代码]

以下是游戏开发中使用的免费脚本引擎列表。

  • KonsolScript - 一款免费的游戏脚本语言。
  • Lua - Lua脚本语言。

游戏工具

[编辑 | 编辑源代码]

以下是在游戏开发中使用的免费软件工具列表。

  • Blender3D - 一款免费且非常先进的建模软件,虽然上手难度较高,但功能与任何其他商业建模软件一样强大。
  • OGRE - 一款免费的图形引擎。顶尖水平。
  • Terragen - 一款免费的非商业用途地形生成器。
  • TrueSpace - 专业级的3D建模、动画和渲染软件,之前售价高达700美元(USD),现在在被微软收购后可免费下载。

团队组建和协调

[编辑 | 编辑源代码]

其他

华夏公益教科书