麻将听牌的算法(java)

   近来正在做麻将游戏,写了个判断听牌的算法(暂且称其为算法),和大家分享一下,
算法还没通过全面的验证,可能会遗漏某些情况。(我不太会打麻将阿)
其中判断和牌算法的程序代码是网上找的,是听牌算法的基石。在这感谢这位仁兄了。
1、在介绍算法之前,先说说我的牌值顺序:
 0-8  : 1-9万
 9-17 : 1-9筒
 18-26: 1-9条
 27-30: 东南西北风
 31-33: 中发白
 无花
2、MaJiang3.java 是判断可否听牌的程序
 (1)、判断点:当玩家抓进一张牌后(14张),系统判断出这时候打出某些牌后就听牌了
 (2)、思想:检查将某个牌替换成另一个牌后能不能和(不考虑番种),能和就表示能听
3、MaJiang2.java 是判断某一手牌是否能和的程序

还是看代码吧,我在程序里加了些注释: 

 

import  java.util. * ;
public   class  MaJiang3
{
    
/*
    先拿掉一个,然后再检测缺少什么,补上,这里不行,就补别的地方
    
*/

    
public ArrayList entryList = new ArrayList();   //替换对子
    
    
private int fmaj = -1;        //可以打掉的牌
    private int tmaj = -1;        //可以补上的牌
    
    
int[] w={ 3,1,1,1,2,1,1,1,3};  //1-9万各个牌的个数
    int[] to={ 0,0,0,0,0,0,0,0,0};
    
int[] ti={ 0,0,0,0,0,0,0,0,0};
    
int[] z={ 0,0,0,0,0,0,0};
    
    
public MaJiang3(int[] w, int[] to, int[] ti, int[] z)
    
{
        
this.w = w;
        
this.to = to;
        
this.ti = ti;
        
this.z = z;
    }

    
private void ting()
    
{        
        
for(int i = 0; i < 34; i++)
        
{
            
boolean exeIT = false;
            
if((i < 9 && w[i] >0) )
            
{
                w[i]
--;
                fmaj 
= i;
                
if(!check())
                
{ w[i]++;continue;}
                w[i]
++;
            }

            
else if(i >=9 && i < 18 && to[i-9>0)
            
{
                to[i
-9]--;
                fmaj 
= i;
                
if(!check())
                
{ to[i-9]++;continue;}
                to[i
-9]++;
            }
 
            
else if(i >=18 && i <27 && ti[i-18>0)
            
{
                ti[i
-18]--;
                fmaj 
= i;
                
if(!check())
                
{ ti[i-18]++;continue;}
                ti[i
-18]++;
            }

            
else if((i >= 27 && z[i-27>0))
            
{
                z[i
-27= z[i-27-1;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值