一种基于树状拓扑的纸牌游戏的牌面生成装置

文档序号:31064152发布日期:2022-08-09 20:09阅读:84来源:国知局
一种基于树状拓扑的纸牌游戏的牌面生成装置

1.本发明属于计算机设计领域,涉及一种单人纸牌游戏的牌面生成装置,具体涉及一种基于树状拓扑的纸牌游戏的牌面生成装置。


背景技术:

2.tripeaks是一款经典的单人纸牌游戏,使用点数为a、2、3...j、q、k的纸牌组成牌面,牌面包括两个部分,牌桌区与底牌区,如图1所示,牌桌区的纸牌分层堆叠,形成金字塔或倒金字塔等形成,其中叠放在最上层的纸牌为翻开状态,即数字面朝上,其余纸牌的数字面朝下。底牌区的纸牌按照随机顺序横向堆叠,同样,叠放在最上层的纸牌数字面朝上,其余纸牌均为数字面朝下。
3.根据底牌区翻开纸牌的点数,选择牌桌区翻开的纸牌中,点数相邻的纸牌进行回收,牌桌区被回收的纸牌成为底牌区翻开的纸牌,而底牌区原本被翻开的那张纸牌做丢弃处理。如果牌桌区不存在任何可以被回收的纸牌,则将底牌区被翻开的纸牌丢弃,并将原本堆叠在其下方的纸牌翻开。当牌桌区中数字朝下的纸牌上方没有堆叠纸牌时,将该纸牌翻开,作为可以被回收的纸牌。依次类推,直至牌桌区的所有纸牌被回收,游戏成功。如果底牌区的纸牌全部被丢弃,但是牌桌区还存在没有被回收的纸牌,则游戏失败。
4.现有tripeaks纸牌游戏的牌面形式中,牌桌区的纸牌一般堆叠为金字塔形或倒金字塔形,区别仅在于堆叠的层数不同,形式比较单一,可玩性比较低,同时也不利于游戏的难度设置。如果依靠人工的方式来设计不同的牌面结构,虽然可以保证形式的丰富性,但是工作量太大,此外在游戏运行过程中也对游戏装置的性能有较高要求。


技术实现要素:

5.针对现有技术的不足,本发明提出了一种基于树状拓扑的纸牌游戏的牌面生成装置,通过随机生成的树状拓扑作为牌桌区纸牌的堆叠结构,丰富牌桌区牌面形式的同时,避免模型加载导致的卡顿问题。
6.一种基于树状拓扑的纸牌游戏的牌面生成装置,包括参数初始化模块、拓扑结构生成模块、牌面点数生成模块和展示模块。
7.所述参数初始化模块用于设置牌面的基本参数,包括牌桌区纸牌数量最小值min_n和最大值max_n,牌桌区纸牌分组数量g与初始翻开纸牌数量最大值max_i,底牌区纸牌数量count,通关率最小值min_r与最大值max_r。其中,min_n<max_n、g<max_i、count≥1、min_r<max_r。
8.所述拓扑结构生成模块根据参数初始化模块中设置的牌桌区纸牌数量参数,随机生成符合数量要求的拓扑结构,具体包括以下步骤:
9.s1.1、随机生成n个节点作为一代节点,n≥2。然后从一代节点开始向上方和下方生成n-1、n或n+1个节点作为上层二代节点和下层二代节点,以此类推,生成多代节点,即每一代节点的数量与其上一代节点的数量的关系为相等、多一个或少一个。当然以上是把同
一代的节点视为一组的情况,同一代的节点数如果大于等于2,那么就有概率会将其拆分成若干组,分组后每组各自生成自己的二代节点,区别是这些二代节点的数量只能是上一代节点数量少1或者相等。
10.s1.2、在每次生成完下一代节点的之后,会连接每一代节点与其下一代节点,两代之间节点的连接线不能交叉,建立拓扑结构。如果下一代节点的数量更多,则每个节点与下一代中相邻位置的两个节点同时连接;如果下一代的节点数量更少,那么每两个节点与下一代中相邻位置的一个相连接;如果两代的节点数量相同,则每个节点均可以与下一代中相同位置的节点连接,或者除了最左边或最右边的节点只连接与下一代中相同位置的节点,其余的节点连接其在二代节点中的对应位置以及相邻的一个节点。当所有节点均与其他节点连接后,得到拓扑结构a。
11.s1.3、判断s1.2得到的拓扑结构a是否满足左右对称关系。当拓扑结构a满足左右对称关系时,判断拓扑结构a中的总节点数是否超过牌桌区纸牌数量最大值max_n,若超过则返回s1.1,若不超过则将其作为拓扑结构b,并进入s1.4。当拓扑结构a不满足左右对称关系时,判断拓扑结构a中的总节点数是否超过牌桌区纸牌数量最大值的一半max_n/2,若超过则返回s1.1,若不超过则通过镜面复制的方法,使其满足左右对称关系后作为拓扑结构b,并进入s1.4。
12.s1.4、使用牌桌区纸牌数量最大值max_n除以s1.3得到的拓扑结构b的总节点数,将计算结果b向下取整后,判断b-1是否大于0,当b-1>0时,将拓扑结构b随机复制0~b-1次,得到拓扑结构c,并进入s1.5;当b-1≤0时,直接将拓扑结构b作为拓扑结构c,并进入s1.5。
13.s1.5、判断s1.4得到的拓扑结构c的总节点数是否大于牌桌区纸牌数量最小值min_n,若小于则进入s1.6;若大于则判断拓扑结构c的总节点数与牌桌区纸牌数量最大值max_n的差值是否大于6,若大于则进入s1.6,若小于则将拓扑结构c作为拓扑结构e,并直接进入s1.7。
14.s1.6、限制总节点数小于拓扑结构c的总节点数与牌桌区纸牌数量最大值max_n的差值,根据s1.1~s1.4的方法,生成拓扑结构d。然后将拓扑结构d与拓扑结构c合并,得到新的拓扑结构e。定义拓扑结构中独立树状拓扑的个数为该拓扑结构的组数,为了保证拓扑结构e的左右对称关系,当拓扑结构c的组数为奇数时,只有组数为偶数的拓扑结构d才能与其合并组成拓扑结构e,否则需要重新生成拓扑结构d。然后通过s1.5的方法对拓扑结构e进行处理。
15.s1.7、判断拓扑结构e的组数是否与参数初始化模块中设置的牌桌区纸牌分组数量g相等,若相等则保存该拓扑结构e。若不相等则返回s1.1,重新生成新的拓扑结构。
16.所述牌面点数生成模块,根据拓扑结构生成模块保存的拓扑结构e与参数初始化模块中设置的参数,为每个节点赋予符合数量要求和通关率要求的点数。具体包括以下步骤:
17.s2.1、根据底牌区纸牌数量count生成一组节点,然后为该组节点与拓扑结构e中的每一个节点的位置随机放置一张纸牌,纸牌的点数范围为a、2、3...j、q、k。
18.s2.2、随机选取拓扑结构e中某行的若干连续节点作为初始翻开节点,则初始翻开节点上的纸牌为初始翻开纸牌。初始翻开节点的数量在牌桌区纸牌分组数量g与初始翻开
纸牌数量最大值max_i之间,且所有初始翻开节点所在的位置应该满足左右对称性。
19.s2.3、将s2.2中选取的初始翻开节点设置为第0层节点,将拓扑结构e中与第0层节点之间具有连接线的节点设置为第1层节点,与第1层节点具有连接线的设置为第2层节点,以此类推,直至拓扑结构e中所有的节点都被赋予了层级。然后将第e层节点的纸牌设置为覆盖在与其具有连接关系的第e+1层节点的纸牌上方,得到牌桌区纸牌堆叠顺序。
20.s2.4、将s2.1和s2.3得到的牌桌区和底牌区纸牌堆叠顺序与纸牌点数作为牌面,使用深度优先搜索的方式,按照tripeaks的规则进行选择,计算该牌面的通关概率r,当min_r≤r≤max_r时,保存该牌面,否则返回s2.1。
21.所述展示模块根据牌面点数生成模块输出的牌面,将其展示为符合堆叠顺序的形式,加载到游戏界面上。
22.本发明具有以下有益效果:
23.基于参数初始化模块中生成的基本参数,通过拓扑结构生成模块和牌面点数生成模块,每次生成结果具有一定的随机性,可以得到形式丰富多样的牌面结构,还可以通过更改通关概率合理设置游戏难度梯度。并且可以降低海量模型加载导致的游戏装置卡顿的问题。
附图说明
24.图1为传统的tripeaks纸牌游戏规则;
25.图2为牌面生成步骤流程图;
26.图3为节点生成示意图;
27.图4(a)、图4(b)、图4(c)、图4(d)为节点间拓扑结构建立时不同情况下的示意图;
28.图5为拓扑结构镜面复制示意图;
29.图6为拓扑结构复制示意图;
30.图7为实施例中牌面点数生成模块生成的牌面示意图;
31.图8为实施例中展示模块展示的牌面示意图。
具体实施方式
32.下面结合附图和具体实施方式对本发明进行详细描述,但是本发明的保护范围并不仅限于此。本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本技术各权利要求所要求保护的技术方案。
33.一种基于树状拓扑的纸牌游戏的牌面生成装置,包括参数初始化模块、拓扑结构生成模块、牌面点数生成模块和展示模块。
34.所述参数初始化模块用于设置牌面的基本参数,包括牌桌区纸牌数量最小值min_n和最大值max_n,牌桌区纸牌分组数量g与初始翻开纸牌数量最大值max_i,底牌区纸牌数量count,通关率最小值min_r与最大值max_r。其中,min_n<max_n、g<max_i、count≥1、min_r<max_r。
35.所述拓扑结构生成模块根据参数初始化模块中设置的牌桌区纸牌数量参数,随机生成符合数量要求的拓扑结构,如图2所示,具体包括以下步骤:
36.s1.1、如图3所示,随机生成3个节点作为一代节点。然后在一代节点的上方添加四
个节点形成上层二代节点。然后要在一代节点的下方生成二代节点,一代节点的节点数为3,可以进行分组。这里将一代节点三个节点分成了1:2两个部分,第一个部分只有一个节点,其对应的下层二代节点数可以是零个或者一个,这里对应的下层二代节点数为一个;第二个部分有两个节点,其对应的下层二代节点个数为一个。
37.s1.2、在每次添加完新的一代节点后,需要将两代节点进行连接,两代之间节点的连接线不能交叉,建立拓扑结构。如果两代的节点数量相同,则每个节点均可以与下一代中相同位置的节点连接,或者也可以除了最左边或最右边的节点只连接与下一代中相同位置的节点,其余的节点连接其在二代节点中的对应位置以及相邻的一个节点。
38.如图4(a)、4(b)所示,其中一代节点与二代节点的数量都相同,因此可以像图4(a)一样一代节点中的节点与二代节点中相同位置的节点连续。当然也可以像图4(b)一样,只有最左边的一代节点只连接二代节点中对应的位置,其余的节点连接其在二代节点中的对应位置以及相邻的一个节点。。
39.如果下一代节点的数量更多,则每一个节点与下一代中相邻两个节点进行连接。
40.如图4(c)所示,其中下层二代节点的数量多于一代节点,因此一代节点中的第一个节点可以与二代节点中的第一个和第二个节点同时相连。同理,一代节点中的第二个节点可以与二代节点中的第二个和第三个节点同时相连。
41.如果下一代的节点数量更少,那么每两个节点与下一代中相邻位置的一个相连接。
42.如图4(d)所示,其中一代节点的数量为3个、二代节点是数量为2个,因此一代节点中第一个和第二个节点连接二代节点中的第一个节点,一代节点中的第二个和第三个节点则连接二代节点中的第二个节点。
43.当所有节点均与其他节点连接后,得到拓扑结构a。
44.s1.3、判断s1.2得到的拓扑结构a是否满足左右对称关系。当拓扑结构a满足左右对称关系时,判断拓扑结构a中的总节点数是否超过牌桌区纸牌数量最大值max_n,若超过则返回s1.1,若不超过则将其作为拓扑结构b,并进入s1.4。当拓扑结构a不满足左右对称关系时,判断拓扑结构a中的总节点数是否超过牌桌区纸牌数量最大值的一半max_n/2,若超过则返回s1.1,若不超过则通过镜面复制的方法,使其满足左右对称关系后作为拓扑结构b,并进入s1.4,如图5所示。
45.s1.4、使用牌桌区纸牌数量最大值max_n除以s1.3得到的拓扑结构b的总节点数,将计算结果b向下取整后,判断b-1是否大于0,当b-1>0时,将拓扑结构b随机复制0~b-1次,得到拓扑结构c,并进入s1.5,如图6所示;当b-1≤0时,直接将拓扑结构b作为拓扑结构c,并进入s1.5。
46.s1.5、判断s1.4得到的拓扑结构c的总节点数是否大于牌桌区纸牌数量最小值min_n,若小于则进入s1.6;若大于则判断拓扑结构c的总节点数与牌桌区纸牌数量最大值max_n的差值是否大于6,若大于则进入s1.6,若小于则将拓扑结构c作为拓扑结构e,并直接进入s1.7。
47.s1.6、限制总节点数小于拓扑结构c的总节点数与牌桌区纸牌数量最大值max_n的差值,根据s1.1~s1.4的方法,生成拓扑结构d。然后将拓扑结构d与拓扑结构c合并,得到新的拓扑结构e。定义拓扑结构中独立树状拓扑的个数为该拓扑结构的组数,为了保证拓扑结
构e的左右对称关系,当拓扑结构c的组数为奇数时,只有组数为偶数的拓扑结构d才能与其合并组成拓扑结构e,否则需要重新生成拓扑结构d。然后通过s1.5的方法对拓扑结构e进行处理。
48.s1.7、判断拓扑结构e的组数是否与参数初始化模块中设置的牌桌区纸牌分组数量g相等,若相等则保存该拓扑结构e。若不相等则返回s1.1,重新生成新的拓扑结构。
49.所述牌面点数生成模块,根据拓扑结构生成模块保存的拓扑结构e与参数初始化模块中设置的参数,为每个节点赋予符合数量要求和通关率要求的点数。具体包括以下步骤:
50.s2.1、根据底牌区纸牌数量count生成一组节点,然后为该组节点与拓扑结构e中的每一个节点的位置随机放置一张纸牌,纸牌的点数范围为a、2、3...j、q、k。在本实施例中,count=16,拓扑结构e的节点数为16,组数为2。随机摆放纸牌的结果如图7所示,为了方便展示,以节点中的数字作为纸牌点数。其中底牌区最左边的数字表示底牌区翻开纸牌,从左到右对应从上到下的堆叠顺序。
51.s2.2、随机选取拓扑结构e中的4个节点作为初始翻开节点,初始翻开节点所在的位置满足左右对称性,在图7中显示为圆形。
52.s2.3、将s2.2中选取初始翻开节点设置为0层节点,将拓扑结构e中与0层节点之间具有连接线的节点设置为1层节点,在图7中显示为椭圆形。与1层节点具有连接线的设置为2层节点,在图7中显示为矩形。以此类推,为拓扑结构e中所有的节点赋予层级,并相应地在图7中将3层节点显示为三角形,4层节点显示为星形。
53.然后将e层节点的纸牌设置为覆盖在与其具有连接关系的e+1层节点的纸牌上方,得到牌桌区纸牌堆叠顺序。
54.s2.4、将s2.1和s2.3得到的牌桌区和底牌区纸牌堆叠顺序与纸牌点数作为牌面,使用深度优先搜索的方式,按照tripeaks的规则进行点击,计算该牌面的通关概率r,当min_r≤r≤max_r时,保存该牌面,否则返回s2.1。
55.所述展示模块根据牌面点数生成模块输出的牌面,将其展示为符合堆叠顺序的形式,加载到游戏界面上,如图8所示。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1