斗地主案例(利用集合/增强for等技术)

 

斗地主案例(利用集合/增强for等技术)

package Task10;

import java.util.ArrayList;
import java.util.Collections;

public class Test {

    public static void main(String[] args) {
    //生成54张牌存入集合中(核心代码用双for循环进行遍历最后存到ArrayList<String> 中)
        ArrayList<String> pokers = new ArrayList<String>();
        
        String[] colors = {"♣", "♦", "♠", "♥"};
        String[] numbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        for(int i = 0;i < colors.length;i++) {
            
            //获取花色
            String color = colors[i];
            for(int j = 0;j < numbers.length;j++) {
                
                //获取扑克上的数字
                String number = numbers[j] ;
                String poker = color + number;
                
                //拼接成一张牌
                pokers.add(poker);
            }
        }
        pokers.add("大王");
        pokers.add("小王");

        //洗牌(核心代码是collection类里面的工具类里collections的shuffle方法)
        
        Collections.shuffle(pokers);
        
        
        //发牌(核心代码是:三个集合类型的选手,依次发牌,直到只剩最后三张的时候当作底牌)
        //三个玩家
        ArrayList<String> player01 = new ArrayList<>();
        ArrayList<String> player02 = new ArrayList<>();
        ArrayList<String> player03 = new ArrayList<>();
        ArrayList<String> diPai = new ArrayList<>();
        for(int i = 0; i < pokers.size() ; i++) {
            //每一张牌的临时接收者
            String poker = pokers.get(i);
            //当还剩最后三张的时候
            if(i >= pokers.size()-3) {
                diPai.add(poker);
            }else if(i % 3 == 0) {
                player01.add(poker);
            }else if(i % 3 == 1) {
                player02.add(poker);
            }else {
                player03.add(poker);
            }
        }
        
        //发牌完毕,打印出三个玩家的牌和底牌
        System.out.println("发牌完毕!!!");
        System.out.println("玩家1:");
        for (String p1 : player01) {
            System.out.print(p1+" ");
        }
        System.out.println();
        System.out.println("玩家2:");
        for (String p2 : player02) {
            System.out.print(p2+" ");
        }
        System.out.println();
        System.out.println("玩家3:");
        for (String p3 : player03) {
            System.out.print(p3+" ");
        }
        System.out.println();
        System.out.println("底牌:");
        for (String di : diPai) {
            System.out.print(di+" ");
        }
        System.out.println();
        //选地主...将得到大王的选手选为地主(核心代码是collections工具类中的contains方法 和添加底牌的addAll方法)
        if(player01.contains("大王")) {
            player01.addAll(diPai);
            System.out.println("=====================玩家1成为地主=====================");
        }else if(player02.contains("大王")) {
            player02.addAll(diPai);
            System.out.println("=====================玩家2成为地主=====================");
        }else{
            
            player03.addAll(diPai);
            System.out.println("=====================玩家3成为地主=====================");
        }
        
        //显示每位玩家手中的牌
        System.out.println("===================最终每个人手中的牌是=====================");
        System.out.println("玩家1:");
        for (String p1 : player01) {
            System.out.print(p1+" ");
        }
        System.out.println();
        System.out.println("玩家2:");
        for (String p2 : player02) {
            System.out.print(p2+" ");
        }
        System.out.println();
        System.out.println("玩家3:");
        for (String p3 : player03) {
            System.out.print(p3+" ");
        }
        
    }
}

 

 

核心代码总结:

  1,生成牌:

    主要是用ArrayList集合类存生成的牌,每个玩家手中的牌,底牌!

    要用的容器主要有:花色,牌面数字,

    技术是用花色和牌面数字的个数进行双重循环遍历,把遍历出的每一种组合,都存到ArrayList集合中()共有4*13 = 52种,最后不要忘了大小王,一共54张牌

  2.洗牌:

   核心的技术是ArrayList中的一个方法 shuffle,功能是对数组中的元素进行打乱

  3.发牌:

   核心技术是:对已经打乱的牌进行对每个玩家挨个分发,用的是for循环的下标,对3取余,不要忘了最后三张底牌

  4.抢地主:

   核心方法是:ArrayList里面的contains方法,来判断luckyPoker(拥有者获得地主的优先选择权)

  5.显示每个玩家手中的牌面:

   用增强for打印

 

posted @ 2018-03-14 23:20  cheney-yang  阅读(305)  评论(0编辑  收藏  举报