模擬鬥地主
import java.util.ArrayList;
import java.util.Collections;
/*
模擬鬥地主的洗牌和發牌
-
*思路:
- 1)創建一個牌盒(容器:集合)
- ArrayList<String>
- 2)裝牌
- 定義花色數組和點數數組(A,K)
- 紅桃A
- 黑桃A
- 梅花A
- 方片A
- ....
- 3)洗牌
- Collections中的隨機置換的功能
- 4)發牌
- 遍歷集合(獲取集合中的具體的牌)
- 需要判斷:選擇結構語句
- 1--->A 2--->B 3----C
- 4---A .................
- 鬥地主三個玩
- 發個三個人----->三個人分別ArrayList<String>
- 如果當前牌 % 3 ==0/1/2
- 5)看牌
- 三個人看牌:將看牌封裝成一個功能(獨立的 代碼塊)
-
*/
public class Poker {public static void main(String[] args) {
//1.創建牌盒 ArrayList<String> array = new ArrayList<String>() ; //2.裝牌 //2.1創建花色數組 String[] colors = {"?","?","?","?"} ; //2.2 創建點數數組 String[] numbers = {"A","2","3","4","5","6","7","8","9", "10","J","Q","K"} ; for(String color :colors) { for(String number:numbers) { String poker = color.concat(number) ; array.add(poker) ; } } //添加小王和大王 array.add("小王") ; array.add("大王") ; //3. 洗牌 Collections.shuffle(array); //4.發牌 //現在三個人玩,把每一個看成集合ArrayList ArrayList<String> player1 = new ArrayList<String>() ; ArrayList<String> player2 = new ArrayList<String>() ; ArrayList<String> player3 = new ArrayList<String>() ; ArrayList<String> diPai = new ArrayList<String>() ; //有規律的:遍歷ArrayList集合 使用普通for循環,獲取到集合的元素 //通過元素 % 人數 = 0 /1/2 /.. for(int x = 0 ; x < array.size() ; x ++) { //獲取到每一個元素 if(x >= array.size() -3) { diPai.add(array.get(x)) ; }else if(x % 3 == 0) { //玩家1 player1.add(array.get(x)) ; }else if(x % 3 == 1) { //玩家2 player2.add(array.get(x)) ; }else if(x % 3 == 2) { player3.add(array.get(x)) ; } } //5)看牌
// * 三個人看牌:將看牌封裝成一個功能(獨立的 代碼塊)
lookPoker("玩家1", player1);
lookPoker("玩家2", player2);
lookPoker("玩家3", player3);
lookPoker("底牌", diPai);
}public static void lookPoker(String name,ArrayList<String> array) {
System.out.print(name+"的牌是:");
System.out.print(s+" ");
}
System.out.println();
}
}
(2)有序
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
/**
- 模擬鬥地主的洗牌和發牌,發到每一個手上的牌是保證有序的.. 思考: 1)創建牌盒
- 創建兩個集合:HashMap<Integer,String>,ArrayList<Integer> 2)裝牌 定義花色數組和點數數組
- 從0開始編號,將編號和編號對應的牌都存儲到HashMap集合中,同時往ArrayList單獨存儲編號 3)洗牌 洗的是編號 4)發牌
- 發的也是編號,為了保證牌有序,集合由TreeSet集合接收 5)看牌 封裝功能
-
*/
public class Porker2 {public static void main(String[] args) {
// 1. 創建兩個集合:HashMap<Integer,String>,ArrayList<Integer>
HashMap<Integer, String> hm = new HashMap<Integer, String>();
ArrayList<Integer> array = new ArrayList<Integer>();// 2.裝牌 // 2.1 定義花色數組和點數數組 String[] colors = { "?", "?", "?", "?" }; String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" }; // 從0開始編號,將編號和編號對應的牌都存儲到HashMap集合中,同時往ArrayList單獨存儲編號 int index = 0; // 拼接 for (String number : numbers) { for (String color : colors) { String poker = color.concat(number); hm.put(index, poker); array.add(index); index++; } } // 裝小王和大王 hm.put(index, "小王"); array.add(index); index++; hm.put(index, "大王"); array.add(index); // 不能++了,角標越界 // 洗牌 Collections.shuffle(array); // 4)發牌 // 發的也是編號,為了保證牌有序,集合由TreeSet集合接收 TreeSet<Integer> player1 = new TreeSet<Integer>(); TreeSet<Integer> player2 = new TreeSet<Integer>(); TreeSet<Integer> player3 = new TreeSet<Integer>(); TreeSet<Integer> diPai = new TreeSet<Integer>(); // 有規律的:遍歷ArrayList集合 使用普通for循環,獲取到集合的元素 // 通過元素 % 人數 = 0 /1/2 /.. for (int x = 0; x < array.size(); x++) { // 獲取到每一個元素 if (x >= array.size() - 3) { diPai.add(array.get(x)); } else if (x % 3 == 0) { // 玩家1 player1.add(array.get(x)); } else if (x % 3 == 1) { // 玩家2 player2.add(array.get(x)); } else if (x % 3 == 2) { player3.add(array.get(x)); } }
// 5)看牌 封裝功能
lookPoker("玩家1", player1, hm);
lookPoker("玩家2", player2, hm);
lookPoker("玩家3", player3, hm);
lookPoker("底牌", diPai, hm);}
public static void lookPoker(String name,TreeSet<Integer> ts,
HashMap<Integer, String> hm) {
System.out.print(name+"的牌是:");
//遍歷TreeSet集合獲取到每一個編號
for(Integer key :ts) {
//獲取到編號,通過編號找牌(在HashMap中找)
String value = hm.get(key) ;
System.out.print(value+" ");
}
System.out.println();
}
}
模擬鬥地主