一种棋牌游戏托管方法及装置与流程

文档序号:17470930发布日期:2019-04-20 05:49阅读:357来源:国知局
一种棋牌游戏托管方法及装置与流程

本发明涉及牌类游戏技术领域,具体涉及一种棋牌游戏托管方法及装置。



背景技术:

随着移动设备的大量普及,棋牌游戏逐渐从pc端在向移动端迁移,由于受移动端网络信号质量的制约,不能保证在任何地方都具有足够良好的信号质量来支持游戏运行。因此,在用户无法进行正常操作时,需要借助游戏托管来保证游戏的顺利进行。

现有技术中,在进行托管时,往往只以点数大小来进行排序,从数组中依次提取牌型,只要满足条件的方案都视为可行方案,并没有对各种可行方案进行估算分析,因此在托管之后,棋牌游戏的成绩往往大幅下降。



技术实现要素:

为克服上述现有技术的不足,本发明提供了一种棋牌游戏托管方法及装置。通过对当前已有的数据进行分析计算,得出当前局势的优劣,同时根据用户本身数据的强弱来进行估算分析,得出当前最优的游戏方案,从而来进行智能托管。

本发明提供的一种棋牌游戏托管方法,其特征在于,包括以下步骤:

s101、定义牌型权值;根据所有牌型的数据,对于各个牌型分别定义对应的牌型权值;

s102、进行基础牌型组合;将每局游戏开始时下发的牌张进行基础牌型组合;

s103、计算手数;将已经进行过基础牌型组合的牌型进行再次牌型组合;

s104、进行牌力分析;牌力分析内容包括其他用户所出的牌型是否存在可以大过的牌型;

s105、判断牌力是否满足要求;

当牌力满足要求时,继续执行s106;当牌力不满足要求时,继续执行s110;

s106、判断最优牌型组合中是否存在匹配的牌型,如果判断结果为是,则继续执行s110,如果判断结果为否,则继续执行s107;

s107、拆分最优组合,查找匹配牌型;

s108、判断是否存在匹配牌型,如果判断结果为是,则继续执行s109;如果判断结果为否,则继续执行s110;

s109、重新计算手数及牌力分析;对删除打出牌型后的牌张列表再次进行手数合并;

s110、根据查找出的结果来选择出牌还是过牌,如果没有可以打出的牌型,那么选择过牌;否则选择出牌。

优选地,再次牌型组合的具体过程为:

将牌张列表中牌点张数最多的n牌点取出,以n牌点在列表中的下标为中心点,分别对左侧牌张列表以及右侧牌张列表进行递归合并,一次合并结束后将当前的牌点张数减1,再次递归合并,直到牌点张数减至1,递归合并结束,记录当前合并结果的手数,根据手数对合并结果进行排序,删除手数大于最小手数的组合结果。

优选地,根据当前其他用户所出牌张的牌型以及大小,以及当前牌局所有用户已出的牌张列表,用户自己所出的位置信息,来对需要打出的牌张进行牌力分析。

优选地,按照牌点查找出所有符合的牌型,并对每个牌型剩余的牌张再次进行合并,计算剩余的手数。根据本发明的一个优选实施方式,当满足手数最少时,则视为满足最优的出牌策略;

如果存在相同手数时,则继续对牌点进行降序排序,满足最小牌点的则视为满足最优出牌策略。

优选地,找出所有牌型相同的组合列表,将这个列表中的所有牌型组合按照目标牌型进行组合,同时对比组合前后的手数差,将所有的组合结果根据手数进行排序,优先选择手数无变化的组合方案。

优选地,如果没有牌型相同的组合列表,那么根据牌型权值的定义,对牌型不符合目标牌型、但是可通过拆分的方式来得到目标牌型的牌型进行优先级排序。

优选地,所述步骤s103进一步包含如下步骤:

s201、牌点合并;对所有牌点进行数值合并,并以数组的形式存储。

s202、获取最大牌张数n;

s203、对相邻的牌点进行组合,形成连续的牌点数组;

s204、判断连续牌点数组范围区间内是否存在拆分出的牌点;如果判断为是,则执行s205,如果判断结果为否,则执行s206;

s205、将单牌点插入到连续牌点数组中;

s206、将合并结果存储到结果数组;

s207、判断当前是否已合并达到二叉树根节点;如果是,则执行s208,如果否,则返回执行s201;

s208、判断当前最大牌张数是否大于1,如果判断结果为是,则执行s203;如果判断结果为否,则执行s209;

s209、合并结束;

优选地,步骤s205中进一步包含以下步骤:

s301、分别存储连续牌点列表与单牌点;

s302、遍历单牌点数组,找出与连续牌点数组中牌值相同的下标位;

s303、判断组合后总手数是否小于等于2;如果判断结果为是,则继续执行s304,如果判断结果为否,则返回执行s301;

s304、将连续牌点列表与单牌点列表以合并的牌点为中心,进行左右拆分;

s305、判断拆分后左侧、右侧是否存在单牌点;如果判断结果为是,则返回执行s301,如果判断结果为否,则执行s306;

s306、合并结束,存储合并结果至结果数组中。

本发明还提供了一种棋牌游戏托管装置,包括以下模块:

牌型权值定义模块,用于根据所有牌型的数据,对于各个牌型分别定义对应的牌型权值;

基础牌型组合模块,用于将每局游戏开始时下发的牌张进行基础牌型组合;

手数计算模块,用于将已经进行过基础牌型组合的牌型进行再次牌型组合;

牌力分析模块,用于根据当前其他用户所出牌张的牌型以及大小,以及当前牌局所有用户已出的牌张列表,用户自己所出的位置信息,来对需要打出的牌张进行牌力分析;

牌力判断模块,用于判断牌力是否满足要求;

匹配牌型判断模块,用于当牌力判断模块判断牌力满足要求时,进一步判断最优牌型组合中是否存在匹配的牌型;

拆分查找匹配牌型模块,用于当匹配牌型判断模块判断牌力不满足要求时,在最优牌型组合中根据牌型来查找匹配的牌型,所述匹配的牌型是指满足牌型制约逻辑关系的牌型;

匹配模型判断模块,用于判断是否存在匹配牌型;

重新计算手数模块,用于在匹配模型判断模块判断存在匹配牌型时,重新计算手数;

出牌/过牌模块,用于当牌力判断模块判断牌力不满足要求时,或者当匹配牌型判断模块判断牌力满足要求时,或者匹配模型判断模块判断不存在匹配牌型时,执行相应的出牌或过牌操作。

优选地,手数计算模块,用于将已经进行过基础牌型组合的牌型进行再次牌型组合进一步包括:

将牌张列表中牌点张数最多的n牌点取出,以n牌点在列表中的下标为中心点,分别对左侧牌张列表以及右侧牌张列表进行递归合并,一次合并结束后将当前的牌点张数减1,再次递归合并,直到牌点张数减至1,递归合并结束,记录当前合并结果的手数,根据手数对合并结果进行排序,删除手数大于最小手数的组合结果。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。

附图说明

图1示出了根据本发明的一个实施例的棋牌游戏托管方法流程示意图;

图2示出了根据本发明的另一实施例的棋牌游戏托管方法流程示意图;

图3示出了根据本发明的另一实施例的棋牌游戏托管方法流程示意图。

具体实施方式

为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的棋牌游戏托管方法及装置其具体实施方式、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。

本发明中使用的术语及缩略语如下:

ai:人工智能(artificialintelligence),它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

托管:在用户无法进行操作时,由计算机ai来帮助用户进行游戏操作。

估值:对某一个具体模型分配一个数量值,并根据这个数量值来分配对应的计算逻辑。

牌张点数:是牌张面值展示的点数大小。

牌型:牌张组合类型。

权值:将各个牌张按照自定义的点数进行权重赋值。

张数:牌型中牌张的个数。

手数:将所有牌张出完所需要的次数。

如图1所示,在本发明的一个具体实施方式中,提供了一种基于对牌张进行智能分析组合之后,进行托管的方法,具体步骤如下:

s101、定义牌型权值;

根据本发明的一个具体实施方式,根据所有牌型的数据,对于各个牌型分别定义对应的牌型权值。根据本发明的一个优选实施方式,权值为整数。根据本发明的一个优选实施方式,权值与牌型的张数与牌型定义具有关联关系。根据本发明的一个优选实施方式,对于特定牌型,权值可以定义成相对较大的权值。由于一些特殊牌型可能具有多种特征表现,所以对于这种牌型的权值定义需要根据具体的特征表现来进行定义。

s102、进行基础牌型组合;

将每局游戏开始时下发的牌张进行基础牌型组合,根据本发明的一个优选实施方式,牌型组合原则为按照基础牌型来对牌张进行组合。根据本发明的一个优选实施方式,将牌点相同的牌张进行组合。根据本发明的另一优选实施方式,将牌点连续并且张数相同的牌张进行组合。根据本发明的另一优选实施方式,将进行基础牌型组合后的牌张以牌张列表的形式记录。

s103、计算手数;

将已经进行过基础牌型组合的牌型进行再次牌型组合。根据本发明的一个优选实施方式,再次牌型组合的原则是将减少手数。

根据本发明的一个优选实施方式,使得手数减少的组合为正向组合,使得手数增加的组合为负向组合;

根据本发明的一个优选实施方式,再次牌型组合的具体过程为:

将牌张列表中牌点张数最多的n牌点取出,以n牌点在列表中的下标为中心点,分别对左侧牌张列表以及右侧牌张列表进行递归合并,一次合并结束后将当前的牌点张数减1,再次递归合并,直到牌点张数减至1,递归合并结束,记录当前合并结果的手数,根据手数对合并结果进行排序,删除手数大于最小手数的组合结果。

s104、进行牌力分析;

根据本发明的一个优选实施方式,根据当前其他用户所出牌张的牌型以及大小,以及当前牌局所有用户已出的牌张列表,用户自己所出的位置信息,来对需要打出的牌张进行牌力分析。

根据本发明的一个优选实施方式,牌力分析内容包括其他用户所出的牌型是否存在可以大过的牌型。根据本发明的一个优选实施方式,根据当前数据来进行牌型分析计算,由于各个牌型之间存在一个相互制约的逻辑关系,根据这个逻辑关系就可以得出自己的牌张列表以及队友的牌张列表中是否存在可以大过的牌型。

s105、判断牌力是否满足要求;

当牌力满足要求时,继续执行s106;当牌力不满足要求时,继续执行s110;

根据s104的牌力分析结果来判断是否可以出牌。

s106、判断最优牌型组合中是否存在匹配的牌型,如果判断结果为是,则继续执行s110,如果判断结果为否,则继续执行s107;

根据本发明的一个优选实施方式,在最优牌型组合中根据牌型来查找是否存在匹配的牌型,所述匹配的牌型是指满足牌型制约逻辑关系的牌型;

根据本发明的一个优选实施方式,按照牌点查找出所有符合的牌型,并对每个牌型剩余的牌张再次进行合并,计算剩余的手数。根据本发明的一个优选实施方式,当满足手数最少时,则视为满足最优的出牌策略。根据本发明的一个优选实施方式,如果存在相同手数时,则继续对牌点进行降序排序,满足最小牌点的则视为满足最优出牌策略。

s107、拆分最优组合,查找匹配牌型;

如果在最优牌型组合中没有查找到符合要求的匹配牌型,则需对最优牌型组合中的牌型进行拆分,

根据本发明的一个优选实施方式,找出所有牌型相同的组合列表,将这个列表中的所有牌型组合按照目标牌型进行组合,同时对比组合前后的手数差,将所有的组合结果根据手数进行排序,优先选择手数无变化的组合方案。

根据本发明的一个优选实施方式,如果没有牌型相同的组合列表,那么根据牌型权值的定义,对牌型不符合目标牌型、但是可通过拆分的方式来得到目标牌型的牌型进行优先级排序。

根据本发明的一个优选实施方式,优先拆分牌型权值小并且拆分后对总手数产生的变化小的牌型。

根据本发明的一个优选实施方式,如果仍未查找到匹配牌型,则将最优组合全部拆分成基础组合,继续从基础组合中查找牌型相同的组合列表,按照目标牌型进行查找。

s108、判断是否存在匹配牌型,如果判断结果为是,则继续执行s109;如果判断结果为否,则继续执行s110;

根据本发明的一个优选实施方式,根据s107查找的结果来判断是否存在匹配牌型,所述匹配牌型即为当前可出牌型,如果没有可出牌型,则表示当前牌张列表中没有可以打出的牌型。

s109、重新计算手数及牌力分析;

对删除打出牌型后的牌张列表再次进行手数合并。

根据本发明的一个优选实施方式,对剩余的牌张按照s102,s103中的步骤再次进行处理,在此不再赘述。

s110、根据查找出的结果来选择出牌还是过牌,如果没有可以打出的牌型,那么选择过牌;否则选择出牌。

如图2所示,步骤s103进一步包含如下步骤:

s201、牌点合并;

根据本发明的一个优选实施方式,对所有牌点进行数值合并,并以数组的形式存储。

s202、获取最大牌张数n;

根据本发明的一个优选实施方式,对数组中的牌点进行牌点张数排序,取得最大张数n。

s203、对相邻的牌点进行组合,形成连续的牌点数组;

根据本发明的一个优选实施方式,对数组中的牌点按照数值进行排序,判断当前下标的牌点与前后相邻的牌点相差是否是1,如果是1则表示是连续牌点,直到下一个牌点值相差大于1,退出循环,将上一个连续牌点数组存储在结果数组中。

s204、判断连续牌点数组范围区间内是否存在拆分出的牌点;如果判断为是,则执行s205,如果判断结果为否,则执行s206;

根据本发明的一个优选实施方式,判断s203步骤中连续牌点数组的范围内是否还有拆分出的单独剩余的牌点。

s205、将单牌点插入到连续牌点数组中;

将s204步骤中剩余的单独剩余的牌点插入到连续牌点数组中;

根据本发明的一个优选实施方式,依次遍历连续牌点的每个下标,直到找出能够与单独牌点进行拼接的下标位置,进行拆分,即将一个连续的牌点数组拆分为两个连续的牌点数组,同时保持手数不变。

s206、将合并结果存储到结果数组;

s207、判断当前是否已合并达到二叉树根节点;如果是,则执行s208,如果否,则返回执行s201;

根据本发明的一个优选实施方式,通过判断当前牌点值在数组中的下标是否已达到边界值,即当前下标两侧是否还存在可合并数组,来判断当前是否已合并达到二叉树根节点。如果还存在可合并数组,那么将可合并数组当做参数继续进行递归调用;如果不存在可合并数组,则返回重新开始。

s208、判断当前最大牌张数是否大于1,如果判断结果为是,则执行s203;如果判断结果为否,则执行s209;

根据本发明的一个优选实施方式,如果当前遍历的牌张最大张数大于1,那么将牌张张数减一,再次执行s103步骤进行合并,同时将合并结果存贮至结果数组中;如果最大牌张数等于1,那么表示已合并到最底层,结束合并。

s209、合并结束;

保存所有的合并结果,对结果数组中的数据进行手数分析,取出手数最少的所有结果数组。

如图3所示,步骤s205中进一步包含以下步骤:

s301、分别存储连续牌点列表与单牌点;

根据本发明的一个优选实施方式,以数组的方式分别存储单牌点与连续牌点。

s302、遍历单牌点数组,找出与连续牌点数组中牌值相同的下标位;

根据本发明的一个优选实施方式,将单牌点与连续牌点数组中的牌点进行同牌点合并,即相同的牌值进行合并,同时张数加1。

s303、判断组合后总手数是否小于等于2;如果判断结果为是,则继续执行s304,如果判断结果为否,则返回执行s301;

根据本发明的一个优选实施方式,判断s302步骤中后的牌点组合手数是否小于等于2,小于等于2即表示可以进行合并。

s304、进行左右拆分;

根据本发明的一个优选实施方式,将连续牌点列表与单牌点列表以合并的牌点为中心,进行左右拆分;

根据本发明的一个优选实施方式,当s304、s303步骤合并成功后,将当前合并的牌点下标左侧以及右侧的数组进行拆分,同时分别存储为单独的数组。

s305、判断拆分后左侧、右侧是否存在单牌点;如果判断结果为是,则返回执行s301,如果判断结果为否,则执行s306。

根据本发明的一个优选实施方式,在拆分后的数组中查找是否存在在数组范围内的单牌牌点,如果存在,那么将拆分后的数组以及单牌牌点当做参数再次进行s301步骤进行递归合并。

s306、合并结束,存储合并结果至结果数组中。

在本发明的一个具体实施方式中,还提供了一种棋牌游戏托管装置,包括以下模块:

牌型权值定义模块,用于根据所有牌型的数据,对于各个牌型分别定义对应的牌型权值;

根据本发明的一个优选实施方式,权值为整数。根据本发明的一个优选实施方式,权值与牌型的张数与牌型定义具有关联关系。根据本发明的一个优选实施方式,对于特定牌型,权值可以定义成相对较大的权值。由于一些特殊牌型可能具有多种特征表现,所以对于这种牌型的权值定义需要根据具体的特征表现来进行定义。

基础牌型组合模块,用于将每局游戏开始时下发的牌张进行基础牌型组合;

根据本发明的一个优选实施方式,牌型组合原则为按照基础牌型来对牌张进行组合。根据本发明的一个优选实施方式,将牌点相同的牌张进行组合。根据本发明的另一优选实施方式,将牌点连续并且张数相同的牌张进行组合。根据本发明的另一优选实施方式,将进行基础牌型组合后的牌张以牌张列表的形式记录。

手数计算模块,用于将已经进行过基础牌型组合的牌型进行再次牌型组合;

根据本发明的一个优选实施方式,再次牌型组合的原则是将减少手数。

根据本发明的一个优选实施方式,使得手数减少的组合为正向组合,使得手数增加的组合为负向组合;

根据本发明的一个优选实施方式,再次牌型组合的具体过程为:

将牌张列表中牌点张数最多的n牌点取出,以n牌点在列表中的下标为中心点,分别对左侧牌张列表以及右侧牌张列表进行递归合并,一次合并结束后将当前的牌点张数减1,再次递归合并,直到牌点张数减至1,递归合并结束,记录当前合并结果的手数,根据手数对合并结果进行排序,删除手数大于最小手数的组合结果。

牌力分析模块,用于根据当前其他用户所出牌张的牌型以及大小,以及当前牌局所有用户已出的牌张列表,用户自己所出的位置信息,来对需要打出的牌张进行牌力分析;

根据本发明的一个优选实施方式,牌力分析内容包括其他用户所出的牌型是否存在可以大过的牌型。根据本发明的一个优选实施方式,根据当前数据来进行牌型分析计算,由于各个牌型之间存在一个相互制约的逻辑关系,根据这个逻辑关系就可以得出自己的牌张列表以及队友的牌张列表中是否存在可以大过的牌型。

牌力判断模块,用于判断牌力是否满足要求;

根据本发明的一个优选实施方式,根据牌力分析结果来判断是否可以出牌。

匹配牌型判断模块,用于当牌力判断模块判断牌力满足要求时,进一步判断最优牌型组合中是否存在匹配的牌型;

拆分查找匹配牌型模块,用于当匹配牌型判断模块判断牌力不满足要求时,在最优牌型组合中根据牌型来查找匹配的牌型,所述匹配的牌型是指满足牌型制约逻辑关系的牌型;

匹配模型判断模块,用于判断是否存在匹配牌型;

重新计算手数模块,用于在匹配模型判断模块判断存在匹配牌型时,重新计算手数;

出牌/过牌模块,用于当牌力判断模块判断牌力不满足要求时,或者当匹配牌型判断模块判断牌力满足要求时,或者匹配模型判断模块判断不存在匹配牌型时,执行相应的出牌或过牌操作。

根据本发明的一个优选实施方式,按照牌点查找出所有符合的牌型,并对每个牌型剩余的牌张再次进行合并,计算剩余的手数。根据本发明的一个优选实施方式,当满足手数最少时,则视为满足最优的出牌策略。根据本发明的一个优选实施方式,如果存在相同手数时,则继续对牌点进行降序排序,满足最小牌点的则视为满足最优出牌策略。

根据本发明的一个优选实施方式,如果在最优牌型组合中没有查找到符合要求的匹配牌型,则需对最优牌型组合中的牌型进行拆分,

根据本发明的一个优选实施方式,找出所有牌型相同的组合列表,将这个列表中的所有牌型组合按照目标牌型进行组合,同时对比组合前后的手数差,将所有的组合结果根据手数进行排序,优先选择手数无变化的组合方案。

根据本发明的一个优选实施方式,如果没有牌型相同的组合列表,那么根据牌型权值的定义,对牌型不符合目标牌型、但是可通过拆分的方式来得到目标牌型的牌型进行优先级排序。

根据本发明的一个优选实施方式,优先拆分牌型权值小并且拆分后对总手数产生的变化小的牌型。

根据本发明的一个优选实施方式,如果仍未查找到匹配牌型,则将最优组合全部拆分成基础组合,继续从基础组合中查找牌型相同的组合列表,按照目标牌型进行查找。

根据本发明的一个优选实施方式,根据查找的结果来判断是否存在匹配牌型,所述匹配牌型即为当前可出牌型,如果没有可出牌型,则表示当前牌张列表中没有可以打出的牌型。

根据本发明的一个优选实施方式,对删除打出牌型后的牌张列表再次进行手数合并。

根据本发明的一个优选实施方式,根据查找出的结果来选择出牌还是过牌,如果没有可以打出的牌型,那么选择过牌;否则选择出牌。

所述手数计算模块进一步包括:

用于将牌点合并;

用于获取最大牌张数n;

用于对相邻的牌点进行组合,形成连续的牌点数组;

用于判断连续牌点数组范围区间内是否存在拆分出的牌点;如果判断为是,则将单牌点插入到连续牌点数组中;如果判断结果为否,则将合并结果存储到结果数组;

用于判断当前是否已合并达到二叉树根节点;如果已合并达到二叉树根节点,则判断当前最大牌张数是否大于1,如果判断大于1,则继续对相邻的牌点进行组合,形成连续的牌点数组;如果判断小于1,则合并结果;如果合并未达到二叉树根节点,则继续进行牌点合并。

根据本发明的一个优选实施方式,通过判断当前牌点值在数组中的下标是否已达到边界值,即当前下标两侧是否还存在可合并数组,来判断当前是否已合并达到二叉树根节点。如果还存在可合并数组,那么将可合并数组当做参数继续进行递归调用;如果不存在可合并数组,则返回重新开始。

根据本发明的一个优选实施方式,如果当前遍历的牌张最大张数大于1,那么将牌张张数减一,再次进行合并,同时将合并结果存贮至结果数组中;如果最大牌张数等于1,那么表示已合并到最底层,结束合并。

根据本发明的一个优选实施方式,对所有牌点进行数值合并,并以数组的形式存储。

根据本发明的一个优选实施方式,对数组中的牌点进行牌点张数排序,取得最大张数n。

根据本发明的一个优选实施方式,对数组中的牌点按照数值进行排序,判断当前下标的牌点与前后相邻的牌点相差是否是1,如果是1则表示是连续牌点,直到下一个牌点值相差大于1,退出循环,将上一个连续牌点数组存储在结果数组中。

根据本发明的一个优选实施方式,判断连续牌点数组的范围内是否还有拆分出的单独剩余的牌点。

根据本发明的一个优选实施方式,依次遍历连续牌点的每个下标,直到找出能够与单独牌点进行拼接的下标位置,进行拆分,即将一个连续的牌点数组拆分为两个连续的牌点数组,同时保持手数不变。

保存所有的合并结果,对结果数组中的数据进行手数分析,取出手数最少的所有结果数组。

根据本发明的一个优选实施方式,所述用于将单牌点插入到连续牌点数组中进一步包括:

用于分别存储连续牌点列表与单牌点;

根据本发明的一个优选实施方式,以数组的方式分别存储单牌点与连续牌点。

用于遍历单牌点数组,找出与连续牌点数组中牌值相同的下标位;

根据本发明的一个优选实施方式,将单牌点与连续牌点数组中的牌点进行同牌点合并,即相同的牌值进行合并,同时张数加1。

用于判断组合后总手数是否小于等于2;如果判断结果为是,则将连续牌点列表与单牌点列表以合并的牌点为中心,进行左右拆分,并将拆分结果分别存储;如果判断结果为否,则返回分别存储连续牌点列表与单牌点;

用于判断拆分后左侧、右侧是否存在单牌点;如果判断结果为是,则返回分别存储连续牌点列表与单牌点,如果判断结果为否,则合并结束,存储合并结果至结果数组中。

根据本发明的一个优选实施方式,在拆分后的数组中查找是否存在在数组范围内的单牌牌点,如果存在,那么将拆分后的数组以及单牌牌点当做参数再次进行递归合并。

根据本发明的一个具体实施方式,以斗地主棋牌为例,示例性说明本发明托管方法中的合并过程:

注:4-6表示4个6,3-j-3-q表示jjjqqq,3→8-1表示345678,3→5-2表示334455

*表示递归,*-1表示第一轮递归,*-2-1表示第二轮中嵌套的第一轮递归,依次类推

☆表示得到一次合并结果

假设手牌如下:

第一轮递归:

*-1首先获取手牌中最大牌张数,得出是4

那么先取出满足最大张数的牌点是6,9

先将牌点6取出,加入已合并列表,在当前列表中记为:4-6

取出牌点6后,剩余左侧手牌为:

左侧手牌最小张数为1,组成连续牌点最少需要5个牌点,而左侧牌点只有3个,则无法组成,直接添加至已合并列表,当前已合并列表为:4-6,1-3,1-4,3-5;

取出牌点6后,剩余右侧手牌为:

右侧手牌满足连续牌点的条件,则将右侧手牌递归合并;

*-1-1在右侧手牌中查找最大牌张数为4,满足最大牌张数的牌点为9,将牌点9拆分出添加至已合并列表中,当前已合并列表为:4-6,1-3,1-4,3-5,4-9;

取出牌点9后,剩余左侧手牌为:

左侧剩余手牌最小牌张数为2,组成连续牌点最少需要3个牌点,而左侧剩余手牌牌点只有2个,无法组合,添加至已合并列表,当前已合并列表为:4-6,1-3,1-4,3-5,4-9,2-7,3-8;

取出牌点9后,剩余右侧手牌为:

右侧剩余手牌满足连续牌点的条件,则将右侧手牌进行递归合并。

*-1-1-1在右侧手牌中查找到最大牌张数为3,满足最大牌张数的牌点是j,q,将牌点jq拆分出发现jq可以组成连续牌点,则将牌点j、q进行合并,加入已合并列表,当前已合并列表为:4-6,1-3,1-4,3-5,4-9,2-7,3-8,3-j-3-q;

取出牌点j、q后,剩余左侧手牌为:

10

10

取出牌点j、q后,剩余右侧手牌为:

ka

此轮之后,左右两侧手牌均无法组成连续牌点,无法合并,将其添加至已合并列表,当前已合并列表为:4-6,1-3,1-4,3-5,4-9,2-7,3-8,3-j-3-q,2-10,1-k,1-a

☆到这里*-1-1-1号递归已经结束,合并后总手数为:-2+1+1+0-2+1+0-2+1+1+1=0

*-1-1-1号递归已经结束,判断*-1-1-1号递归的最大张数为3,大于1,那么将最大张数减一,再次合并;

*-1-1-2需要查找的最大张数为2,当前需要合并的手牌为:

通过查找发现牌点10,j,q满足张数要求,将牌点10,j,q拆分出发现可以连接成连续牌点,则将10jq进行合并,而在拆分出的牌点区间范围内还有剩余牌张j,q,同时jq可以连接,那么将jq连接后与2-10-2-j-2-q合并发现可以合并为2-10,3-j-3-q,并且合并后手牌减少,那么将2-10-2-j-2-q与1-j-1-q进行合并,加入至已合并列表,当前已合并列表为:4-6,1-3,1-4,3-5,4-9,2-7,3-8,2-10,3-j-3-q;

取出牌点10,j,q后,剩余左侧手牌为:

取出牌点10,j,q后,剩余右侧手牌为:

ka

此时,左右两侧手牌均无法连接成连续牌点,无法合并,添加至已合并列表,当前已合并列表为:4-6,1-3,1-4,3-5,4-9,2-7,3-8,2-10,3-j-3-q,1-k,1-a

☆到这里*-1-1-2号递归已经结束,合并后总手数为:-2+1+1+0-2+1+0+1-2+1+1=0

通过排序后发现合并结果与*-1-1-1号递归合并结果相同,因此不予保存结果。

*-1-1-2号递归已经结束,判断*-1-1-2号递归的最大张数为2,大于1,那么将最大张数减一,再次合并。

*-1-1-3需要查找的最大张数为1,当前需要合并的手牌为:

通过查找发现牌点10,j,q,k,a满足张数要求,将牌点10,j,q,k,a拆分出发现可以连接成连续牌点,则将10,j,q,k,a进行合并,而在拆分出的牌点区间范围内还有剩余牌张10,j,q,j,q,同时10、j、q可以连接,并且10jq与10→a-1合并后手数减少,所以合并后得到2-10-2-j-2-q,k,a,在2-10-2-j-2-q区间范围内还有剩余牌张j,q,同理合并后手数减少,最终合并完成后得到2-10,3-j-3-q,k,a,而拆分出10→a-1后左侧右侧均无剩余牌张,则合并结束,将结果添加至合并已合并列表,当前已合并列表为:4-6,1-3,1-4,3-5,4-9,2-7,3-8,2-10,3-j-3-q,1-k,1-a;

到这里*-1-1-3号递归已经结束,合并后总手数为:-2+1+1+0-2+1+0+1-2+1+1=0,与*-1-1-2号递归合并结果相同,不予保存结果。

判断*-1-1-3号递归的最大张数为1,无法减少,那么返回至上层递归。

*-1-2当前最大张数为4,大于1,则将最大张数减一,再次合并;

需要查找的最大张数为3,当前需要合并的手牌为:

查找发现牌点8,9,j,q满足张数要求,同时8、9和j、q都可以连接,则先将8、9进行合并,在3-8-3-9区间范围内还有9这一个牌张,而9与3-8-3-9进行合并后手数减少,则将合并后的牌点加入到已合并列表中,当前已合并列表为:4-6,1-3,1-4,3-5,3-8,4-9;

取出牌点8,9后,剩余左侧手牌为:

7

7

取出牌点j,q后,剩余右侧手牌为:

由于左侧手牌只有一个牌点,则直接添加进已合并列表,右侧手牌与*-1-1-1号递归相同,则直接取到递归结果,最终合并结果实际与*-1-1号递归的结果相同,都是4-6,1-3,1-4,3-5,4-9,2-7,3-8,2-10,3-j-3-q,1-k,1-a,总手数为0。

下面的递归过程与前述基本类似,都是通过将牌张数由最大减少至1,在此不再赘述。

当最终递归到*-n时,最大张数为1,那么进行连续牌点合并。

*-n需要查找的最大张数是1,假设当前需要合并的手牌为:

最大张数是1,则直接取出最长连续牌点得到3→a-1,在剩余手牌中继续获取最长连续牌点得到5→q-1,剩余牌张为:

其中5、6,8、9,j、q都可以连接,同时89与5→q-1可以合并为5→9-1,8→q-1,同时手数减少,合并后剩余牌张为:

合并的牌组为:3→a-1,5→9-1,8→q-1

剩余牌张中的9可以与3→a-1进行合并为3→9-1,9→a-1,手数不变,于是这两种情况都进行保存;

合并后剩余的牌张为

已合并的牌组为:3→9-1,9→a-1,5→9-1,8→q-1

此时剩余牌张已无法再次进行合并;

最终结果为:

a:3→9-1,9→a-1,5→9-1,8→q-1,1-5,2-6,1-j,1-q

b:3→a-1,5→9-1,8→q-1,1-5,2-6,1-9,1-j,1-q

两种情况总手数都为8,大于之前合并的总手数0,那么只取总手数为0的合并结果。

最终这手牌合并后的最优解为:

4-6,4-9,3-j-3-q,3-8,3-5,2-10,2-7,1-a,1-k,1-4,1-3。

以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1