java使用HashMap實(shí)現(xiàn)斗地主(有序版)
本文實(shí)例為大家分享了java使用HashMap實(shí)現(xiàn)斗地主的具體代碼,供大家參考,具體內(nèi)容如下
案例介紹按照斗地主的規(guī)則,完成洗牌發(fā)牌的動(dòng)作。 具體規(guī)則:
使用54張牌打亂順序,三個(gè)玩家參與游戲,三人交替摸牌,每人17張牌,最后三張留作底牌。
案例分析1、準(zhǔn)備牌:
每張撲克牌牌由花色和數(shù)字兩部分組成。可以使用花色集合與數(shù)字集合嵌套迭代完成撲克牌的組裝。
2、發(fā)牌
撲克牌組轉(zhuǎn)完畢后由Collections類的shuffle方法打亂重排,最后3張當(dāng)作底牌,剩余牌通過(guò)對(duì)3取模依次發(fā)牌。
3、看牌
打印集合。
代碼演示import java.util.*;/** * @author layman */public class Poker2 { // 牌堆 private static Map<Integer, String> pokerMap = new HashMap<>(); // 花色 private static ArrayList<String> colors = new ArrayList<>(); // 數(shù)字 private static ArrayList<String> numbers = new ArrayList<>(); // 撲克牌的編號(hào)集合 private static ArrayList<Integer> numberList = new ArrayList<>(); // 玩家編號(hào)集合 private static ArrayList<Integer> noP1 = new ArrayList<>(); private static ArrayList<Integer> noP2 = new ArrayList<>(); private static ArrayList<Integer> noP3 = new ArrayList<>(); // 底牌編號(hào)集合 private static ArrayList<Integer> diPaiNo = new ArrayList<>(); // 三個(gè)玩家 private static ArrayList<String> playerOne = new ArrayList<String>(); private static ArrayList<String> playerTwo = new ArrayList<String>(); private static ArrayList<String> playerThree = new ArrayList<String>(); // 底牌 private static ArrayList<String> diPai = new ArrayList<String>(); /** * 創(chuàng)建撲克牌并洗牌 */ public static void createPoker(){ Collections.addAll(colors, '♦', '♣', '♥', '♠'); Collections.addAll(numbers, '2', 'A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3'); // 設(shè)置存儲(chǔ)編號(hào) int count = 1; pokerMap.put(count++, '大王'); pokerMap.put(count++, '小王'); // 創(chuàng)建撲克牌 for (String number : numbers) { for (String color : colors) { String card = color + number; pokerMap.put(count++, card); } } // 先取編號(hào) Set<Integer> numberSet = pokerMap.keySet(); numberList.addAll(numberSet); // 然后隨機(jī)洗牌 Collections.shuffle(numberList); } /** * 發(fā)牌 */ public static void faPai(){ for (int i = 0; i < numberList.size(); i++) { Integer no = numberList.get(i); // 留出底牌 if (i >= 51) { diPaiNo.add(no); } else { if (i % 3 == 0) { noP1.add(no); } else if (i % 3 == 1) { noP2.add(no); } else { noP3.add(no); } } } } /** * 發(fā)牌并排序 */ public static void sortCards(){ // 對(duì)編號(hào)進(jìn)行排序 Collections.sort(noP1); Collections.sort(noP2); Collections.sort(noP3); Collections.sort(diPaiNo); // 進(jìn)行牌面的轉(zhuǎn)換 for (Integer i : noP1) { // 根據(jù)編號(hào)獲取牌面,并發(fā)給對(duì)應(yīng)的玩家 String card = pokerMap.get(i); playerOne.add(card); } for (Integer i : noP2) { String card = pokerMap.get(i); playerTwo.add(card); } for (Integer i : noP3) { String card = pokerMap.get(i); playerThree.add(card); } for (Integer i : diPaiNo) { String card = pokerMap.get(i); diPai.add(card); } } /** * 看牌 */ public static void showCards(){ System.out.println('賭圣:' + playerOne); System.out.println('賭俠:' + playerTwo); System.out.println('賭王:' + playerThree); System.out.println('底牌:' + diPai); } public static void main(String[] args) { createPoker(); faPai(); sortCards(); showCards(); }}
補(bǔ)充:
使用ArrayList實(shí)現(xiàn)斗地主案例(無(wú)序版):傳送門(mén)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 什么是python的自省2. php模擬實(shí)現(xiàn)斗地主發(fā)牌3. 詳解Android studio 動(dòng)態(tài)fragment的用法4. spring acegi security 1.0.0 發(fā)布5. MyBatis中的JdbcType映射使用詳解6. vue 使用localstorage實(shí)現(xiàn)面包屑的操作7. Vue封裝一個(gè)TodoList的案例與瀏覽器本地緩存的應(yīng)用實(shí)現(xiàn)8. Vuex localStorage的具體使用9. Python random庫(kù)使用方法及異常處理方案10. jQuery 實(shí)現(xiàn)DOM元素拖拽交換位置的實(shí)例代碼

網(wǎng)公網(wǎng)安備