二七十,大貳,跑鬍子的吃牌演算法

2021-09-24 03:59:40 字數 1339 閱讀 8449

最近在寫跑鬍子這個專案的時候,遇到了吃的情況,自己想了一種演算法,我的小字是0-9代表一到十,大字是10-19代表壹到拾。

吃的情況 大約有五種  比如小7,有可能是789,678,567,77大7,大7大7小7,2710。大概就是這六種情況。我的思路就是能放在左邊的1-8。意思就是123,234 345……8910。這幾種情況。如果是9或者10就不能左邊。同理 能放中間的就是2-9,能放右邊的就是3-10。具體**

int qumopai = -1;

//這裡取模判斷區間

if(targetpai>9)else

//這裡的map是自己手上的牌

//是否需要跟牌

boolean isgen = false;

arraylistchipais = new arraylist<>();

integer integer = map.get(targetpai);

if (integer==1)

//能放在左邊的就是1-8

if (qumopai>=0&&qumopai<8)

}}//能放在中間的就是2-9

if (qumopai>=1&&qumopai<9)

}}//能放在最右邊的就是3-10

if (qumopai>=2&&qumopai<10)

}}

這樣就判斷了三種情況。然後二七十

單獨抽出來,寫成乙個方法

public string chi_erqishi(int targetpai,mapmaps)

}if (targetpai==6)

}if (targetpai==9)

}if (targetpai==11)

}if (targetpai==16)

}if (targetpai==19)

}return null;

}

然後就是兩小一大,也抽也來寫成乙個方法,我覺得這樣增加**,減少演算法複雜度也可以。

public string chi_yidaliangxiao(int targetpai,mapmaps)

}if (targetpai<10)

}return null;

}

然後兩大一小

/*兩大一小*/

public string chi_lingdayixiao(int targetpai,mapmaps)

}if (targetpai>10)

}return null;

}

這樣幾種情況就算完成。

寫的不好之處,還忘大佬指點。