斗地主案例的需求分析 与斗地主案例的代码实现
斗地主案例的需求分析
- 准备牌 54张,存储到一个集合中
- 特殊牌:大王 小王
- 其他52张牌:
- 定义一个数组 V 集合,存储4张花色:♣ ♠ ♥ ♦
- 定义一个数组 V 集合,存储13个序号:2 A K Q .....3
- 循环嵌套遍历两个 数组 V 集合,组装52张牌:♠2 ♣4......
- 洗牌
- 使用集合工具类Collection的方法
- Static void shuffle(List<?> list) 使用指定的随机源对指定列表进行置换
- 会随机打乱集合中元素的顺序
- 发牌
- 要求:1人17张,剩余3张作为底牌,一人一张牌轮流发牌:集合的索引(0-53)% 3
- 定义4个集合,存储3个玩家的牌和底牌
- 索引%2,有两个值(0,1)0%2=0 1%2=1 2%2=0 3%2=1
- 索引%3,有三个值(0,1,2)0%3=0 1%3=1 2%3=2 3%3=0(给玩家发牌)
- 索引>=51 改底牌发牌(保留三张底牌)
- 看牌
- 直接打印集合,遍历存储玩家和底牌的集合
package Generic01_Demo01; import java.util.ArrayList; import java.util.Collections; public class Doudizu { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<String> arr = new ArrayList<>(); String color[] = {"♠","♥","♣","♦"}; String number[] = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; //放入大王小王 arr.add("大王"); arr.add("小王"); //生成牌 for( String c : color) { for(String s : number) { arr.add(s+c); } } //洗牌 Collections.shuffle(arr); //System.out.println(arr); //发牌 ArrayList<String> user1 = new ArrayList<>(); ArrayList<String> user2 = new ArrayList<>(); ArrayList<String> user3 = new ArrayList<>(); ArrayList<String> dipai= new ArrayList<>(); for (int i = 0; i < arr.size(); i++) { String s =arr.get(i); //底牌设置 if(i>=51) { dipai.add(s); //轮流发牌 }else if(i%3==1) { user1.add(s); }else if(i%3==2) { user2.add(s); }else if(i%3==0) { user3.add(s); } } //看牌 System.out.println("陈志朋: "+user1); System.out.println("金庸: "+user2); System.out.println("马云: "+user3); System.out.println("底牌: "+dipai); } }
斗地主游戏案例
1.需求分析:
模拟斗地主游戏,利用集合存储,可以看分派好的牌
2.具体实现:
(1)在牌盒(字符串数组)存储四个花色:
String color[] = {"♠","♥","♣","♦"};
按照斗地主游戏规则由大到小:
String number[] = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
在Map中存储键值对,键是索引值,值是花色和点数组成的字符串,索引用来指定派,利用索引进行洗牌操作
(4)把索引值存储到ArrayList集合中,以便进行洗牌操作
(5)利用集合工具类Collections的shuffle()方法实现洗牌功能
(6)按照斗地主的发牌规则发牌,这里发的是洗牌操作之后的索引值
package Generic01_Demo01; import java.util.ArrayList; import java.util.Collections; /* * 斗地主综合案例 * 1.准备牌 2.洗牌 3.发牌 4.看牌 * */ public class DouDiZhu { public static void main(String[] args) { //1. 准备牌 54张,存储到一个集合中 ArrayList<String> poker = new ArrayList<>(); //定义两个数组,一个存花色,一个存牌的序号 String[] colors = {"♠","♥","♣","♦"}; String[] nums = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; //先把大王小王存储到poker集合中 poker.add("大王"); poker.add("小王"); //循环嵌套遍历两个数组,组装52张牌 for (String number : nums) { for (String color : colors){ // System.out.println(color+number); poker.add(color+number); } } // System.out.println(poker); //2洗牌 使用集合的工具类collections中的方法shuffle(List<?> list) //默认随机源对指定列表进行置换 Collections.shuffle(poker); // System.out.println(poker); //3.发牌 定义4个集合,存储玩家的牌和底牌 ArrayList<String> player01 = new ArrayList<>(); ArrayList<String> player02 = new ArrayList<>(); ArrayList<String> player03 = new ArrayList<>(); ArrayList<String> diPai = new ArrayList<>(); //遍历集合,获取每一张牌 //使用poker集合的索引给3个玩家轮流发牌 最后三张为底牌 for (int i = 0; i < poker.size(); i++) { //获取每一张牌 String p = poker.get(i); if (i>=51){ diPai.add(p); }else if (i%3==0){ //给玩家1发牌 player01.add(p); }else if (i%3==1){ player02.add(p); }else if (i%3==2){ player03.add(p); } } //4.看牌 System.out.println("张三:"+player01); System.out.println("李四:"+player02); System.out.println("王五:"+player03); System.out.println("底牌:"+diPai); } }