JAVA案例题---斗地主

  1. 创建扑克牌类

public class Poker {
    
    private String content;//牌底=花色+数字

    public Poker() {
    }
    public Poker(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return  content ;
    }

}

2.创建玩家类

//定义一个玩家类
public class Player {

    private String name;
    //对应关系
    //private Poker poker; //一一对应
    private ArrayList<Poker> pokers;//一对多

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ArrayList<Poker> getPokers() {
        return pokers;
    }

    public void setPokers(ArrayList<Poker> pokers) {
        this.pokers = pokers;
    }

    public Player() {
    }

    public Player(String name, ArrayList<Poker> pokers) {
        this.name = name;
        this.pokers = pokers;

    }

    @Override
    public String toString() {
        return "Player{" +
                "name='" + name + '\'' +
                ", pokers=" + pokers +
                '}';
    }
}

3.定义工具类

//定义一个工具类
public class ToolsUtil {

    //准备一个牌盒,用来存储牌
    static ArrayList<Poker> pokerBox = new ArrayList<>();


    //1.初始化 准备一副牌
    public static ArrayList<Poker> initPoker() {

        //准备花色
        String[] color = {"红桃", "黑桃", "方块", "梅花"};
        //准备数值
        String[] nums = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        //造牌
        for (String s : color) {
            for (String num : nums) {
                //此时s和num就是元素内容
                String card = s + num;
                pokerBox.add(new Poker(card));
            }
        }
        /*Poker poker=new Poker();*/
        //存储大小王
        pokerBox.add(new Poker("大王"));
        pokerBox.add(new Poker("小王"));
        return pokerBox;
    }

    //洗牌
    public static ArrayList<Poker> shufflePoker(ArrayList<Poker> list) {
        //打乱顺序
      /*  ArrayList<Poker> pokers = new ArrayList<>();

        for (int i = 0; i < 54; i++) {
            //随机索引
            int index = (int) (Math.random() * list.size());
            //Poker  remove (index) 删除ArrayList容器中的
            //指定元素,并且返回删除指定的元素
            pokers.add(list.remove(index));
        }

        return pokers;*/
        Collections.shuffle(list);
        return list;
    }
    //看牌  三个玩家的牌  可变参数列表
    public static void checkUp(Poker[] dipai, Player... players) {
        System.out.println("明牌");
        //非空校验
        if (dipai != null && players.length != 0 && players != null) {
            for (int i = 0; i < players.length; i++) {
                //3个玩家的牌  在ArrayList类中有重写的toString()方法可以直接打印
                //如果使用可变参数列表,player相当于一个数组Player[] players
                System.out.println("玩家" + players[i].getName() + ":" + players[i].getPokers());
            }
            //查看底牌  Arrays.toString(数组类型变量)
            System.out.println(Arrays.toString(dipai));
        }
    }
}

4.测试类

//测试类
public class Test {
    public static void main(String[] args) {
        //准备牌
        ArrayList<Poker> pokers = ToolsUtil.initPoker();
        System.out.println(pokers);
        // 洗牌
        ArrayList<Poker> pokersBox = ToolsUtil.shufflePoker(pokers);
        // 发牌
        //准备三个玩家 创建3个玩家对象
        Player player2 = new Player("小明", new ArrayList<>());
        Player player1= new Player("小刘", new ArrayList<>());
        Player player = new Player("小张", new ArrayList<>());
          Poker[] diapi= new Poker[3];
          //模拟3个玩家轮流摸牌
        for (int i = 0; i < pokersBox.size(); i++) {
            //获取牌面
            Poker poker = pokersBox.get(i);
            //留出三张底牌存储到底牌数组中
            if(i>=51){ //当i=51时,i-51=0...
                diapi[i-51]=poker;
                System.out.println(poker);
            }else {
               if(i%3==0){
                   player.getPokers().add(poker);
               }else if(i%3==1){
                   player1.getPokers().add(poker);
               }else{
                   player2.getPokers().add(poker);
               }


            }
        }
        ToolsUtil.checkUp(diapi, player,player1,player2);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值