package Game;import java.util.ArrayList;
import java.util.Collections;public class PokerGame01 {//牌盒//?3 ?3static ArrayList<String> list = new ArrayList<>();//靜態代碼塊//特點:隨著類的加載而在加載的,而且只執行一次。static {//準備牌// "?", "?", "?", "?"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"?", "?", "?", "?"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};for (String c : color) {//c表示每一個牌的花色for (String n : number) {//n表示每一種牌號list.add(c + n);}}list.add("大王");list.add("小王");}public PokerGame01() {// 洗牌Collections.shuffle(list);// 發牌//定義4個集合,其中3個選手的牌,還要一個是用來存儲地主多出來的3張牌ArrayList<String> dizhu = new ArrayList<>();ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();for (int i = 0; i < list.size(); i++) {//根據索引找到牌號,本質是要把前三張牌給地主String poke = list.get(i);//得到了第i張牌if (i <= 2) {dizhu.add(poke);//前三張給地主//依次輪流給3個選手發牌} else if (i % 3 == 0) {player1.add(poke);} else if (i % 3 == 1) {player2.add(poke);} else {player3.add(poke);}}//看牌lookpoke("張三",player1);lookpoke("李四",player2);lookpoke("王五",player3);}public void lookpoke(String name, ArrayList<String> list) {System.out.print(name + ": ");for (String poke : list) {//循環遍歷得到每一張牌System.out.print(poke + " ");}System.out.println();}
}
排序的
package Game;import java.util.*;public class PokerGame02 {//牌盒//?3 ?3//鍵是序號,牌是值//此時只要把牌跟序號產生對應關系即可,不需要按照序號進行排序,所以只需HashMap即可static HashMap<Integer, String> hm = new HashMap<>();//用來存儲序號的單列集合static ArrayList<Integer> list = new ArrayList<>();//靜態代碼塊//特點:隨著類的加載而在加載的,而且只執行一次。static {//準備牌// "?", "?", "?", "?"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"?", "?", "?", "?"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
/*{1=?3, 2=?4, 3=?5, 4=?6, 5=?7, 6=?8, 7=?9, 8=?10, 9=?J, 10=?Q, 11=?K, 12=?A, 13=?2, 14=?3,15=?4, 16=?5, 17=?6, 18=?7, 19=?8, 20=?9, 21=?10, 22=?J, 23=?Q, 24=?K, 25=?A, 26=?2, 27=?3,28=?4, 29=?5, 30=?6, 31=?7, 32=?8, 33=?9, 34=?10, 35=?J, 36=?Q, 37=?K, 38=?A, 39=?2, 40=?3,41=?4, 42=?5, 43=?6, 44=?7, 45=?8, 46=?9, 47=?10, 48=?J, 49=?Q, 50=?K, 51=?A, 52=?2}很明顯可以看出沒有按照順序起好牌 應該先把數字一樣的放在一起,而不是把花色一樣的放在一起解決: 交換color和number即可
*///定義一個序號int num = 1;for (String n : number) {//n表示每一種牌號for (String c : color) {//c表示每一個牌的花色hm.put(num, c + n);list.add(num);num++;}}hm.put(num, "小王");list.add(num);num++;hm.put(num, "大王");list.add(num);}public PokerGame02() {// 洗牌Collections.shuffle(list);// 發牌/*
[39, 35, 7]
[28, 31, 15, 54, 14, 24, 3, 46, 43, 22, 37, 41, 29, 45, 16, 30, 48]
[33, 49, 11, 13, 38, 27, 25, 50, 20, 9, 1, 32, 19, 10, 44, 21, 40]
[53, 8, 34, 36, 17, 42, 5, 18, 2, 23, 12, 26, 4, 47, 6, 51, 52]
用ArrayList集合存儲的索引是亂序的,我們本質是要根據序號也就是索引去到map集合里面找到牌,所以序號要有序*//*[5, 10, 34][2, 4, 7, 8, 13, 17, 18, 19, 20, 22, 27, 35, 37, 38, 39, 40, 42][1, 9, 14, 16, 23, 24, 28, 29, 30, 31, 32, 36, 41, 43, 46, 51, 52][3, 6, 11, 12, 15, 21, 25, 26, 33, 44, 45, 47, 48, 49, 50, 53, 54]*///定義4個集合,其中3個選手的牌,還要一個是用來存儲地主多出來的3張牌TreeSet<Integer> dizhu = new TreeSet<>();TreeSet<Integer> player1 = new TreeSet<>();TreeSet<Integer> player2 = new TreeSet<>();TreeSet<Integer> player3 = new TreeSet<>();//獲取所有的鍵,把這些鍵放入單列集合當中// Set<Integer> integers1 = hm.keySet();for (int i = 0; i < list.size(); i++) {//根據索引找到牌的序號,本質是要把前三張牌的序號給地主int number = list.get(i); //得到了第i張牌的序號if (i <= 2) {dizhu.add(number); //前三張牌的序號給地主// integers1.add(poke);//依次輪流給3個選手發牌} else if (i % 3 == 0) {player1.add(number);} else if (i % 3 == 1) {player2.add(number);} else {player3.add(number);}}//看牌lookpoke("底牌",dizhu);lookpoke("張三",player1);lookpoke("李四",player2);lookpoke("王五",player3);// look("趙六",integers1);}/** 參數一:玩家的名字* 參數二:牌的序號* */public void lookpoke(String name, TreeSet<Integer> ts) {System.out.print(name + ": ");for (int num : ts) {//num就是代表的是序號,遍歷方法1 通過鍵找值的方式遍歷map集合//遍歷TreeSet集合得到每一個序號,再拿著序號到Map集合中去找真正的牌String poke = hm.get(num);//通過鍵(序號)拿到了每一張牌(值)System.out.print(poke + " ");}System.out.println();}//遍歷單列集合,得到每一個鍵;/* public void look(String name, Set<Integer> key) {System.out.print(name+": ");//遍歷單列集合,得到每一個鍵for (int num : key) {//num代表就是序號//通過序號(鍵)去找到map集合里面的值String value = hm.get(num);System.out.print(value+" ");}System.out.println();}*/
}
package Game;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;public class PokerGame03 {//牌盒//?3 ?3static ArrayList<String> list = new ArrayList<>();//創建一個集合,用來添加牌的價值,牌號是鍵,價值是值static HashMap<String, Integer> hm = new HashMap<>();//靜態代碼塊//特點:隨著類的加載而在加載的,而且只執行一次。static {//準備牌// "?", "?", "?", "?"// "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"String[] color = {"?", "?", "?", "?"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};for (String c : color) {//c表示每一個牌的花色for (String n : number) {//n表示每一種牌號list.add(c + n);}}list.add(" 大王");list.add(" 小王");//指定牌的價值//牌上的數字到Map集合中判斷是否存在//存在,獲取價值//不存在,本身的數字就是價值hm.put("J", 11);hm.put("Q", 12);hm.put("K", 13);hm.put("A", 14);hm.put("2", 15);hm.put("小王", 50);hm.put("大王", 100);}public PokerGame03() {// 洗牌Collections.shuffle(list);// 發牌//定義4個集合,其中3個選手的牌,還要一個是用來存儲地主多出來的3張牌ArrayList<String> dizhu = new ArrayList<>();ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();for (int i = 0; i < list.size(); i++) {//根據索引找到牌號,本質是要把前三張牌給地主String poke = list.get(i);//得到了第i張牌if (i <= 2) {dizhu.add(poke);//前三張給地主//依次輪流給3個選手發牌} else if (i % 3 == 0) {player1.add(poke);} else if (i % 3 == 1) {player2.add(poke);} else {player3.add(poke);}}//排序order(dizhu);order(player1);order(player2);order(player3);//看牌lookpoke("張三",player1);lookpoke("李四",player2);lookpoke("王五",player3);lookpoke("底牌",dizhu);}//利用牌的價值進行排序//參數:集合//?5 ?3 ?6 ?7 ?9private void order(ArrayList<String> list) {Collections.sort(list, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {//o1:表示當前要插入到有序序列中的牌//o2:表示已經在有序序列中存在的牌//負數:o1小 插入到前面//正數:o1大 插入到后面//0:o1的數字跟o2的數字是一樣的,需要按照花色再次排序//1.計算o1的花色和價值 String color1 = o1.substring(0, 1);;//?3中的?//價值int value1 = getValue(o1);//2.計算o2的花色和價值String color2= o1.substring(0, 1);//?3中的?//價值int value2 = getValue(o2);//3.比較o1和o2的價值 ?3 ?3int i = value1 - value2;return i == 0 ? color1.compareTo(color2) : i;}});}//計算牌的價值//參數:牌//返回值:價值public int getValue(String poker) { //?3//獲取牌上的數字String number = poker.substring(1);//比如?3中的3//把這里截取出來的結果,讓這個結果再Map集合中存在/*hm.put("J", 11);hm.put("Q", 12);hm.put("K", 13);hm.put("A", 14);hm.put("2", 15);hm.put("小王", 50);hm.put("大王", 100);*///如果不存在類型轉換 如"3"的價值就值3//如果存在在map集合里面拿出對應的價值即可//拿著數字到map集合中判斷是否存在if (hm.containsKey(number)) {//存在,獲取價值return hm.get(number);} else {//不存在,類型轉換return Integer.parseInt(number);}}public void lookpoke(String name, ArrayList<String> list) {System.out.print(name + ": ");for (String poke : list) {//循環遍歷得到每一張牌System.out.print(poke + " ");}System.out.println();}
}