Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设计一款可收藏的纸牌游戏_Javascript_Design Patterns_Playing Cards - Fatal编程技术网

Javascript 设计一款可收藏的纸牌游戏

Javascript 设计一款可收藏的纸牌游戏,javascript,design-patterns,playing-cards,Javascript,Design Patterns,Playing Cards,我正在尝试学习如何用Javascript编写(虚拟)交易卡游戏(类似于魔术聚会)。我读过一些关于MVC体系结构和控制器的书,但我对此一无所知(我没有接受过任何正式的CS教育),我想知道是否有人提供了一些好的链接或提示,告诉我如何在初学者的水平上进一步了解代码体系结构 每一张“卡”都会被表示为一个对象,并且所有卡规则的逻辑都会被包装在一个大型游戏引擎功能中,还是许多相互连接的小型功能中 下面是一个示例问题: 假设有一张牌上写着:“当这张牌进场时,抽一张牌。”我应该如何设计游戏来准备这种情况,以及它

我正在尝试学习如何用Javascript编写(虚拟)交易卡游戏(类似于魔术聚会)。我读过一些关于MVC体系结构和控制器的书,但我对此一无所知(我没有接受过任何正式的CS教育),我想知道是否有人提供了一些好的链接或提示,告诉我如何在初学者的水平上进一步了解代码体系结构

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

下面是一个示例问题: 假设有一张牌上写着:“当这张牌进场时,抽一张牌。”我应该如何设计游戏来准备这种情况,以及它是如何触发的(最有效)?卡片是否触发游戏引擎,或者游戏引擎是否解析所玩的每张卡片

下面是另一个例子: 想象一下,有一张牌上写着:“你所有的牌都少花1英镑。”它会永久地留在牌上。在这种情况下,游戏如何理解它需要改变规则?这是一个监听卡播放并中断成本的功能吗?每次回合结束时,该规则存储在哪里?是否存在存储游戏基本规则的变量(全局卡成本修饰符:0;您的卡成本修饰符:0)和存储卡引入的新规则的其他变量(您的卡成本修饰符:-1),或者这些变量是在卡更改规则时由游戏引擎动态创建的(您的elf成本修饰符:-2)?当一张卡被销毁时,规则如何知道如何更改,从而删除该卡的规则修改

我需要的是关于听众和事件的入门知识吗?(我真的不知道关于它们的任何事情,但我不时看到它们的引用。)你能为我指出一个好资源的方向吗


要明确的是,我并不是试图让人们为我手动谷歌一个冗长的请求;我在黑暗中盲目地摸索,问是否有人会给我指出正确的单词或短语来搜索。谢谢大家!

有一个很好的博客,介绍了如何重新制作一款类似的纸牌游戏:暴雪的炉石。尽管它是用C#编写的,并使用Unity作为视图层,但您对如何为此类游戏创建合适的体系结构有了相当好的理解。不过,一个合理的警告是,用Javascript重新创建魔术聚会会非常复杂,而且会让你的头脑变得一团糟(我有第一手的经验)


博客:

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

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


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

programmers.stackexchange.com可能是发布此帖子的更好地方,由于它更多地涉及一般的软件设计,patrick carey的《新视角Javascript和Ajax》一书中有一个关于不同纸牌游戏的非常好的教程,使用JavaSCSript不确定解除僵尸化一个七年前的问题是否值得,加上只有链接的答案并不是真正的答案。我在谷歌上搜索了亚当问的完全相同的问题,今天MTG仍然存在,因此任何人都可以随时尝试构建类似MTG的游戏。我觉得我的回答太长,无法发表评论,因此答案是肯定的。我认为Adam正在寻找一个起点,并提供了一个起点,如果你认为答案可以改进,我很乐意听取建议;请参阅常见问题解答和meta上的各种帖子,了解为什么linkonly不好。不过,问题是,如果它是可搜索的,那么可能有兴趣的人会。。。搜索。并找到相同的链接。