JAVA黑马程序员案例6-4斗地主洗牌发牌

 

package com.jensenyao4;

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


public class jensenyao001 {
    public static void main(String[] args) {
        // 准备花色
        ArrayList<String> color = new ArrayList<String>();
        color.add("♠");
        color.add("♥");
        color.add("♦");
        color.add("♣");
        // 准备数字 ,用ArrayList将纸牌由小到大排序
        ArrayList<String> number = new ArrayList<String>();
        for (int i = 3; i <= 10; i++) {
            number.add(i + "");
        }
        number.add("J");
        number.add("Q");
        number.add("K");
        number.add("A");
        number.add("2");
        // 定义一个map集合:用来将数字与每一张牌进行对应
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        int index = 0;// 纸牌编号
        for (String thisNumber : number) {// 循环纸牌数字
            for (String thisColor : color) {// 循环纸牌花色
                // 将花色与数字组合,形成52张牌,并赋予其编号
                map.put(index++, thisColor + thisNumber);
            }
        }
        // 加入大小王
        map.put(index++, "小☺");
        map.put(index++, "大☻");
        // 一副54张的牌 ArrayList里边为0-53的数的新牌
        ArrayList<Integer> cards = new ArrayList<Integer>();
        for (int i = 0; i <= 53; i++) {
            cards.add(i);// 此时的cards顺序为0-53
        }
        // 洗牌,使用Collections工具类中的shuffle()方法
        Collections.shuffle(cards);// 此时的cards顺序已被打乱
        // 创建三个玩家和底牌
        ArrayList<Integer> iPlayer = new ArrayList<Integer>();
        ArrayList<Integer> iPlayer2 = new ArrayList<Integer>();
        ArrayList<Integer> iPlayer3 = new ArrayList<Integer>();
        ArrayList<Integer> iSecretCards = new ArrayList<Integer>();
        // 遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中
        for (int i = 0; i < cards.size(); i++) {
            if (i >= 51) {
                iSecretCards.add(cards.get(i));// 留取3张底牌
            } else {
                if (i % 3 == 0) {
                    iPlayer.add(cards.get(i));//与3取余为0的牌发给玩家1
                } else if (i % 3 == 1) {
                    iPlayer2.add(cards.get(i));//与3取余为1的牌发给玩家2
                } else {
                    iPlayer3.add(cards.get(i));// 其余的牌发给玩家3
                }
            }
        }
        // 对每个人手中的牌排序,使用Collections工具类中的sort()方法
        Collections.sort(iPlayer);
        Collections.sort(iPlayer2);
        Collections.sort(iPlayer3);
        // 对应数字形式的每个人手中的牌,定义字符串形式的牌
        ArrayList<String> sPlayer = new ArrayList<String>();
        ArrayList<String> sPlayer2 = new ArrayList<String>();
        ArrayList<String> sPlayer3 = new ArrayList<String>();
        ArrayList<String> sSecretCards = new ArrayList<String>();
        // 循环主键,从map中获取纸牌
        for (Integer key : iPlayer) {
            sPlayer.add(map.get(key));
        }
        for (Integer key : iPlayer2) {
            sPlayer2.add(map.get(key));
        }
        for (Integer key : iPlayer3) {
            sPlayer3.add(map.get(key));
        }
        for (Integer key : iSecretCards) {
            sSecretCards.add(map.get(key));
        }
        // 看牌
        System.out.println("玩家1:" + sPlayer);
        System.out.println("玩家2:" + sPlayer2);
        System.out.println("玩家3:" + sPlayer3);
        System.out.println("底牌:" + sSecretCards);
    }

}

 

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值