社区
C++ 语言
帖子详情
麻将 听牌胡牌算法怎么写
fwoi05
2007-03-26 10:57:16
最普通的就行
就是14张牌 由刻子(AAA)或顺子(ABC)组成4对 在加一对的牌
主要是听牌不太会写 胡牌的代码有的话就更好了
...全文
2153
9
打赏
收藏
麻将 听牌胡牌算法怎么写
最普通的就行 就是14张牌 由刻子(AAA)或顺子(ABC)组成4对 在加一对的牌 主要是听牌不太会写 胡牌的代码有的话就更好了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lin_style
2007-03-27
打赏
举报
回复
哈哈哈哈。。
自己只会普通的胡牌。。
fwoi05
2007-03-27
打赏
举报
回复
哇 你在呀 ^_^
听牌是在发给我一张牌的时候 判断是否能听
好象不只是去掉一张啊(去掉一张之后 好象还要在加一张进行判断)
14张判断听牌 去掉其中一张能不能听(要判断去掉每一张能不能听) 13张不能判断胡啊 还要在加一张(这个好象每张都要判断吧 ) 这么判断?循环的次数会不会太多啊
jixingzhong
2007-03-27
打赏
举报
回复
ms 听牌可以参考胡牌的算法,
就是 胡牌 去掉一张 .....
fwoi05
2007-03-27
打赏
举报
回复
大哥 谢谢拉 这个好象不单单是14张牌的 好象17张的也可以啊 ^^
不过还想问一下听牌 能帮帮忙么?
gxl123
2007-03-27
打赏
举报
回复
不会麻将
jixingzhong
2007-03-26
打赏
举报
回复
也可以参看这里的代码:
http://topic.csdn.net/t/20060303/10/4590114.html
jixingzhong
2007-03-26
打赏
举报
回复
/***************************************************************
* 文件名:hu.cpp *
* *
* 功 能:演示一个简洁明了的递归函数——判断[麻将]的和牌。 *
* *
* 说 明:1. 此函数不判断七对和十三幺,读者不难自行判断; *
* 同时由于麻将的规则各不相同,也请读者自己添加和修改。*
* *
* 2. 其他与麻将类似的游戏,如[字牌](又称跑胡子、 *
* 二七十)等牌类游戏,也可采用类似的判断函数。 *
* *
* 环 境: VC 6.0, 但符合ANSI C标准,随便移植 ^_^ *
* *
* 作 者:shyworm(怕怕虫) *
* E_Mail: shyworm@sina.com *
***************************************************************/
#include <stdio.h>
int Hu(int PAI[38]);
int Remain(int PAI[38]);
int main()
{
// 把一副牌放在下面的数组里,可以任意填入数字来测试函数正确与否。
// 为了方便,PAI[0],PAI[10],PAI[20],PAI[30]都弃之不用,并且必须
// 置为0,千万注意!
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] 东南西北中发白的个数
};
// 请务必先排除“七对” 和“十三幺”,由于简单,所以不提供了
// if( QIDUI(PAI) )...
// if( SHISANYAO(PAI) )...
if( Hu(PAI) )
printf("哈!我和啦!\n");
else
printf("哎,和不成!\n");
return 1;
}
// 判断和牌的递归函数,不考虑“七对” 和“十三幺”。因为如果
// 把“七对” 和“十三幺”的判断放在递归函数里,将得不偿失。
int Hu(int PAI[38])
{
static int JIANG = 0; // 将牌标志,即牌型“三三三三二”中的“二”
if( !Remain(PAI) ) return 1; // 递归退出条件:如果没有剩牌,则和牌返回。
for(int i=1;!PAI[i]&&i<38;i++); // 找到有牌的地方,i就是当前牌, PAI[i]是个数
printf("i = %d\n",i); // 跟踪信息
// 4张组合(杠子)
if ( PAI[i] == 4 ) // 如果当前牌数等于4张
{
PAI[i] = 0; // 除开全部4张牌
if( Hu(PAI) ) return 1; // 如果剩余的牌组合成功,和牌
PAI[i] = 4; // 否则,取消4张组合
}
// 3张组合(大对)
if ( PAI[i] >= 3 ) // 如果当前牌不少于3张
{
PAI[i] -= 3; // 减去3张牌
if( Hu(PAI) ) return 1; // 如果剩余的牌组合成功,和牌
PAI[i] += 3; // 取消3张组合
}
// 2张组合(将牌)
if ( !JIANG && PAI[i] >= 2 ) // 如果之前没有将牌,且当前牌不少于2张
{
JIANG = 1; // 设置将牌标志
PAI[i] -= 2; // 减去2张牌
if( Hu(PAI) ) return 1; // 如果剩余的牌组合成功,和牌
PAI[i] += 2; // 取消2张组合
JIANG = 0; // 清除将牌标志
}
if ( i > 30 ) return 0; // “东南西北中发白”没有顺牌组合,不和
// 顺牌组合,注意是从前往后组合!
if( i%10 != 8 && i%10 != 9 && // 排除数值为8和9的牌
PAI[i+1] && PAI[i+2] ) // 如果后面有连续两张牌
{
PAI[i]--;
PAI[i+1]--;
PAI[i+2]--; // 各牌数减1
if( Hu(PAI) ) return 1; // 如果剩余的牌组合成功,和牌
PAI[i]++;
PAI[i+1]++;
PAI[i+2]++; // 恢复各牌数
}
// 无法全部组合,不和!
return 0;
}
// 检查剩余牌数
int Remain(int PAI[38])
{
int sum = 0;
for(int i=1;i<38;i++)
sum += PAI[i];
return sum;
}
Red_angelX
2007-03-26
打赏
举报
回复
各地麻将规则不同地 就最简单的办法递归吧
snprintf
2007-03-26
打赏
举报
回复
AI
Go-
麻将
算法
封装包括牌墙
算法
听牌
算法
胡牌
算法
出牌推荐
算法
麻将
算法
封装,包括牌墙
算法
、
听牌
算法
、
胡牌
算法
、出牌推荐
算法
麻将
胡牌
算法
(源代码)
自己做的一个简单的C源代码
麻将
胡牌
算法
分享给大家学习.
麻将
清一色
胡牌
算法
(C版)
14张
麻将
的清一色
胡牌
算法
,VC编译和测试通过......
Java
麻将
算法
汇总(
胡牌
算法
、AI
算法
、查胡
算法
、评估
算法
、出牌
算法
)majiang_algorithm-master.zip
Java
麻将
算法
汇总(
胡牌
算法
、AI
算法
、查胡
算法
、评估
算法
、出牌
算法
)majiang_algorithm-master.zip
麻将
癞子
胡牌
算法
麻将
癞子
胡牌
算法
,效率超快。4个5个癞子都测试过,python语言
写
的。
C++ 语言
64,662
社区成员
250,516
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章