模拟斗地主,洗牌、发牌、看牌。牌没有顺序. 简单操作.

public classDemo02 {

    // 模拟斗地主,洗牌、发牌、看牌。牌没有顺序

    // 1、创建一个集合,把牌装进去

    // 2、洗牌:shuffle

    // 3、发牌:三个人+3张底牌

    // 4、看牌(打印)

    public static void main(String[] args) {

       // 一、买了一副牌

       List<String>poker = new ArrayList<String>();

       // 四种花色

       String[]color = { "黑桃", "红桃", "梅花", "方片" };

       // 13个数字

       String[] num= { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",

              "J", "Q", "K" };

       for (String cl : color) {

           for (String nu : num) {

              poker.add(cl + nu);

           }

       }

       // System.out.println(poker);

       poker.add("大王");

       poker.add("小王");

       // System.out.println(poker);

       // 二、洗牌:

       Collections.shuffle(poker);

       // 三、发牌

       List<String>player1 = newArrayList<String>();

       List<String>player2 = newArrayList<String>();

       List<String>player3 = newArrayList<String>();

       List<String>other = newArrayList<String>();

       for (int i =0; i < poker.size();i++) {

           if (i < 3) {

              other.add(poker.get(i));

           } else { //i>=3

              if (i % 3 == 0) {

                  player1.add(poker.get(i));

               } else if (i %3 == 1) {

                  player2.add(poker.get(i));

              } else {

                  player3.add(poker.get(i));

              }

           }

       }

       // 四、看牌

       System.out.println("player1:" + player1);

       System.out.println("player2:" + player2);

       System.out.println("player3:" + player3);

       System.out.println("other:" + other);

    }

}

但是这种代码是没有发牌顺序的,可以用Treeset,

保证牌发到三个人手中是已经排好序了的.


public static void main(String[] args) {

       // 一、创建牌

       Map<Integer,String> poker = newHashMap<Integer, String>();

       // 花色

       String[]color = { "方片", "梅花", "红桃", "黑桃" };

       // 数字

       String[] num= { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",

              "K", "A", "2" };

       List<Integer>list = newArrayList<Integer>();

       int index = 0; // 索引

       // 拼接

       for (String n : num) {

           for (String c : color) {

              list.add(index);// 把0-51添加到list中

              poker.put(index,c + n);

              index++;

           }

       }

       // 有前面的52张牌

       // System.out.println(index);

       list.add(index);

       poker.put(index,"小王");

       index++;

       list.add(index);

       poker.put(index,"大王");

       // System.out.println(list);

 

       // 二、洗牌

       Collections.shuffle(list);

       // System.out.println(list);

 

       // 三、发牌

       Set<Integer>player1 = newTreeSet<Integer>();

       Set<Integer>player2 = newTreeSet<Integer>();

       Set<Integer>player3 = newTreeSet<Integer>();

       Set<Integer>other = newTreeSet<Integer>();

       for (int i =0; i < list.size(); i++) {

           if (i >= list.size() - 3) {

              other.add(list.get(i));

           } else {

              if (i % 3 == 0) {

                  player1.add(list.get(i));

              } else if (i %3 == 1) {

                  player2.add(list.get(i));

              } else {

                  player3.add(list.get(i));

              }

           }

       }

 

       // 四、看牌

       show(player1, poker, "惠明的牌");

       show(player2, poker, "有根的牌");

       show(player3, poker, "发生的牌");

       show(other, poker, "底牌");

    }

 

    public static void show(Set<Integer> set, Map<Integer, String>map,

           Stringplayer) {

       System.out.println(player + "是:");

       StringBuildersb = newStringBuilder();

       for (Integer key : set) {

           sb.append(map.get(key)+ ",");

       }

       System.out.println(sb.deleteCharAt(sb.lastIndexOf(",")));

    }

}

可以看到用Treeset进行改进的方法已经能够做到发到三人手中的牌是按照一定的顺序的.

它的原理是:除大小王之外的,52张牌,每张牌编上一个特有的序号...排序的时候只要按照编号排序.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逼哥很疯狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值