HTML5教程

用函数式编程在 JS 中开发游戏

本文主要是介绍用函数式编程在 JS 中开发游戏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
作者:Karran Besen

翻译:疯狂的技术宅

原文:https://cheesecakelabs.com/bl...

未经允许严禁转载

一段时间以来,函数式编程范式比较火热,并且在互联网上有很多关于它的精彩书籍和文章,但是要找到相关程序的真实示例并不容易。因此,我决定尝试使用 Javascript(当今最流行的编程语言)并遵循其概念创建一款游戏。在本文中,我将分享一些经验,并告诉你是否值得。

什么是函数式编程?

简而言之,函数式编程(FP)是试图重现数学函数概念的范式,数学概念是域集(有效输入)和共域(有效输出)之间的关系。数学函数的输出始终仅与一个输入相关,因此,只要使用相同的输入来计算数学函数,它就会返回相同的输出。这是函数式编程最重要的概念之一,也称为确定性

不确定函数示例

let x = 1
const nonDeterministicAdd = y => x + y
nonDeterministicAdd(2) // 3
x = 2
nonDeterministicAdd(2) // 4

确定性函数示例

const deterministicAdd = (x, y) => x + y
deterministicAdd(1, 2) // 3

除了确定性之外,FP 中的函数还寻求不引起超出其范围的修改。这些类型的功能称为 pure。最后但并非最不重要的一点是,FP 中的数据必须是不可变的,这意味着创建后不能更改其值。这些概念使测试、缓存和并行性更加容易。

除了这些基本概念之外,我还尝试在游戏开发期间使用无点样式,该样式能够使代码更简洁,因为它省略了不必要的参数和参数的使用。以下两个链接给你提供了很好的参考。

这个项目是一个在浏览器中运行的游戏。因为 Javascript(JS)是我很熟悉的一种语言,并且是一种多范式语言,所以我选择它为项目语言。

我推荐两本关于 FP 的优秀书籍:

项目

我们的项目是一个基于回合制的太空飞船游戏。在游戏中,每个玩家有 3 艘飞船,并且每回合必须选择他们要在其可达范围内移动飞船的位置以及要朝哪个方向射击。当飞船被射中时,它将失去部分防护罩。如果宇宙飞船没有防护罩将被摧毁,失去所有宇宙飞船的玩家将输掉比赛。

比赛的初始轮

到目前为止,该游戏仅允许一个玩家参与,并且控制屏幕顶部的 3 个太空飞船,去对抗一个控制底部 3 个太空飞船的脚本,该脚本将其太空飞船的位置和目标随机化。关于图形部分,我使用了 PixiJS 程序包来控制渲染,这是该项目唯一的依赖项,并且我还使用了从OpenGameart 网站上的 UnLucky Studio 免费获得的太空飞船精灵 。

基础和辅助函数

在开始,我们先创建一个文件,其中包含几乎所有项目文件中都会用到的基本函数。其中一些基本函数是 JS 固有的,例如 mapreduce。 JS还有一些其他功能,它们通过不更改输入值而适合FP范例,并且已在项目中使用,例如 filter, find, some, every。发现这些功能的一个很好的来源是Does it mutate。要遵循无点样式,还必须实现以下基本函数:

  • Curry:允许函数在单独的时刻接收其参数
const add = curry((x, y) => x + y)
add(1, 2) // 3
                    
这篇关于用函数式编程在 JS 中开发游戏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!