最近在寫跑鬍子這個專案的時候,遇到了吃的情況,自己想了一種演算法,我的小字是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;
}
這樣幾種情況就算完成。
寫的不好之處,還忘大佬指點。