java 用集合實現撲克牌的洗牌和發牌
阿新 • • 發佈:2018-11-21
1隨機發撲克,但沒對玩家的撲克整理,程式碼如下:
//實現隨機發牌,按鬥地主的模式,實現步驟,建立List集合物件將54張撲克放入集合中,用集合工具類的shuffle方法,將List打亂 //將List集合的元素放入四份,三個玩家,一份底牌 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Poker { public static void main(String[] args) { String[] nums = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; String[] colors = { "黑桃", "紅桃", "梅花", "方片" }; //建立List物件,將54張牌放入到List物件中 ArrayList<String> pokerList = new ArrayList<>(); for (String num : nums) { for (String color : colors) { pokerList.add(color + num); } } pokerList.add("大鬼"); pokerList.add("小鬼"); //洗牌,將List集合的元素打亂順序 Collections.shuffle(pokerList); System.out.println(pokerList); List<String> buttoms = new ArrayList<>(); List<String> player1 = new ArrayList<>(); List<String> player2 = new ArrayList<>(); List<String> player3 = new ArrayList<>(); for (int i = 0; i < pokerList.size(); i++) { if (i >= pokerList.size() - 3) { buttoms.add(pokerList.get(i)); } else if (i % 3 == 0) { player1.add(pokerList.get(i)); } else if (i % 3 == 1) { player2.add(pokerList.get(i)); } else { player3.add(pokerList.get(i)); } } System.out.println(buttoms); System.out.println(player1); System.out.println(player2); System.out.println(player3); } } out: [紅桃2, 梅花3, 黑桃2, 黑桃5, 方片7, 方片10, 梅花A, 梅花2, 黑桃Q, 小鬼, 方片A, 梅花J, 紅桃10, 方片8, 紅桃3, 紅桃8, 梅花Q, 梅花K, 紅桃A, 黑桃9, 紅桃5, 黑桃4, 方片Q, 方片9, 方片4, 紅桃Q, 梅花5, 梅花10, 紅桃4, 黑桃J, 紅桃7, 梅花4, 方片K, 紅桃K, 方片5, 黑桃10, 黑桃6, 黑桃A, 紅桃9, 梅花8, 方片6, 黑桃3, 梅花6, 方片3, 方片J, 方片2, 黑桃K, 梅花7, 紅桃J, 大鬼, 紅桃6, 黑桃7, 黑桃8, 梅花9] [黑桃7, 黑桃8, 梅花9] [紅桃2, 黑桃5, 梅花A, 小鬼, 紅桃10, 紅桃8, 紅桃A, 黑桃4, 方片4, 梅花10, 紅桃7, 紅桃K, 黑桃6, 梅花8, 梅花6, 方片2, 紅桃J] [梅花3, 方片7, 梅花2, 方片A, 方片8, 梅花Q, 黑桃9, 方片Q, 紅桃Q, 紅桃4, 梅花4, 方片5, 黑桃A, 方片6, 方片3, 黑桃K, 大鬼] [黑桃2, 方片10, 黑桃Q, 梅花J, 紅桃3, 梅花K, 紅桃5, 方片9, 梅花5, 黑桃J, 方片K, 黑桃10, 紅桃9, 黑桃3, 方片J, 梅花7, 紅桃6]
2隨機發撲克,並對玩家手中的撲克進行整理,程式碼如下:
package exercise; //初始化一副撲克的,建立集合物件將撲克放進去,要注意撲克與索引的對應,應該是先4張A,再4張2,...... //使用Collections的shuffle方法對集合進行洗牌 // 實現發牌,發三家牌 import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.TreeSet; public class Poker02 { public static void main(String[] args) { String[] nums = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; String[] colors = { "黑桃", "紅桃", "梅花", "方片" }; HashMap<Integer, String> pokerMap = new HashMap<>();// 用來存放key索引value和牌 List<Integer> indexList = new ArrayList<>();// 儲存撲克的索引0-53 TreeSet<Integer> buttoms = new TreeSet<>(); TreeSet<Integer> player1 = new TreeSet<>(); TreeSet<Integer> player2 = new TreeSet<>(); TreeSet<Integer> player3 = new TreeSet<>(); // 定義索引值變數 int index = 0; // 將撲克牌與索引建立對應關係放入map和list中 for (String num : nums) { for (String color : colors) { pokerMap.put(index, color + num); indexList.add(index); index++; } } pokerMap.put(index, "小鬼"); indexList.add(index++); pokerMap.put(index, "大鬼"); indexList.add(index); // 洗牌 Collections.shuffle(indexList); // 發牌 for (int i = 0; i < indexList.size(); i++) { if (i >= indexList.size() - 3) { buttoms.add(indexList.get(i)); } else if (i % 3 == 0) { player1.add(indexList.get(i)); } else if (i % 3 == 1) { player2.add(indexList.get(i)); } else { player3.add(indexList.get(i)); } } check(pokerMap, player1, "player1"); check(pokerMap, player2, "player2"); check(pokerMap, player3, "player3"); check(pokerMap, buttoms, "buttoms"); } public static void check(HashMap<Integer, String> pokerMap, TreeSet<Integer> player1, String name) { // 檢視手中的牌 System.out.println(name + " :"); for (Integer i : player1) { System.out.print(pokerMap.get(i) + " "); } System.out.println(); } } out: player1 : 梅花A 梅花2 紅桃3 黑桃4 梅花5 方片5 梅花6 紅桃7 黑桃8 方片8 黑桃9 梅花9 黑桃J 梅花J 紅桃K 小鬼 大鬼 player2 : 方片A 黑桃2 方片2 梅花3 方片3 方片4 黑桃5 紅桃5 方片6 方片7 紅桃8 梅花8 方片9 黑桃10 紅桃10 黑桃Q 方片Q player3 : 紅桃A 紅桃2 黑桃3 紅桃4 梅花4 紅桃6 黑桃7 紅桃9 梅花10 方片10 紅桃J 方片J 紅桃Q 梅花Q 黑桃K 梅花K 方片K buttoms : 黑桃A 黑桃6 梅花7
原文: