在判斷牌的型別的時候,比如判斷387654的牌型的時候,需要首先對牌進行排序,這樣才能判斷這6張牌是個順子。
本篇簡要介紹下 如何對一手牌或很多牌進行排序。
在前幾篇定義牌card的屬性的時候,有個grade欄位,這個字段就是用來對牌進行比較和排序的。
比如大王的grade是17,小王的grade是16,這樣大王》小王,其它單張牌的比較是類似的。
1.根據牌的id,獲得一張牌的等級
/**
* 根據牌的id,獲得一張牌的等級
** @param id
* 牌的id
* @return 與牌數字對應的等級
*/public static int getgrade(int id)
int grade = 0;
// 2個王必須放在前邊判斷
if (id == 53) else if (id == 54)
else else if (modresult == 2) else if (modresult == 3) else if (modresult == 4) else if (modresult == 5) else if (modresult == 6) else if (modresult == 7) else if (modresult == 8) else if (modresult == 9) else if (modresult == 10) else if (modresult == 11) else if (modresult == 12) else if (modresult == 0)
} return grade;
}
2.對牌進行排序,從小到大,使用氣泡排序
/**
* 對牌進行排序,從小到大,使用氣泡排序,此種方法不是很好
** @param cards
* 牌
*/public static boolean bubblesortcards(listcards)
int size = cards.size();
// 氣泡排序,從左到右,從小到大
for (int i = 0; i < size; i++) else if (gradeone == gradetwo) else if (type1.equals(cardbigtype.hong_tao))
} else if (type1.equals(cardbigtype.mei_hua)) }}
if (i***change) }}
return true;
}
3.使用jdk自帶的類庫進行排序
/**
* 對牌進行排序,從小到大,比較器為cardcomparator
** @param cards
* 牌的集合
*/public static void sortcards(listcards)
public class cardcomparator implements comparator else if (grade1 < grade2) else else if (bigtype1.equals(cardbigtype.hong_tao))
} else if (bigtype1.equals(cardbigtype.mei_hua))
}// 2張牌的等級不可能完全相同,程式內部採用這種設計
else
} return result;
} }
原文參見:
鬥地主 比較牌大小演算法
先將牌轉化字串,牌和字元的對照如下 牌和 中字元的對應 3 3,4 4,5 5,6 6,7 7,8 8,9 9,a 10,b j,c q,d k,e a,f 2,g 王 看 h標頭檔案 ifndef checkpoker h define checkpoker h pragma once inclu...
鬥地主AI演算法實現
鬥地主ai演算法實現 一 拆牌 by wojiushi3344 棋牌遊戲開發專欄 首先我們來看一下ai的定義 人工智慧 artificial intelligence 簡稱ai。它是研究 開發用於模擬 延伸和擴充套件人的智慧型的理論 方法 技術及應用系統的一門新的技術科學。人工智慧研究如何用計算機去...
python 貪心演算法實現 鬥地主發牌
coding utf 8 import random num 可以修改順序 已達到改變牌大小 num 3 4 5 6 7 8 9 10 j q k a 2 color kings big small list keep 0 12 12 4 48 48 2 兩張鬼牌 50 for a in range...