Java集合的綜合案例之——斗地主的“洗牌”與“發牌”
按照斗地主的規則,完成洗牌發牌的動作,
具體規則:
使用54張牌打亂順序,摞整齊放在桌子上,三個玩家參與游戲,三人交替從最上面開始摸牌,當只剩三張牌時停止摸牌,并把最后的三張牌留作底牌,
1.需求分析
-
準備牌——54張牌存到一個集合中
大王和小王特殊牌:2張
四種花色普通牌:52張
? 先定義一個陣列/集合,存盤4中花色的撲克牌:
????? 再定義一個陣列/集合,用來存盤13個序號:3,4,5 ... K,A,2
然后回圈嵌套兩個陣列/集合,組裝這52張撲克牌:
?
?3,?4,?5,...,?K,?A,?2?
?3,?4,?5,...,?K,?A,?2,?
?3,?3,?3,...,?K,?A,?2,?
?3,?4,?5,...,?K,?A,?2, -
洗牌
使用集合工具類Collections:
?
static void shuffle(List<?> list) ;//使用默認隨機源對指定串列進行置換? 該方法會隨機打亂集合中元素的順序
-
發牌
要求:1人17張牌,剩余三張當底牌,沒人每次一張牌,輪流發:使用集合的索引去除以三,取余
定義四個集合,存盤三個玩家的牌和三張底牌
索引%2,有兩個值(0和1)
索引%3,有三個值(0和1和2)
索引>=51,變成給底牌發牌
-
看牌
直接列印集合,遍歷存盤玩家和底牌的集合,
2.代碼實作
?
import java.util.ArrayList;
import java.util.Collections;
/*斗地主綜合案例:
* 1.準備54張牌
* 2.洗牌
* 3.發牌
* 4.看牌*/
public class PlayPoker {
public static void main(String[] args) {
//1.準備54張牌
//新建一個集合存盤54張牌并打亂順序
ArrayList<String> pokers = new ArrayList<>();
//直接定義兩個陣列并賦值,一個存四種花色,一個存13張牌的值(3,4,5,6,7,8,9,10,J,Q,K,A,2)
String[] kind = {"?","?","?","?"};
String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//先存大王小王到pokers集合中
pokers.add("大王");
pokers.add("小王");
//組裝兩個集合的資料,生成帶花色的52張牌(可以用普通for回圈,也可以用增強for回圈foreach)
for (int i = 0; i < kind.length; i++) {
for (int j = 0; j < 13; j++) {
pokers.add(kind[i]+number[j]);
}
}
System.out.println("54張牌:"+pokers);//順序列印
//洗牌--打亂pokers集合里的元素順序
Collections.shuffle(pokers);
System.out.println("洗過的54張牌:"+pokers);//亂序列印
//發牌--
//定義4個集合,分別存盤3個玩家的牌和3張底牌
ArrayList<String> player1 = new ArrayList<>();
ArrayList<String> player2 = new ArrayList<>();
ArrayList<String> player3 = new ArrayList<>();
ArrayList<String> bottoms = new ArrayList<>();
/*遍歷pokers集合,獲取每一張牌(由于增強for回圈里沒有索引,就無法對每一張牌進行操作,所以下面要用普通for回圈)
* 輪流發牌:使用集合的索引去除以三,取余
* 索引%2,有兩個值(0和1)
索引%3,有三個值(0和1和2)
索引>=51,變成給底牌發牌
注意事項:必須先判斷索是否大于51,因為要提前判斷是不是發到了第51張,之后的三張要留著
*/
for (int i = 0; i < pokers.size(); i++) {
if (i<51){
if (i%3==0){
player1.add(pokers.get(i));
}else if (i%3==1){
player2.add(pokers.get(i));
}else if (i%3==2){
player3.add(pokers.get(i));
}
}else {
bottoms.add(pokers.get(i));
}
}
System.out.println("=========================================");
System.out.println("玩家1:"+player1);
System.out.println("玩家2:"+player2);
System.out.println("玩家3:"+player3);
System.out.println("底 牌:"+bottoms);
}
}
運行結果:

思考
如果想要給發好的牌排序怎么操作? ??????
未完待續...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278733.html
標籤:Java
上一篇:基本并查集【LEMONni】
