鬥地主演算法的設計與實現 如何比較兩手牌的大小

2021-09-08 09:46:49 字數 1888 閱讀 9016

在判斷牌的型別的時候,比如判斷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...