源码架设教程之麻将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

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

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

时间: 2024-07-30 14:03:27

源码架设教程之麻将AI算法与数据结构棋牌的相关文章

棋牌源码搭建教程之棋牌游戏AI算法

棋牌游戏客户端实现采用Flash 9开发,服务端采用Win32+VC6开发(基于IOCP),数据库网关采用Win32+VC6开发(基于IOCP,MySQL5实现了处理线程池和数据库连接池).虽然服务器端去年就已经完成,但相应的机器人AI算法一直没有能力去实现.今天把它拿到Blog上来希望有机会和感兴趣的兄弟们探讨下. Kevin在他的Blog上给出了他的实现,其给出的算法思想是用宽度优先生成一棵搜索树,再根据玩牌的技巧进行剪枝与判权,机器人的AI能够像养成类游戏那样,实现在蹂躏下慢慢成长,水平逐

H5牌九源码架设小白入门教程

H5牌九源码架设小白入门教程http://diguaym.com/h5 有问题Q2152876294,官网下载[diguaym.com]很多刚刚接触到游戏开发,准备大展拳脚的小鲜肉们,往往在技术选型这第一关就栽了跟头.毕竟网络上的游戏引擎良莠不齐,官网上相关资料也比较少,而选择一个适合的游戏引擎是一个项目最基础,也是很核心的一部分.试想一下,在游戏开发进行到中后期的时候,才发现项目引入的游戏引擎与需求相悖,这时候不管是重新做一些修修补补的工作或者更换游戏引擎,这都是相当耗费人力物力的一件事.为了

怼完Sophia怼深度学习!细数完大神H5微信牛牛棋牌源码架设出售是这样怼人的...

十多个小时前,深度学习大神Yann LeCun语出惊人,他宣布放弃H5微信牛牛棋牌源码架设出售( h5.super-mans.com Q2012035031 ?17061863513 vx同)H5微信牛牛棋牌源码架设出售这个词.因为媒体对这个词的炒作言过其实,混淆了大家真正的工作,而"可微分编程"才是对此更好的描述: "将各种参数化的函数模块网络组装起来,做成新软件,同时以某种基于梯度的优化再将其训练出来" 这跟普通的编程工作也没多大差别,除了参数化的自动微分,以及

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

首先,要弄清楚斗地主的牌型有哪些.可以参考QQ游戏给出的介绍,如下: 火箭:即双王(大王和小王),最大的牌. 炸弹:四张同数值牌(如四个 7 ). 单牌:单个牌(如红桃 5 ). 对牌:数值相同的两张牌(如梅花 4+ 方块 4 ). 三张牌:数值相同的三张牌(如三个 J ). 三带一:数值相同的三张牌 + 一张单牌或一对牌.例如: 333+6 或 444+99 单顺:五张或更多的连续单牌(如: 45678 或 78910JQK ).不包括 2 点和双王. 双顺:三对或更多的连续对牌(如: 334

Ubuntu12.04 64bit版本下载Android源码完整教程

首先去官网http://source.android.com/source/initializing.html可以看到完整的安装教程.不过一般情况下,按照这个教程是无法一步到位的,因为中途肯定会遇到很多问题.这里我把我遇到的问题以及相应的解决方案总结一下: 1.sudo apt-get install git gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core

计划在CSDN学院推出系列视频课程《源码分析教程5部曲》

?? 计划在CSDN学院推出系列视频课程<源码分析教程5部曲> 源码分析教程5部曲之1--漫游C语言 源码分析教程5部曲之2--C标准库概览 源码分析教程5部曲之3--libevent源码分析 源码分析教程5部曲之4--memcached源码分析 源码分析教程5部曲之5--redis源码分析

网狐源码架设:MatchID配置错误

本文引用于:征途源码论坛(www.zhengtuwl.com)-----专注各类精品源码下载的平台 网狐棋牌源码架设常见问题: [配置错误]MatchID配置错误....的解决方法 MATCHID 就是房间ID 房间ID配置上去就好了  

最强微信牛牛源码搭建教程

最强微信牛牛源码搭建教程 Q 2171793408     http://wowotouba.com/h5 <head>   <meta http-equiv="Content-Type" content="text/html; charset=gbk">   <meta name="google-site-verification" content="PXunD38D6Oui1T44OkAPSLyQtFU

浅谈量子计算机 大发云网站源码架设修复详解

一.两类量子计算机 量子计算机主要分为通用量子计算机(也称为标准量子计算机)和专用量子计算机.通用量子计算机通过量子纠缠.量子干涉.量子叠加等量子态实现计算,例如,Google于2018年3月发布的72量子比特的量子计算机Bristlecone:专用量子计算机则是通过其他理论或模型实现计算(大发云网站源码架设修复Q_917_899_899 测试bbs.yasewl.com 如,量子退火理论等),例如,D-Wave公司的发布的各型量子计算机,该公司于2018年发布的量子计算机已具有高达2000个量