源码架设教程之麻将AI算法与数据结构棋牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了源码架设教程之麻将AI算法与数据结构棋牌相关的知识,希望对你有一定的参考价值。

   麻将ID构架


  用一维数组PAICAPTION(143)来记录每张牌的ID和文字信息,数组内容为文字描述,下标用作ID(0-143,共144张牌)


  1、胡牌判断基本构架


    用一维数组来记录各个牌型的数量,例如

     int PAI[38] = { 0,

                    1,1,1,0,1,1,1,0,0,    // PAI[ 1- 9]  壹万~玖万的个数

                    0,

                    0,0,0,0,0,3,0,0,0,    // PAI[11-19]  壹铜~玖铜的个数

                    0,

                    0,0,0,0,0,0,0,0,0,    // PAI[21-29]  壹条~玖条的个数

                    0,

                    0,1,1,1,0,0,0         // PAI[31-37]  东南西北中发白的个数

                    };


2、手牌基本构架


    用二维数组来记录,例如


    SELFPAI(17,1)  注:每人手里最多能有18张牌


    参数1:每张牌的ID,即在PAICAPTION数组中的下标


    参数2:每张牌的状态,-1 =》无牌,1=》普通牌,2=》碰牌,3=》吃牌,4=》暗杠,5=》明杠


3、吃碰杠胡的临时数据构架


    主要用来记录触发吃碰杠胡的临时数据,用动态数组记录就行,就不多啰嗦了。


 


有了这些基本构架,所有的牌和玩家手牌的状态就一目了然了,对于后期开发电脑的AI和游戏流程就方便多了。

标准胡牌判断算法


    用胡牌判断基本构架,递归检查。一副成胡牌由刻子和顺子组成,每次递归时把刻子或顺子的牌数量减一,最后为0时即是胡牌型。(更多详细算法 棋牌源码架设 www.yasewl.com)


Public Function HU(arrPai) As Boolean ‘检查标准胡牌型

    Dim i As Integer

    If Remain(arrPai) = 0 Then HU = True: Exit Function

    For i = 0 To UBound(arrPai)

        If arrPai(i) > 0 Then Exit For

    Next

    If arrPai(i) = 4 Then

        arrPai(i) = 0

        If HU(arrPai) = True Then HU = True: Exit Function

        arrPai(i) = 4

    End If

    If arrPai(i) >= 3 Then

        arrPai(i) = arrPai(i) - 3

        If HU(arrPai) = True Then HU = True: Exit Function

        arrPai(i) = arrPai(i) + 3

    End If

    If Jiang = 0 And arrPai(i) >= 2 Then

        Jiang = 1

        arrPai(i) = arrPai(i) - 2

        If HU(arrPai) = True Then HU = True: Exit Function

        arrPai(i) = arrPai(i) + 2

        Jiang = 0

    End If

    If i > 30 Then HU = False: Exit Function

    If (i Mod 10 < 8) And (arrPai(i + 1) > 0) And (arrPai(i + 2) > 0) Then

        arrPai(i) = arrPai(i) - 1

        arrPai(i + 1) = arrPai(i + 1) - 1

        arrPai(i + 2) = arrPai(i + 2) - 1

        If HU(arrPai) = True Then HU = True: Exit Function

        arrPai(i) = arrPai(i) + 1

        arrPai(i + 1) = arrPai(i + 1) + 1

        arrPai(i + 2) = arrPai(i + 2) + 1

    End If

    HU = False


End Function


    七对、十三幺、全不靠胡牌型属于特例,单独写出算法即可。


    吃、碰、杠的算法用胡牌判断基本构架和手牌基本构架也可轻松解决。


本文出自 “白天不懂夜的黑” 博客,请务必保留此出处http://13134261.blog.51cto.com/13124261/1947573

以上是关于源码架设教程之麻将AI算法与数据结构棋牌的主要内容,如果未能解决你的问题,请参考以下文章

微信房卡麻将棋牌架设之游戏服务器架构的详细设计 内核设计

棋牌搭建教程之最新傲玩至尊版手机棋牌源码架设技巧

鑫众棋牌源码下载架设教程支持PC安卓苹果附说明

棋牌平台架设教程之斗地主核心算法

网狐6603全部架设过程 棋牌源码下载搭建教程

棋牌高防服务器架设教程