斗地主案例(java实现)

此为复习java基础集合的斗地主案例(最后有根据牌大小排序的代码)

  1. 组装扑克牌
  2. 54张扑克牌装入集合c
  3. 洗牌(Collections工具类中的shuffle方法,可以随机打乱集合中元素)
  4. 分发扑克牌给三个玩家和留三张作为底牌
package DouDiZhuDemo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<String>();
        String[] color = {"♥","♣","♠","◇"};
        String[] num = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        c.add("大王");
        c.add("小王");
        for(String s : color){
            for(String n : num){
                c.add(s+n);
            }
        }
        System.out.println(c);
        System.out.println(c.size());

        Collections.shuffle((List<?>) c);
        Collection<String> p1 = new ArrayList<>();
        Collection<String> p2 = new ArrayList<>();
        Collection<String> p3 = new ArrayList<>();
        Collection<String> reserve = new ArrayList<>();
        for (int i = 0; i < 54; i++) {
            if(i<=50){
                if(i % 3 == 0){
                    p1.add(((ArrayList<String>) c).get(i));
                }else if(i % 3 == 1){
                    p2.add(((ArrayList<String>) c).get(i));
                }else if(i %3 == 2){
                    p3.add(((ArrayList<String>) c).get(i));
                }
            }else{
                reserve.add(((ArrayList<String>) c).get(i));
            }
        }
        System.out.println("欧阳子遥:"+p1);
        System.out.println(p1.size());
        System.out.println("欧阳耀莹:"+p2);
        System.out.println(p2.size());
        System.out.println("胡歌:"+p3);
        System.out.println(p3.size());
        System.out.println("底牌:"+reserve);
        System.out.println(reserve.size());
    }
}

运行结果:

[大王, 小王,2, ♥A, ♥K, ♥Q, ♥J,10,9,8,7,6,5,4,3,2, ♣A, ♣K, ♣Q, ♣J,10,9,8,7,6,5,4,3,2, ♠A, ♠K, ♠Q, ♠J,10,9,8,7,6,5,4,3,2, ◇A, ◇K, ◇Q, ◇J,10,9,8,7,6,5,4,3]
54
欧阳子遥:[◇K,7,4,3,9,2,8,3, 小王,7,5,10,8,8,9, ♥A, ◇Q]
17
欧阳耀莹:[2,5,3, 大王,2,4,6, ♠K,7,4,4,10,9, ◇A, ◇J,10,10]
17
胡歌:[7,2,8, ♠Q,9,3, ♠J,5, ♥Q,6, ♥K, ♣K,5, ♣J, ♠A, ♥J,6]
17
底牌:[6, ♣Q, ♣A]
3

有排序的代码:
扑克牌花色大小和大小均已在数组中排好序
这个代码的核心思想是把判断牌的大小转移到判断其HashMap的key值,key越小,牌越大。

import java.util.*;
public class JiHeDemo {
    public static void main(String[] args) {
        HashMap<Integer,String> hm = new HashMap<Integer, String>();
        ArrayList<Integer> index = new ArrayList<>();
        String[] color = {"♠","♥","♣","◇"};
        String[] num = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        hm.put(0,"大王");
        index.add(0);
        hm.put(1,"小王");
        index.add(1);
        int count = 1;
        for(String n : num) {
            for (String s : color) {
                hm.put(++count, s + n);
                index.add(count);
            }
        }

//        Collections.shuffle(index);
//        System.out.println("打乱之后的随机排序"+index);
        ArrayList<Integer> p1 = new ArrayList<>();
        ArrayList<Integer> p2 = new ArrayList<>();
        ArrayList<Integer> p3 = new ArrayList<>();
        ArrayList<Integer> reserve = new ArrayList<>();
        for (int i = 0; i < 54; i++) {
            if(i<=50){
                if(i % 3 == 0){
                    p1.add(index.get(i));
                }else if(i % 3 == 1){
                    p2.add(index.get(i));
                }else if(i %3 == 2){
                    p3.add(index.get(i));
                }
            }else{
                reserve.add(index.get(i));
            }
        }
//        System.out.print(p1.size()+" ");//牌数是否正确
//        System.out.print(p2.size()+" ");
//        System.out.print(p3.size()+" ");
//        System.out.print(reserve.size());
//        System.out.println();
        Collections.sort(p1);
        Collections.sort(p2);
        Collections.sort(p3);
        Collections.sort(reserve);
//        System.out.println("p1  "+p1);验证排序是否正确
//        System.out.println("p2  "+p2);
//        System.out.println("p3  "+p3);
//        System.out.println("reserve  "+reserve);
        printPai("欧阳耀莹",hm,p1);
        printPai("欧阳子遥",hm,p2);
        printPai("胡歌",hm,p3);
        printPai("底牌",hm,reserve);
    }

    private static void printPai(String str,HashMap<Integer,String> map,ArrayList<Integer> list) {
        System.out.print(str+": ");
        for(Integer n : list){
            String s = map.get(n);
            System.out.print(n+" "+s+" ");
        }
        System.out.println();
    }
}

运行截图:
运行截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值