按照斗地主的规则,完成洗牌发牌的动作
生活随笔
收集整理的這篇文章主要介紹了
按照斗地主的规则,完成洗牌发牌的动作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.案例介紹
? ?按照斗地主的規則,完成洗牌發牌的動作。
? ?具體規則:
? ? 1. 組裝54張撲克牌將
? ? 2. 54張牌順序打亂
? ? 3. 三個玩家參與游戲,三人交替摸牌,每人17張牌,最后三張留作底牌。
? ? 4. 查看三人? ? ? ? ? 各自手中的牌(按照牌的大小排序)、底牌 規則:手中撲克牌從大到小的擺放順序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3?
2.案例分析?
1. 準備牌: 完成編號與紙牌的映射關系: 使用雙列Map(HashMap)集合,完成一個編號與字符串紙牌的對應關系(相當于一個字典)。
2. 洗牌: 通過編號完成洗牌發牌
3. 發牌: 將每個人以及底牌設計為ArrayList,將最后3張牌直接存放于底牌,剩余牌通過對3取模依次發牌。 存放的過程中要求數字大小與斗地主規則的大小對應。 將代表不同紙牌的編號分配給不同的玩家與底牌。
4. 看牌: 通過查詢紙牌與編號的對應關系,由編號轉成紙牌字符串再進行展示。
3.代碼編寫?
package day10;import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set;/*按照斗地主的規則,完成洗牌發牌的動作。 具體規則: 1. 組裝54張撲克牌將 2. 54張牌順序打亂 3. 三個玩家參與游戲,三人交替摸牌,每人17張牌,最后三張留作底牌。 4. 查看三人各自手中的牌(按照牌的大小排序)、底牌 規則:手中撲克牌從大到小的擺放順序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3*/ public class PokerDemo {public static void main(String[] args) {// 1.使用雙列Map(HashMap)集合,完成一個編號與字符串紙牌的對應關系(相當于一個字典)Map<Integer, String> pokerMap = new HashMap<Integer, String>();// 花色集合ArrayList<String> colors = new ArrayList<String>();// 數字集合ArrayList<String> numbers = new ArrayList<String>();// 2.將撲克牌中的花色和數字添加到各自的集合中Collections.addAll(colors, "?", "?", "?", "?");Collections.addAll(numbers, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");int count = 1;pokerMap.put(count++, "大王");pokerMap.put(count++, "大王");// 每張牌由花色數字兩部分組成,我們可以使用花色集合與數字集合嵌套迭代完成每張牌的組裝。for (String number : numbers) {for (String color : colors) {String card = color + number;pokerMap.put(count++, card);}}// System.out.println(pokerMap);// 3.洗牌Set<Integer> set = pokerMap.keySet();ArrayList<Integer> list = new ArrayList();list.addAll(set);// 將list里撲克牌打亂Collections.shuffle(list);// 5.發牌// 創建三個list集合(相當于三個玩家),發牌時 先將撲克牌對應的編號,放到三個list集合里ArrayList<Integer> list1 = new ArrayList<>();ArrayList<Integer> list2 = new ArrayList<>();ArrayList<Integer> list3 = new ArrayList<>();ArrayList<Integer> dipai = new ArrayList<>();for (int i = 0; i < list.size(); i++) {Integer num = list.get(i);if (num >= 51) {dipai.add(num);} else if (num % 3 == 0) {list1.add(num);} else if (num % 3 == 1) {list2.add(num);} else {list3.add(num);}}// 6.對撲克牌編號進行排序Collections.sort(list1);Collections.sort(list2);Collections.sort(list3);//System.out.println(list1);// 7.創建三個玩家,從map集合通過編號拿出對應的牌面,放到各自list集合里ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();ArrayList<String> dipai1 = new ArrayList<>();for (Integer i : list1) {player1.add(pokerMap.get(i));}for (Integer i : list2) {player2.add(pokerMap.get(i));}for (Integer i : list3) {player3.add(pokerMap.get(i));}System.out.println("玩家1" + player1);System.out.println("玩家2" + player2);System.out.println("玩家3" + player3);} }? ? ??
總結
以上是生活随笔為你收集整理的按照斗地主的规则,完成洗牌发牌的动作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sketch 59 中文版 最流行的产品
- 下一篇: 经典例题——发工资(贪心)