
应读者的要求,大量文章围绕无服务器计算技术的应用开始,以开发实际的应用。 在这个周期中,我们将考虑使用现代工具开发应用程序,进行测试并交付给最终用户:微服务应用程序体系结构(基于OpenFaaS的无服务器版本),用于应用程序部署的kubernetes集群,专注于云集群和应用程序的MongoDB数据库以及云总线NATS 。 该应用程序实现了游戏“ Epics”,这是流行沙龙游戏“ Mafia”的变体之一。
什么是“史诗”?
这是“黑手党”游戏的变体,也是“狼人”。 它是基于团队游戏的,参与者必须逐步学习谁是谁并试图取胜。 不幸的是,在网络上玩游戏时,诸如个人互动之类的重要组成部分消失了,经典的“黑手党”的规则非常简单,因此通常会添加其他角色,以使游戏更具非线性和趣味性,但总的来说,原始“黑手党”的主要特征得以保留,例如,白天和黑夜的变化,仅在晚上移动以及参与者之间的联盟。 网络上游戏的另一个重要区别是主机(即游戏的主人,讲故事的人)通常是计算机程序。
游戏说明
我要实现的游戏规则取自旧的irc-bot,我将其保存在大约10年前的个人档案中。 “ Bylin”的背景故事可以用来开始每场比赛:
在遥远的王国中,在第三十个州,在七海中,有几个村庄为自己而活,其中有好伙伴和红娘子 。 他们播种面包,然后到附近的森林里采摘蘑菇和浆果……而且这种情况持续了一个世纪到一个世纪,直到可怕的灾难撼动了地球,邪恶开始在世界范围内扩散! 夜晚变得漫长而寒冷,黑暗笼罩着森林,游荡于不友善和可怕生物的村庄。 一条蛇Gorynych从某个地方飞来,养成了偷红色少女并从村民手中夺走所有有价值物品的习惯。 有害而贪婪的巴巴亚嘎 ( Baba Yaga )在远处的森林中乘佛塔飞来飞去,迷惑了居民的思想,甚至有些人放弃了手工艺品进入森林抢劫,在那里造了一个团伙。 Likhedey遇到了Leshii,Leshii知道如何变成树木和灌木丛,他开始观察和平的村民并为强盗服务,并嗅探好伙伴是否在采取某种行动来使定居点免受恶魔的袭击。 好家伙和红色女孩对强盗的袭击感到厌倦,并在可怕的利克一眼 ( Lekh One-eye)手中惨死 ,他们收集了金子,并从附近的城市邀请了著名的摔跤手伊万· 塔萨雷维奇 ( Ivan Tsarevich) ,他答应摆脱强盗村。 在森林的一片空地上,伊万免于灰狼的不可避免的死亡之苦,灰狼掉入了强盗的陷阱。 作为回报,狼答应将各种恶魔告知沙皇。 一位著名的智者瓦西里萨(Walsilisa the Wise)过去了,当她看到麻烦时,她仍在照顾那些遭受猛烈袭击的居民。 在森林后面,出现了一个黑色的宫殿,根据传闻, 不朽的科什奇人定居下来,每天晚上他拜访村庄并咒骂好伙伴和红色少女,以便他们不敢违抗他的命令,他们按照他的意愿做了一切。 然后,在无生命的森林中, 科特·巴彦定居下来,遇到他的每个人都在童话故事中入睡或死于铁爪。

遥远的王国
就像已经看到的,玩家分为几组:
- 平民(好伙伴,红色少女,伊凡·萨维奇,灰太狼和智者瓦西里萨)
- 强盗(强盗本人以及巴巴亚嘎和莱斯希)
- 独立(Serpent-Gorynych,Likho One-eye,Frog公主,Koschey不朽,Cot-Bayun)
如上所述,游戏的目标是保持生存并赢得胜利。 对手必须以某种方式离开游戏,独立玩家也应保持生存直到游戏结束。 游戏中包含黄金,这是一种玩家只能在游戏中赚取的游戏货币。 优胜者获得金牌。 黄金越多,玩家的等级越高。
我将对字符的描述进行更多介绍。

好好

红娘子
Good Good和Red Maiden-游戏中最大,最主要的角色。 这些平民晚上睡觉,白天工作。 到了晚上,他们遭到强盗之一的袭击,毒蛇大猩猩和其他角色,智者瓦西莉莎(Vasilisa)对待他们。 “好伙伴”或“红色少女”在攻击中存活下来的几率很小,而且不会造成伤害(可能同时损失了金币),但是,与此同时,每个人都会在攻击/防御后的第二天认出玩家的化名。 在晚上,这些玩家不做任何举动,而是根据游戏聊天中的消息分析游戏情况。 下午,这些球员通过投票决定哪个不是好伙伴还是Red少女。 大多数其他玩家投票投票的玩家离开游戏,剩下的获得或失去金牌。 如果玩家没有以多数票选出任何人,则不会有任何玩家被处决。

伊凡(Ivan Tsarevich)
Ivan Tsarevich-最初是平民的匿名捍卫者。 晚上,检查其他玩家的角色,因为他只认识他的一个盟友-灰太狼。 在“灰太狼”(也可以检查其他玩家的角色)的直接参与下,伊万·萨维维奇(Ivan Tsarevich)可以在晚上杀死另一个角色,而不是进行检查。 如果作为检查的结果,伊凡·特萨里维奇(Ivan Tsarevich)在球员中看到好年轻人或红少女的角色,那么他可以邀请他们加入自己,并向他介绍灰狼以及其他好青年和红少女。 青蛙公主可以阻止伊万,后者可以在晚上引诱他,而白天却不向其他玩家出卖自己的角色。 如果伊万本人发现了青蛙公主,那么她可以主动邀请她加入平民,但是如果公主拒绝,她就会死于伊万的手中。 蛇-高利尼奇(Kerny-Gorynych)也可能会干扰伊凡·萨雷维奇(Ivan Tsarevich)的检查,但与Tsarevna-Frog不同,下午他会告诉其余的球员,其中哪一位是伊凡·萨雷维奇。 下午,Ivan Tsarevich和其他好伙伴没有什么不同。

灰太狼
Gray Wolf是Ivan Tsarevich的助手,他的敏锐气味帮助Ivan找到了其他好伙伴和Red Maidens。 Gray Wolf告诉这些球员Ivan Tsarevich是谁,还报告了其他扮演Good家伙和Red Maidens角色的球员。 如果狼发现了强盗或其他敌人,他会立即将此事通知伊万·萨维奇(Ivan Tsarevich),以便第二天晚上采取行动。 如果青蛙公主狼(Wolf the Frog Princess)袭击,他会变成一个普通的好伙伴,无法检查任何人,而且公主不会知道这实际上是灰太狼,因为该狼不会在晚上睡觉。 但是,狼人今天下午发现了哪位球员是青蛙公主,并可能试图说服他带给伊凡·萨雷维奇(Ivan Tsarevich)处决青蛙公主的剩余好家伙和红娘子。 另外,第二天晚上,她可以尝试以匿名方式说服青蛙公主到平民身边,这样她就不会碰任何人。 狼可以在晚上牺牲自己以拯救伊凡·萨维维奇(Ivan Tsarevich)或智者瓦西里萨(Vasilisa the Wise),如果他建议狼突然掉入强盗的打击之下,或者被科什切(Koshchei)僵化(狼对科什切的魅力具有天生的免疫力),但是狼是在自我牺牲之后离开游戏的。

智者瓦西里萨
智者瓦西里萨(Vasilisa the Wise) -为平民而战 ,但他们不了解她,因为瓦西里萨非常谦虚。 同样,智者瓦西里萨(Vasilisa the Wise)he愈时,不会提出问题,以及一位好医生如何连续治愈所有人。 但是,如果她的药被Koschei,Likho或Leshiy喝醉了,那么他们的寿命不应超过一天,因为Vasilisa只治疗人。 明智的药物Vasilisa不会对Snory Gorynych或Kota-Bajun有所帮助,但不会带来伤害。 此外,科特·巴音在晚上不接触Vasilisa,因为Vasilisa不会去无生命的森林买药。 此外,瓦西莉莎上的青蛙公主的女性魅力不起作用。 如果他们试图杀死她的病人两次,这种药将无能为力。 Vasilisa不会从魔法攻击(例如从Likh的诅咒)中解救出来。 下午,瓦西莉莎(Vasilisa)的举止像个红色少女,只有稍纵即逝的略带悲伤的表情可以暗示她是遥远的遥遥领先的最好的医生。

强盗
强盗与以前的所有角色不同,彼此认识,因为他们生活在同一个小室中,并且也认识Leshy和Babu Yaga,因此他们可以从第一步开始立即采取一致行动。 但是,只有帮派头目在夜间执行行动,白天不投票,而其他强盗则努力地假扮成好家伙和红娘子。 如果领导者出于任何原因离开游戏,其余强盗之一将立即取代他的位置。 首先,强盗试图使Ivan Tsarevich失去能力,直到他从好伙伴和红娘子那里聚集了足够的力量以在下午积极对抗强盗。

小妖精
哥布林在晚上为强盗监视,告知他们在他们的小室中发现的角色,但白天不投票,因为他不住在村子里。 但是,其他玩家可以投票给Leshy,并处决他。 由于Leshiy来自沼泽,青蛙公主无法勾引他,如果他尝试,Leshiy将为她标记房子,村民将了解她的真实身份。 勒沙不惧怕科什切伊的咒语是不值得的,但瓦西里萨可以将他治死。 如果Kot-Baiyun试图攻击Lesha,那么他冒着失去铁爪的危险,然后Kot将只用一种杂音就可以安乐死受害者。

巴巴雅加
巴巴·雅加(Baba Yaga)还与强盗一起工作,在夜间变幻莫测:它可以将疾病传播给其他玩家,也可以保护盟友之一不受攻击。 她的巫术比利亚的诅咒还要强大。 下午,巴巴·雅加(Baba Yaga)也很活跃:受她保护的人即使以多数票也不能被处决。 但是,用于白天保护的魔力根源有限,因此Baba Yaga不能保护任何人(包括他本人)每场比赛超过三遍。 在今天下午,Baba Yaga假装成通常的Red Maiden,并与所有人投票。

蛇戈里尼奇
到了晚上, 毒蛇-高里尼奇(Serpent-Gorynych)飞越村庄,森林和沼泽,并从事抢劫活动,白天露出了强盗的角色。 白天,蛇睡觉,因此它不投票,但是可以以多数票执行。 蛇对每个人都非常危险,特别是对于强盗和伊凡·萨维奇。 与谁抢夺无关紧要,但是如果狼或地精打开它,他可以成为有价值的盟友。 如果您在夜间杀死Snake,您很有可能会获得一个非常有价值的物品-Snake Skin,它将保护其拥有者免受物理攻击。

著名的独眼
著名的独眼夜会杀死途中遇到他且无法被杀的所有人(Leshiy,Kota-Bajun或Zmety Gorynych)-诅咒,因此任何试图与当晚该死的人交流的人都会在白天死亡。 该死的自己也死了,不仅是Kot-Baiun死了,后者只是上床睡觉以增强体力,第二天晚上跳过了步子。 只有巴巴亚加(Baba Yaga)可以从诅咒中拯救力克。 诅咒不会影响击败Kota-Baiyun的人:他像猫一样,只是通过了通行证就寝。

青蛙公主
青蛙公主无法赢得比赛,但她可以通过在晚上吸引其他玩家来赚很多钱。 诱惑在同一时间跳过此举。 青蛙不能勾引智者瓦西莉莎(Vasilisa the Wise),她也应该避开勒莎(Lesha),后者将在第二天向所有人降服。 如果Ivan Tsarevich或强盗领袖找到一只青蛙,他们可以邀请平民或强盗到一边,虽然Ivan不接受青蛙的拒绝,但领袖并不那么挑剔。 但是公主很狡猾,可以成为双重代理人,因为尽管她一个人不能赢钱,但这是获得金牌的绝好机会,因为达到游戏结局的机会大大增加了! 下午,青蛙公主装扮成红色少女并与所有人投票。

不朽的科斯基
不朽的科斯基住在他的城堡里。 到了晚上,他走在周围的村庄和僵尸旁边,好家伙和红色少女,他们去服务了,毫无疑问地完成了所有任务。 拒绝执行命令,例如,白天的投票与Koschey所说的不同,或者拒绝白天的聊天,如果Koshchei禁止这样做,Koshchei Servant就会灭亡。 因此,尽管科斯基本人并未投票,但他能够在白天影响投票结果。 如果Koshchei被杀,他所有的受害者也将死亡。 瓦西里萨(Vasilisa)可以治愈科什切伊的仆人,然后他将恢复原来的角色。 蛇-高里尼奇和狼对天生的僵尸具有免疫力,因此科希(Koschey)满怀渴望,无法将他们转向僵尸。 而且,狼可以通过牺牲自己来帮助伊凡或瓦西里萨摆脱困境。 被狼营救后,狼获得了对僵尸的免疫力。

象牙巴云
科特迪瓦·巴云生活在森林里,在夜间狩猎。 白天在空洞中睡觉,所以他不参加投票。 但是,白天他可以以多数票被处决。 猫可以通过两种方式进行攻击:发出pur叫声-然后其受害者入睡且无法在夜间行走,还可以在第二天投票-或立即用铁爪杀死。 毒蛇攻击对蛇高龙查不起作用,但是,攻击莱斯希时,猫甚至可以不用爪就留在原地! 众所周知,不能诅咒猫,经过诅咒,猫只会睡一个晚上。 如果有人压倒了哥打巴结征服者,他将得到任何疾病的治疗,包括对利哈的诅咒。 玩家保留这种科托瓦能力,直到游戏结束。 Koshchei的仆人白天无法为Cat投票,但是他们可以在不通知Koshchei的情况下间接找出Cat是谁。 Kot-Bayun不与Ivan或Robbers结盟,因此对于Kot来说,它们是主要目标。
二手技术
在编写游戏时,我选择了基于OpenFaaS的无服务器技术,因为该技术足以组织游戏,同时又开发出足够的功能来编写复杂的游戏规则而不会造成不必要的复杂性。 我还将使用Kubernetes集群,因为这种部署应用程序的方式使快速部署变得容易且可靠,并且具有轻松扩展的能力。 为了创建游戏逻辑,只能省却OpenFaaS,但是我还将尝试将Storyteller作为一个单独的容器来比较实现的复杂性。 我选择Go作为微服务和功能的主要编程语言,因为我在业余时间已经研究了很长时间以替代Perl,因此js将用于基于特定框架的用户与微服务和功能的交互。 我将在本系列的相应文章中讨论最终决定。 在功能之间进行通信时,我选择了NATS.io,因为我之前已经遇到过它,并且可以很容易地集成到Kubernetes中。
公告公告