?? gamecanvas.java
字號(hào):
//再次抽取新牌
i--;
break;
}
}
}
}
//以int值為基礎(chǔ),在Card數(shù)組的cards中設(shè)定值
int index = 0;
for(int i=0; i < cardsLeng; i++) {
if(cards[i].getCardState() == Card.BACK_STATE) {
cards[i].setUniqueNo(tmpCardNos[index]);
index++;
}
}
}
/**
* 檢查結(jié)果(牌面)的方法
* @return short 傳回結(jié)果的值
* Royal_Flush_Rate丄Five_of_a_Kind_Rate丄Straight_Flush_Rate丄Four_of_a_Kind_Rate丄
* Full_House_Rate丄Flush_Rate丄Straight_Rate丄Three_of_a_Kind_Rate丄Two_Pair_Rate丄
* Jacks_or_Better_Rate丄NOTHING偺偄偯傟偐
*/
private short doResultCheck() {
//儲(chǔ)存鬼牌的數(shù)目的變量
int jokerCount = 0;
//檢查是否為Flush的標(biāo)志
boolean isFlush = true;
int cardsLeng = cards.length;
//尋找作為判定基準(zhǔn)用的鬼牌以外的牌
int checkBaseKind = cards[0].getUniqueNo() / 13;
if(checkBaseKind > 3) {
//鬼牌的時(shí)候
//尋找鬼牌以外的牌
for(int i=1; i < cardsLeng; i++) {
if(cards[i].getUniqueNo() < 52) {
//鬼牌以外
checkBaseKind = cards[i].getUniqueNo() / 13;
break;
}
}
}
//以數(shù)字的大小來排序
int[] checkCardNos = new int[cards.length];
for(int i=0; i < cardsLeng; i++) {
//除以13來求得其種類
int tmpKind = cards[i].getUniqueNo() / 13;
boolean isInsert = false;
if(tmpKind > 3) {
//鬼牌的時(shí)候
jokerCount++;
for(int j=0; j < i; j++) {
if(checkCardNos[j] > cards[i].getUniqueNo()) {
isInsert = true;
for(int k=i; k > j; k--) {
checkCardNos[k] = checkCardNos[k-1];
}
checkCardNos[j] = cards[i].getUniqueNo();
break;
}
}
if(! isInsert) {
checkCardNos[i] = cards[i].getUniqueNo();
}
}else {
//鬼牌以外
if(isFlush) {
//有相同種類的撲克牌時(shí)
if(checkBaseKind != tmpKind) {
//種類不相同時(shí)
isFlush = false;
}
}
int tmpUniqueNo = cards[i].getUniqueNo() %13;
for(int j=0; j < i; j++) {
if(checkCardNos[j] > tmpUniqueNo) {
isInsert = true;
for(int k=i; k > j; k--) {
checkCardNos[k] = checkCardNos[k-1];
}
checkCardNos[j] = tmpUniqueNo;
break;
}
}
if(! isInsert) {
checkCardNos[i] = tmpUniqueNo;
}
}
}
int tmpCardNo, tmpCardNo2;
int tmpJokerCount = jokerCount;
int checkIndex = 0;
if(isFlush) {
//有可能為Flush時(shí)
//檢查是否為Royal Straight Flush
tmpCardNo = checkCardNos[checkIndex];
if(tmpCardNo == 0 || tmpJokerCount > 0) {// 檢查是否為A
//現(xiàn)在所檢查的撲克牌為0(A)或者有1張以上的鬼牌時(shí)
if(tmpCardNo != 0) {
//現(xiàn)在所檢查的撲克牌不是為0(A)時(shí)
//使用1張鬼牌
tmpJokerCount--;
}else {
//現(xiàn)在所檢查的撲克牌為0(A)時(shí)
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo = checkCardNos[checkIndex];
}
if(tmpCardNo == 9 || tmpJokerCount > 0) { //檢查是否為10
//現(xiàn)在所檢查的撲克牌為9(10)或有1張以上的鬼牌時(shí)
if(tmpCardNo != 9) {
//現(xiàn)在所檢查的撲克牌不是9(10)的時(shí)候
//使用1張鬼牌
tmpJokerCount--;
}else {
//現(xiàn)在所檢查的撲克牌為9(10)的時(shí)候
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo = checkCardNos[checkIndex];
}
if(tmpCardNo == 10 || tmpJokerCount > 0) { //檢查是否為11
//現(xiàn)在所檢查的撲克牌為10(J)或有1張以上的鬼牌時(shí)
if(tmpCardNo != 10) {
//現(xiàn)在所檢查的撲克牌不是10(J)時(shí)
//使用1張鬼牌
tmpJokerCount--;
}else {
//現(xiàn)在所檢查的撲克牌為10(J)時(shí)
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo = checkCardNos[checkIndex];
}
if(tmpCardNo == 11 || tmpJokerCount > 0) { //檢查是否為12
//現(xiàn)在所檢查的撲克牌為11(Q)或有1張以上的鬼牌時(shí)
if(tmpCardNo != 11) {
//現(xiàn)在所檢查的撲克牌為11(Q)時(shí)
//使用1張鬼牌
tmpJokerCount--;
}else {
//現(xiàn)在所檢查的撲克牌不是為11(Q)時(shí)
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo = checkCardNos[checkIndex];
}
if(tmpCardNo == 12 || tmpJokerCount > 0) { //檢查是否為13
//現(xiàn)在所檢查的撲克牌為12(K)或有1張以上的鬼牌時(shí)
//判定為Royal Straight Flush
//沒有必要再進(jìn)行處理,直接傳回Royal Straight Flush
return Royal_Flush_Rate;
}
}
}
}
}
//Straight Flush的檢查
checkIndex = 0;
tmpCardNo = checkCardNos[checkIndex];
if(tmpCardNo < 9 || tmpJokerCount > 0) {
//由於Straight Flush開始一定要為9(10)的牌以下才能成立,
//因此只有在一開始的撲克牌為9(10)以下才進(jìn)行處理
tmpJokerCount = jokerCount;
checkIndex++;
tmpCardNo2 = checkCardNos[checkIndex];
if(tmpCardNo2 == tmpCardNo +1 || tmpJokerCount > 0) { //第2張
//第2張撲克牌為第1章?lián)淇伺频闹?1、或者是有鬼牌存在時(shí)
if(tmpCardNo2 != tmpCardNo +1) {
//第2張撲克牌不是為第1張撲克牌的值+1時(shí)
//使用1張鬼牌
tmpJokerCount--;
}else {
//第2張撲克牌為第1張撲克牌的值+1時(shí)
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo2 = checkCardNos[checkIndex];
}
if(tmpCardNo2 == tmpCardNo +2 || tmpJokerCount > 0) { //第3張
//第3張撲克牌為第1張撲克牌的值+2、或者是有鬼牌存在時(shí)
if(tmpCardNo2 != tmpCardNo +2) {
//第3張撲克牌不是為第1張撲克牌的值+2時(shí)
//使用1張鬼牌
tmpJokerCount--;
}else {
//第3張撲克牌為第1張撲克牌的值+2時(shí)
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo2 = checkCardNos[checkIndex];
}
if(tmpCardNo2 == tmpCardNo +3 || tmpJokerCount > 0) { //第4張
//第4張撲克牌為第1張撲克牌的值+3、或者是有鬼牌存在時(shí)
if(tmpCardNo2 != tmpCardNo +3) {
//第4張撲克牌不是為第1張撲克牌的值+3時(shí)
//使用1張鬼牌
tmpJokerCount--;
}else {
//第4張撲克牌為第1張撲克牌的值+3
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo2 = checkCardNos[checkIndex];
}
if(tmpCardNo2 == tmpCardNo +4 || tmpJokerCount > 0) { // 5枃栚
//第5張撲克牌為第1張撲克牌的值+4、或者有鬼牌時(shí)
//這樣就不可能是Five Card,因此傳回Straight Flush
return Straight_Flush_Rate;
}
}
}
}
}
//第5張撲克牌為第1張撲克牌的值+4、或者有鬼牌時(shí)
//這樣就不可能是Five Card,因此傳回Straight Flush
return Flush_Rate;
}
//Straight的檢查
checkIndex = 0;
tmpCardNo = checkCardNos[checkIndex];
if( tmpCardNo < 9 && jokerCount == 0 ||
tmpCardNo < 10 && jokerCount == 1 ||
tmpCardNo < 11 && jokerCount == 2) {
//現(xiàn)在所檢查的撲克牌若不是比9還小則Straight并不會(huì)成立
//比9(10)還小時(shí)
//比10(J)還小與有1張鬼牌時(shí)
//比11(Q)還小與有1張鬼牌時(shí)
tmpJokerCount = jokerCount;
checkIndex++;
tmpCardNo2 = checkCardNos[checkIndex];
if(tmpCardNo2 == tmpCardNo +1 || tmpJokerCount > 0) { //第2張
//第2張撲克牌為第1章?lián)淇伺频闹?1、或者是有鬼牌存在時(shí)
if(tmpCardNo2 != tmpCardNo +1) {
//第2張撲克牌不是為第1張撲克牌的值+1時(shí)
//使用1張鬼牌
tmpJokerCount--;
}else {
//第2張撲克牌為第1張撲克牌的值+1時(shí)
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo2 = checkCardNos[checkIndex];
}
if(tmpCardNo2 == tmpCardNo +2 || tmpJokerCount > 0) { //第3張
//第3張撲克牌為第1張撲克牌的值+2、或者是有鬼牌存在時(shí)
if(tmpCardNo2 != tmpCardNo +2) {
//第3張撲克牌不是為第1張撲克牌的值+2時(shí)
//使用1張鬼牌
tmpJokerCount--;
}else {
//第3張撲克牌為第1張撲克牌的值+2時(shí)
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo2 = checkCardNos[checkIndex];
}
if(tmpCardNo2 == tmpCardNo +3 || tmpJokerCount > 0) { //第4張
//第4張撲克牌為第1張撲克牌的值+3、或者是有鬼牌存在時(shí)
if(tmpCardNo2 != tmpCardNo +3) {
//第4張撲克牌為第1張撲克牌的值+3
//使用1張鬼牌
tmpJokerCount--;
}else {
//第4張撲克牌為第1張撲克牌的值+3
//進(jìn)行檢查下一張撲克牌的準(zhǔn)備
checkIndex++;
tmpCardNo2 = checkCardNos[checkIndex];
}
if(tmpCardNo2 == tmpCardNo +4 || tmpJokerCount > 0) { //第5張
//第5張撲克牌為第1張撲克牌的值+4、或者有鬼牌時(shí)
//這樣就只有可能是Five Card,因此傳回Straight
return Straight_Rate;
}
}
}
}
}
//計(jì)算同樣數(shù)字的撲克牌
int[] sameNoCounts = new int[13];//儲(chǔ)存了同樣數(shù)字的數(shù)目的數(shù)組變量
int sameNoSize = 0;
for(int i=0; i < cardsLeng -jokerCount; i++) {
if(sameNoCounts[checkCardNos[i]] == 0) {
sameNoSize++;
}
sameNoCounts[checkCardNos[i]]++;
}
if(sameNoSize == 5) {
//若在這時(shí)候有5種數(shù)字的話,就不符合任何牌面
return NOTHING;
}else if(sameNoSize == 4){
//若在這時(shí)候有4種數(shù)字的話,就一定只有One Pair
//牌面或鬼牌有One Pair
if(jokerCount > 0) {
//有鬼牌的時(shí)候
if( sameNoCounts[0] > 0 || sameNoCounts[10] > 0 ||
sameNoCounts[11] > 0 || sameNoCounts[12] > 0) {
//有1張10(J)以上的撲克牌時(shí)
//傳回One Pair
return Jacks_or_Better_Rate;
}else {
//處理到了這個(gè)位置時(shí)一定沒有符合任何牌面
return NOTHING;
}
}else {
//沒有鬼牌時(shí)
if( sameNoCounts[0] > 1 || sameNoCounts[10] > 1 ||
sameNoCounts[11] > 1 || sameNoCounts[12] > 1) {
//有2張10(J)以上的撲克牌時(shí),傳回One Pair
return Jacks_or_Better_Rate;
}else {
//處理到了這個(gè)位置時(shí)一定沒有符合任何牌面
return NOTHING;
}
}
}else if(sameNoSize == 3){
//若在這時(shí)候有3種數(shù)字的話,就一定是Two Pair
if(jokerCount > 0) {
//有2張或是1張鬼牌時(shí)為Three Card
//傳回Three Card
return Three_of_a_Kind_Rate;
}else {
//沒有鬼牌時(shí)
//若有3種撲克牌、且有3個(gè)相同數(shù)字時(shí)為Three Card
for(int i=0; i < sameNoCounts.length; i++) {
if(sameNoCounts[i] > 2) {
//有兩張鬼牌時(shí)
return Three_of_a_Kind_Rate;
}
}
}
//處理到這個(gè)位置時(shí)為Two Pair
return Two_Pair_Rate;
}else if(sameNoSize == 2) {
//有2種數(shù)字時(shí)
//檢查為Four Card或是Full Hourse
if(jokerCount == 2) {
//有2張鬼牌時(shí)
//Four Card
return Four_of_a_Kind_Rate;
}else if(jokerCount == 1) {
//有1張鬼牌時(shí)
//Four Card或是Full Hourse
for(int i=0; i < sameNoCounts.length; i++) {
if(sameNoCounts[i] > 2) {
//有3張撲克牌為相同數(shù)字時(shí)為Four Card
return Four_of_a_Kind_Rate;
}
}
//處理到這個(gè)位置時(shí)為Full House
return Full_House_Rate;
}else {
//沒有鬼牌時(shí)
//Four Card或是Full Hourse
for(int i=0; i < sameNoCounts.length; i++) {
if(sameNoCounts[i] > 3) {
//有相同數(shù)字的4張牌時(shí)為Four Card
return Four_of_a_Kind_Rate;
}
}
//處理到這個(gè)位置時(shí)為Full House
return Full_House_Rate;
}
}else {
//只有1種數(shù)字時(shí)
//Three Card與2張鬼牌、或是Four Card與1張鬼牌
//傳回Four Card
return Five_of_a_Kind_Rate;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -