3

我正在尝试学习如何用 Javascript 编写(虚拟)集换式卡牌游戏(类似于 Magic the Gathering)。我已经阅读了一些关于 MVC 架构和控制器的内容,但这完全是我的头绪(我没有接受过任何正规的 CS 教育),我想知道是否有人有任何好的链接或提示我可以如何了解更多关于代码的信息初学者水平的建筑学。

每张“卡片”会被表示为一个对象,卡片规则的所有逻辑都包含在一个大型游戏引擎函数中,还是许多相互连接的小函数中?

这是一个示例问题:想象有一张牌说:“当这张牌进场时,抓一张牌。” 我应该如何构建游戏来为这种情况做准备,它是如何触发的(最有效的)?卡片会触发游戏引擎,还是游戏引擎会解析每张播放的卡片?

再举一个例子:想象有一张牌,上面写着“你所有的牌都少花 1”。它会永久发挥作用。游戏如何理解在这种情况下它需要改变它的规则?这是一个侦听要播放的卡片并中断成本的功能吗?随着每一轮的结算,这条规则存储在哪里?是否有变量存储游戏的基本规则(全局卡牌成本修正:0;你的卡牌成本修正:0)和其他变量存储卡引入的新规则(你的卡牌成本修正:-1),或者这些由游戏引擎动态创建的变量作为卡片改变规则(你的精灵成本修正:-2)?当一张牌被破坏时,规则如何知道改变,从而消除了这张牌的规则修改?

我需要关于听众和事件的入门吗?(我对它们一无所知,但我不时看到对它们的引用。)你能指出一个好的资源的方向吗?

需要说明的是,我并不是要冗长地要求人们为我手动谷歌;我在黑暗中盲目地摸索,并询问是否有人会指出我要搜索的正确单词或短语。谢谢!

4

2 回答 2

1

您需要在这里更深入地思考“游戏”本身。您所描述的游戏实际上将围绕“状态机”构建,这是一个核心 CS 概念,您应该在开始构建之前深入了解并理解。

您的游戏规则将是一个状态机,并且在您的游戏期间触发(通过播放)的事件(卡)可以修改这些规则。您需要某种解释器来“读取”卡片并修改规则或游戏状态。然后你需要一些东西来通过回合和阶段迭代游戏,读取状态并采取适当的行动。

您还需要了解堆栈。如果您的游戏允许玩家互相打断,您将需要一种方法来跟踪应该首先发生的事件,因为事件希望能够影响、阻止、重定向其他事件。堆栈将帮助您跟踪该排序。

于 2019-02-17T23:29:16.857 回答
1

有一个关于重新创建类似纸牌游戏的非常好的博客:来自暴雪的炉石。尽管它是用 C# 编写并使用 Unity 作为视图层,但您可以很好地理解如何为此类游戏创建合适的架构。不过,一个公平的警告是,用 Javascript 重新创建 Magic the Gathering 可能会非常复杂,而且会让你的头脑非常混乱(我有第一手经验)。

博客:http ://theliquidfire.com/2017/08/21/make-a-ccg-intro/

于 2018-07-16T00:27:07.560 回答