通過數組實現:
/*
* @author:肖佳嘉
* @Date : 2019-04-12
* @class :Collections
*/
package porker;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class Porke {
public static void main(String[] args) {
/*模擬鬥地主進行洗牌和發牌
* 1、創建一副牌
* 牌色 牌號
* 2、洗牌
* 3、抽取出三張底牌
* 4、定義玩家
* 5、發牌*/
//設置牌色
String [] color = {"黑桃","紅桃","方塊","梅花",};
//設置牌號
String [] number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//創建一副牌
ArrayList<String> poker = new ArrayList<>();
for(String s1 : color) {
for(String s2 : number) {
poker.add(s1.concat(s2));
}
}
poker.add("大王");
poker.add("小王");
//System.out.println(poker);
//洗牌
Collections.shuffle(poker);
//定義三個玩家,定義三張底牌
ArrayList<String> A = new ArrayList<>();
ArrayList<String> B = new ArrayList<>();
ArrayList<String> C = new ArrayList<>();
ArrayList<String> hand = new ArrayList<>();
//
for(int i = 0;i<poker.size();i++) {
//抽出三張底牌
if(i>=poker.size()-3) {
hand.add(poker.get(i));
}else if (i%3 == 0) { //發牌
A.add(poker.get(i));
} else if (i%3 == 1) {
B.add(poker.get(i));
}else {
C.add(poker.get(i));
}
}
System.out.println("A player:"+A);
System.out.println("B player:"+B);
System.out.println("C player:"+C);
System.out.println("hand :"+hand);
}
}
測試結果:
A player:[紅桃K, 梅花6, 方塊Q, 紅桃3, 黑桃8, 梅花4, 黑桃A, 紅桃A, 大王, 紅桃9, 黑桃10, 黑桃4, 紅桃7, 紅桃10, 紅桃8, 梅花5, 梅花7]B player:[方塊2, 黑桃J, 方塊5, 紅桃4, 梅花9, 小王, 黑桃2, 梅花2, 黑桃Q, 梅花A, 方塊9, 方塊6, 黑桃6, 黑桃K, 方塊10, 方塊A, 梅花K]
C player:[紅桃5, 梅花Q, 方塊7, 紅桃6, 方塊3, 梅花J, 方塊J, 紅桃J, 梅花3, 紅桃2, 黑桃7, 黑桃5, 紅桃Q, 黑桃3, 方塊4, 方塊K, 黑桃9]
hand :[梅花8, 方塊8, 梅花10]
通過集合實現:
package com.heima.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class Test3 {
/**
* * A:案例演示
* 模擬鬥地主洗牌和發牌並對牌進行排序的代碼實現
*
* 分析:
* 1,買一副撲克,其實就是自己創建一個集合對象,將撲克牌存儲進去
* 2,洗牌
* 3,發牌
* 4,看牌
*/
public static void main(String[] args) {
//1,買一副撲克,其實就是自己創建一個集合對象,將撲克牌存儲進去
String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] color = {"紅桃","黑桃","方片","梅花"};
HashMap<Integer, String> hm = new HashMap<>(); //存儲索引和撲克牌
ArrayList<Integer> list = new ArrayList<>(); //存儲索引
int index = 0;
//拼接撲克牌並索引和撲克牌存儲在hm中
for(String s1 : num) { //獲取數字
for(String s2 : color) { //獲取顏色
hm.put(index, s2.concat(s1));
list.add(index); //將索引0到51添加到list集合中
index++;
}
}
//將小王添加到雙列集合中
hm.put(index, "小王");
list.add(index); //將52索引添加到集合中
index++;
hm.put(index, "大王");
list.add(index); //將52索引添加到集合中
//2,洗牌
Collections.shuffle(list);
//3,發牌
TreeSet<Integer> gaojin = new TreeSet<>();
TreeSet<Integer> longwu = new TreeSet<>();
TreeSet<Integer> me = new TreeSet<>();
TreeSet<Integer> dipai = new TreeSet<>();
for(int i = 0; i < list.size(); i++) {
if(i >= list.size() - 3) {
dipai.add(list.get(i)); //將三張底牌存儲在底牌集合中
}else if(i % 3 == 0) {
gaojin.add(list.get(i));
}else if(i % 3 == 1) {
longwu.add(list.get(i));
}else {
me.add(list.get(i));
}
}
//看牌
lookPoker(hm, gaojin, "高進");
lookPoker(hm, longwu, "龍五");
lookPoker(hm, me, "馮佳");
lookPoker(hm, dipai, "底牌");
}
/*
* 看牌
* 1,返回值類型void
* 2,參數列表HashMap,TreeSet,String name
*/
public static void lookPoker(HashMap<Integer, String> hm,TreeSet<Integer> ts ,String name) {
System.out.print(name + "的牌是:");
for(Integer i : ts) { //i代表雙列集合中的每一個鍵
System.out.print(hm.get(i) + " ");
}
System.out.println();
}
}
測試結果
高進的牌是:紅桃3 方片3 方片5 黑桃6 方片6 方片8 黑桃10 梅花10 方片J 梅花J 紅桃Q 紅桃K 黑桃A 方片A 黑桃2 梅花2 大王
龍五的牌是:黑桃3 梅花4 黑桃5 黑桃7 梅花7 紅桃8 紅桃9 黑桃9 方片9 紅桃10 方片10 黑桃K 方片K 梅花A 紅桃2 方片2 小王
馮佳的牌是:梅花3 紅桃4 黑桃4 方片4 紅桃6 梅花6 紅桃7 方片7 黑桃8 梅花8 紅桃J 黑桃J 黑桃Q 方片Q 梅花Q 梅花K 紅桃A
底牌的牌是:紅桃5 梅花5 梅花9