一种基于牌型迭代器的残局计算方法和装置与流程

文档序号:31049996发布日期:2022-08-06 06:43阅读:92来源:国知局
一种基于牌型迭代器的残局计算方法和装置与流程

1.本技术涉及计算机技术领域,特别涉及一种基于牌型迭代器的残局计算方法、装置、计算设备和计算机可读存储介质。


背景技术:

2.目前大多数竞技类棋牌游戏都提供残局模式,残局是指从中间阶段开始的游戏模式。在竞技类棋牌游戏的残局模式中,玩家从开局就持有部分棋牌,并与ai进行对战。因此在对战的过程中,ai为了得到出牌结果,在服务器端需要进行大量的计算。现有技术中,计算过程性能较低,占用了大量cpu、内存等硬件资源,计算的时间较长用户体较差,当并发较多时还会导致进程被系统强制退出。


技术实现要素:

3.有鉴于此,本技术实施例提供了一种基于牌型迭代器的残局计算方法、装置、计算设备和计算机可读存储介质,以解决现有技术中存在的技术缺陷。
4.根据本技术实施例的第一方面,提供了一种基于牌型迭代器的残局计算方法,包括:
5.接收客户端的计算请求;
6.初始化牌型迭代器;
7.根据计算请求和牌型迭代器,递归计算出下一步的出牌结果;
8.将出牌结果返回给客户端。
9.根据本技术实施例的第二方面,提供了一种基于牌型迭代器的残局计算的装置,包括:
10.接收模块,用于接收客户端的计算请求;
11.初始化模块,用于初始化牌型迭代器;
12.计算模块,用于根据计算请求和牌型迭代器,递归计算出下一步的出牌结果;
13.发送模块,用于将出牌结果返回给客户端。
14.根据本技术实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述基于牌型迭代器的残局计算方法的步骤。
15.根据本技术实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述基于牌型迭代器的残局计算方法的步骤。
16.本技术实施例中,首先将出牌计算的过程分配给不同的子进程;在子进程进行初始化时,根据棋牌游戏的特点,在内存中一次性生成了固定数量的牌型迭代器,从而无需在出牌计算的过程中再次进行迭代器的分配,降低了内存申请次数;同样,在使用剪枝算法时,不再执行普通hashmap的hash值重新分配过程,直接使用在初始化时生成的固定大小的hashmap,进一步大幅度降低了内存的申请和释放次数,也减少了cpu的使用率,极大的提高
了服务器的计算效率。
附图说明
17.图1是本技术实施例提供的计算设备的结构框图;
18.图2是本技术实施例提供的一种基于牌型迭代器的残局计算方法的流程示意图;
19.图3是本技术实施例提供的一种基于牌型迭代器的残局计算方法中利用牌型迭代器进行计算过程的示意图;
20.图4是本技术实施例提供的一种基于牌型迭代器的残局计算装置的示意图。
具体实施方式
21.在下面的描述中阐述了很多具体细节以便于充分理解本技术。但是本技术能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本技术内涵的情况下做类似推广,因此本技术不受下面公开的具体实施的限制。
22.在本技术一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术一个或多个实施例。在本技术一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本技术一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
23.应当理解,尽管在本技术一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“响应于确定”。
24.在本技术中,提供了一种基于牌型迭代器的残局计算方法、装置、计算设备和计算机可读存储介质,在下面的实施例中逐一进行详细说明。
25.图1示出了根据本技术一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
26.计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
27.在本技术的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本技术范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
28.计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计
算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
29.其中,处理器120可以执行图2所示的一种基于牌型迭代器的残局计算方法中的步骤。图2示出了根据本技术一实施例的基于牌型迭代器的残局计算方法的流程图,该方法用于计算服务器,包括步骤202至步骤208:
30.步骤202:接收客户端的计算请求。
31.接收客户端发送的计算请求,计算请求中包括各方当前所拥有的牌面以及玩家的当前出牌。
32.进一步的,服务器利用主进程接收客户端的计算请求,并将计算请求分配到不同的子进程中,该子进程的数量最多不超过cpu的数量-1。
33.进一步的,主进程收到计算请求后,根据计算请求中的数据在缓存数据库进行查询,判断是否存在计算结果,有则直接返回结果,否则启动计算子进程进行实时计算。
34.进一步的,服务器主进程使用golang语言实现,子进程使用c语言实现,两者通过tcp协议进行交互。
35.步骤204:初始化牌型迭代器。
36.在一种可行的实施方式中,服务器在子进程中使用牌型迭代器计算得到残局牌面的解法,每一种牌型迭代器包括特定的游戏牌型。
37.进一步的,在子进程启动时对牌型迭代器进行初始化,在初始化时进行牌型迭代器的内存分配,将全部牌型迭代器在内存中进行池化管理。具体的,例如,在斗地主游戏中,针对单张、一对、三带一、炸弹、顺子等牌型分别生成多个迭代器,其中每个牌型的迭代器数量是一定的,如单张牌型的迭代器数量最多不超过54个,因此在初始化迭代器时,可以一次性将所有的牌型迭代器在内存中进行分配,进行统一的池化管理,从而降低了整个计算过程中的内存分配次数,提高了程序运行的效率。
38.在另一种可行的实施方式中,当子进程启动时在内存中申请固定大小的hashmap,一次性完成hashmap内存块的申请。
39.步骤206:根据计算请求中的数据和牌型迭代器,计算下一步出牌结果。
40.完成初始化工作后,子进程根据计算请求进行出牌结果的计算。
41.在一种可行的实施方式中,子进程根据双方拥有的牌面计算得到ai的下一步出牌结果;
42.进一步的,子进程根据残局的牌面以及玩家的当前出牌,通过极大极小值算法进行出牌计算;在计算过程中,使用已经分配的牌型迭代器交替对所有可能的出牌进行递归迭代,直到获取该残局下的胜负结果,如图3所示。
43.在另一种可行的实施方式中,在使用极大极小值算法计算时,进一步使用剪枝算法简化计算的复杂度。具体的,在剪枝算法中,使用已经在步骤204中分配的固定大小的hashmap进行迭代分枝结果的记录。
44.进一步的,根据计算得到的残局胜负结果,得到下一步出牌结果。具体的,当存在必胜的结果时,获取必胜路径上的下一步出牌结果,若没有必胜结果,则根据玩家的出牌选
择对应牌型的牌。
45.在另一种可行的实施方式中,若子进程的计算耗时超过了预设阈值,将计算结果存入到缓存数据库中。
46.步骤208:将出牌结果返回给客户端。
47.在该步骤中,子进程将计算得到的出牌结果返回给服务器的主进程,主进程进而将其返回给客户端,客户端根据该出牌结果进行出牌。
48.在上述实施例中,为了提高残局的计算效率,首先将计算的过程分配给不同的子进程;在子进程进行初始化时,根据棋牌游戏的特点,在内存中一次性生成了固定数量的牌型迭代器,从而无需在出牌计算的过程中再次进行迭代器的分配,降低内存申请次数;同样,在使用剪枝算法时,不再执行普通hashmap的hash值重新分配过程,直接使用在初始化时生成的固定大小的hashmap,从而大幅度降低了内存的申请和释放次数,也减少了cpu的使用率。通过上述的方法,用于计算的子进程的内存使用率稳定在300m左右,平均计算时间在500毫秒左右,最长计算时间在15秒左右,从而解决了残局计算时的高cpu、高内存的问题,同时减少了用户的等待时间,提升了用户体验。
49.与上述方法实施例相对应,本技术还提供了一种基于牌型迭代器的残局计算装置实施例,图4示出了本技术一个实施例的一种基于牌型迭代器的残局计算装置的结构示意图。如图4所示,该装置包括:
50.接收模块,用于接收客户端的计算请求;
51.初始化模块,用于初始化牌型迭代器;
52.计算模块,用于根据计算请求中的数据和牌型迭代器,计算下一步的出牌结果;
53.发送模块,用于将出牌结果返回给客户端。
54.上述为本实施例的一种基于牌型迭代器的残局计算装置的示意性方案。需要说明的是,该基于牌型迭代器的残局计算装置的技术方案与上述的基于牌型迭代器的残局计算方法的技术方案属于同一构思,在该装置的技术方案未详细描述的细节内容,均可以参见上述基于牌型迭代器的残局计算方法的技术方案的描述。
55.本技术一实施例中还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述的基于牌型迭代器的残局计算方法的步骤。
56.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的基于牌型迭代器的残局计算方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述基于牌型迭代器的残局计算方法的技术方案的描述。
57.本技术一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述基于牌型迭代器的残局计算方法的步骤。
58.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的基于牌型迭代器的残局计算方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述基于牌型迭代器的残局计算方法的技术方案的描述。
59.上述对本技术特定实施例进行了描述。其它实施例在所附权利要求书的范围内。
在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
60.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
61.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本技术所必须的。
62.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
63.以上公开的本技术优选实施例只是用于帮助阐述本技术。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本技术的内容,可作很多的修改和变化。本技术选取并具体描述这些实施例,是为了更好地解释本技术的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本技术。本技术仅受权利要求书及其全部范围和等效物的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1