(1)无序
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.发牌//现在三个人玩,把每一个看成集合ArrayListArrayList<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+"的牌是:");
for(String s : array) {
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();
}
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章