集合--斗地主发牌
规则:
1. 组装54张扑克牌
2. 将54张牌顺序打乱
3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
l 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
1.1 案例需求分析
l 准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
l 洗牌:
通过数字完成洗牌发牌
l 发牌:
将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。
l 看牌:
通过Map集合找到对应字符展示。
通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
package com.oracle.Demo02; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class doudizhu { public static void main(String[] args) { //创建扑克牌map Map<Integer,String> pk=new HashMap<Integer,String>(); //装有拍好的ArrayList ArrayList<Integer> pkn=new ArrayList<Integer>(); //组装牌 String[] color= {"♥","♠","♣","♦"}; String[] number= {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; //循环打印花色 int index=2;//从2开始,因为大小王需要单独等撰, /*双层for循环,先循环数字因为每个数字有四个花色*/ for(String num:number) { //在循环花色 for(String col:color) { pk.put(index, col+num); pkn.add(index++); } } //封装 大小王 pk.put(0, "大王"); pkn.add(0); pk.put(1, "小王"); pkn.add(1); /*System.out.println(pk); System.out.println(pkn);*/ //洗牌,打乱顺序 Collections.shuffle(pkn); //发牌 造四个容器。 ArrayList <Integer> bottom=new ArrayList <Integer> ();//底牌 ArrayList <Integer> player1=new ArrayList <Integer> ();//玩家1 ArrayList <Integer> player2=new ArrayList <Integer> ();//玩家2 ArrayList <Integer> player3=new ArrayList <Integer> ();//玩家3 //底牌 遍历过程中,将牌发到三个玩家和底牌中
for(int i=0;i<pkn.size();i++) { //先发底牌 if(i<3) { bottom.add(pkn.get(i)); } else if(i%3==0) { player1.add(pkn.get(i)); } else if(i%3==1) { player2.add(pkn.get(i)); } else if(i%3==2) { player3.add(pkn.get(i)); } } //给牌排序 Collections.sort(bottom); Collections.sort(player1); Collections.sort(player2); Collections.sort(player3); //看牌+调方法 look("底牌",bottom,pk); look("渣渣辉",player1,pk); look("系兄弟",player2,pk); look("砍我 ",player3,pk); } public static void look(String name,ArrayList <Integer> player,Map<Integer,String> pk) { //分类 System.out.println(name+":"); for(int i:player) { System.out.print(pk.get(i)+" "); } System.out.println(); } }
代码实现: