斗地主案例的需求分析 与斗地主案例的代码实现

斗地主案例的需求分析

  1. 准备牌 54张,存储到一个集合中
    • 特殊牌:大王 小王
    • 其他52张牌:
      • 定义一个数组 V 集合,存储4张花色:♣ ♠ ♥ ♦
      • 定义一个数组 V 集合,存储13个序号:2 A K Q .....3
    • 循环嵌套遍历两个 数组 V 集合,组装52张牌:♠2 ♣4......
  2. 洗牌
    • 使用集合工具类Collection的方法
    • Static void shuffle(List<?> list) 使用指定的随机源对指定列表进行置换
    • 会随机打乱集合中元素的顺序
  3. 发牌
    • 要求: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 改底牌发牌(保留三张底牌)
  4. 看牌
    • 直接打印集合,遍历存储玩家和底牌的集合
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);
    }
}

 

posted @ 2022-07-06 14:38  zj勇敢飞,xx永相随  阅读(92)  评论(0编辑  收藏  举报