构建一款集换式卡牌游戏

3
我正在尝试学习如何使用Javascript编写(虚拟)交易卡牌游戏(类似于魔术飞球)。我已经了解了一些MVC架构和控制器的知识,但这些对我来说都太难了(我没有受过正式的计算机科学教育),我想知道是否有任何好的链接或建议,可以让我在初学者的水平上更多地了解代码架构。
每张“卡牌”都应该被表示为一个对象,所有卡牌规则的逻辑应该包含在一个大型游戏引擎函数中,还是连接在一起的许多小函数?
下面是一个例子: 假设有一张卡牌上写着:“当这张卡牌进入游戏时,抽一张牌。”我应该如何设计游戏以准备这种情况,并且如何触发它(最有效的方式)?是卡牌触发游戏引擎,还是游戏引擎解析每张打出的卡牌?
再举一个例子: 假设有一张卡牌上写着:“你所有的卡牌费用减少1点”,并且它会永久留在游戏中。游戏如何理解需要在这种情况下改变规则?这是一个监听卡牌被打出并中断费用的函数吗?随着每个回合的解决,这条规则存储在哪里?有变量存储游戏的基本规则(全局卡牌费用修改器:0;你的卡牌费用修改器:0)和其他变量存储卡牌引入的新规则(你的卡牌费用修改器:-1),还是这些变量是由游戏引擎动态创建的,因为卡牌改变了规则(你的精灵费用修改器:-2)?当一张卡牌被摧毁时,规则如何知道要更改,从而删除卡牌的规则修改?
我需要一个关于监听器和事件的入门指南吗?(我对它们一无所知,但我偶尔会看到它们的参考资料。)您能指点我一个好的资源吗?
明确一下,我不是要求别人帮我手动谷歌搜索;我是在盲目地摸索并询问是否有人能给我指出正确的单词或短语进行搜索。谢谢!

1
程序员交流社区可能更适合这篇文章,因为它更多地涉及一般软件设计。 - Kyle
有一本书叫做《JavaScript和Ajax新视角》,作者是Patrick Carey。书中有一个非常好的教程,介绍了使用JavaScript实现不同纸牌游戏的方法。 - Ibu
2个回答

1

有一篇非常好的博客介绍了如何重新制作暴雪公司的炉石传说卡牌游戏。虽然它是用C#编写的,并使用Unity作为视图层,但您可以很好地了解如何创建适合此类游戏的架构。但请注意,用Javascript重新创造魔法飞球可能会变得非常复杂,并且会让您头痛不已(我有第一手经验)。

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


不确定让一个七年前的问题复活是否值得,而且仅有链接的答案并不是真正的答案。 - Dave Newton
我今天在谷歌上搜索了Adam提出的完全相同的问题。MTG仍然存在,因此任何人都可以随时尝试构建类似于MTG的游戏。我觉得我的回答对于评论来说太长了,因此我选择了回答。我认为Adam正在寻找一个起点,我提供了一个,如果您认为这个答案可以改进,我很乐意听取建议。 - Philipp Gfeller
它可能不仅仅是一个链接;请参阅常见问题解答和元帖中的各种帖子,了解为什么仅有链接是不好的。然而,问题在于,如果它很容易被搜索到,那么有兴趣的人很可能会进行搜索。并找到相同的链接。 - Dave Newton

1

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

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

您还需要学习关于堆栈的知识。如果您的游戏允许玩家相互中断,则需要一种方法来跟踪哪个事件应该首先发生,因为事件将要能够影响、阻止或重定向其他事件。堆栈将帮助您跟踪该排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接