模拟扑克牌

PokerCard

/**
 * 扑克
 *  花色:♠ ♣ ♦ ♥
 *  牌号:A 2 3 4 5 6 7 8 9 J Q K
 *  大王,小王
 */
public class PokerCard {
    private String color;//花色
    private String cardNum;//牌号
    private int rank;//

    public PokerCard(String color, String cardNum, int rank) {
        this.color = color;
        this.cardNum = cardNum;
        this.rank = rank;
    }

    @Override
    public String toString() {
        return (color==null?"":color)+""+cardNum+"["+rank+"]";
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getCardNum() {
        return cardNum;
    }

    public void setCardNum(String cardNum) {
        this.cardNum = cardNum;
    }

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }
}

Poker

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

/**
 * 扑克
 *  花色:♠ ♣ ♦ ♥
 *  牌号:A 2 3 4 5 6 7 8 9 J Q K
 *  大王,小王
 */
public class Poker {
    //一副牌
    private List<PokerCard> pokerList;
    public List<PokerCard> getPokerList() {
        return pokerList;
    }
    public void setPokerList(List<PokerCard> pokerList) {
        this.pokerList = pokerList;
    }

    //无参构造。初始化一副牌
    public Poker() {
        String[]colors={"♠","♣","♦","♥"};
        pokerList =new ArrayList<>();
        //接下来生成牌
        // 大小王
        PokerCard pc1=new PokerCard("", "大王",1);
        pokerList.add(pc1);
        PokerCard pc2=new PokerCard("", "小王",2);
        pokerList.add(pc2);

        //2牌的四种花色
        for (int i = 0 ; i < colors.length; i++) {//四种花色
            PokerCard pc=new PokerCard(colors[i], "2",3);
            pokerList.add(pc);
        }

        //A牌的四种花色
        for (int i = 0 ; i < colors.length; i++) {//四种花色
            PokerCard pc=new PokerCard(colors[i], "A",4);
            pokerList.add(pc);
        }
        //JQK牌的四种花色
        for (int i = 0 ; i < colors.length; i++) {//四种花色
            PokerCard pc=new PokerCard(colors[i], "K",5);
            pokerList.add(pc);
        }
        for (int i = 0 ; i < colors.length; i++) {//四种花色
            PokerCard pc=new PokerCard(colors[i], "Q",6);
            pokerList.add(pc);
        }
        for (int i = 0 ; i < colors.length; i++) {//四种花色
            PokerCard pc=new PokerCard(colors[i], "J",7);
            pokerList.add(pc);
        }
        /**
         * 3-10的牌
         * 3牌3  15
         * 4牌4  14
         * 5牌5  13
         * 6牌6  12
         * 7牌7  11
         * 8牌8  10
         * 9牌9  9
         * 10牌10    8
         */
        //3-10的牌
        for (int i = 3,i2=15; i <=10 ; i++,i2--) {
            //2-10牌的四种花色
            for (int j = 0; j < colors.length; j++) {
                PokerCard pc=new PokerCard(colors[j], i+"",i2);
                pokerList.add(pc);
            }
        }
    }

    //洗牌
    public void shuffle(){
        System.out.println("-->开始洗牌--");
        Collections.shuffle(this.pokerList);
        System.out.println("-->洗牌中--");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("-->洗牌结束...");
    }

    //发牌

    /**
     * 三个人斗地主
     *      三个人
     *      底牌三张
     */
    public void licensing(){
        //4个新的集合,3个是玩家的手牌,1个是底牌
        List<PokerCard> p1=new ArrayList<>();
        List<PokerCard> p2=new ArrayList<>();
        List<PokerCard> p3=new ArrayList<>();
        List<PokerCard> p0=new ArrayList<>();//底牌

        //遍历元素,发牌
        for (int i = 0; i < this.pokerList.size()-3; i++) {
            //如何让三个人依次拿牌 三个人,当做3进制:0 1 2
            if (i%3==0){
                p1.add(this.pokerList.get(i));
            }else if (i%3==1){
                p2.add(this.pokerList.get(i));
            }else if (i%3==2)
                p3.add(this.pokerList.get(i));
        }
        p0.add(this.pokerList.get(this.pokerList.size()-1));
        p0.add(this.pokerList.get(this.pokerList.size()-2));
        p0.add(this.pokerList.get(this.pokerList.size()-3));

        //显示牌
        sort(p1);
        System.out.print("玩家1手牌["+p1.size()+"张]:");
        for (int i = 0; i < p1.size(); i++) {
            System.out.print(p1.get(i)+" ");
        }
        System.out.println();
        sort(p2);
        System.out.print("玩家2手牌["+p2.size()+"张]:");
        for (int i = 0; i < p2.size(); i++) {
            System.out.print(p2.get(i)+" ");
        }
        System.out.println();
        sort(p3);
        System.out.print("玩家3手牌["+p3.size()+"张]:");
        for (int i = 0; i < p3.size(); i++) {
            System.out.print(p3.get(i)+" ");
        }
        System.out.println();
        //打印底牌
        sort(p0);
        System.out.print("底牌["+p0.size()+"张]:");
        for (int i = 0; i < p0.size(); i++) {
            System.out.print(p0.get(i)+" ");
        }
    }

    /**
     * 给牌顺序(大牌在左)
     */
    public void sort(List<PokerCard> list){
        //冒泡排序:相邻两个元素比较j vs j+1
        for (int i = 0; i < list.size()-1-i; i++) {
            for (int j = 0; j < list.size()-1-j; j++) {
                if (list.get(j).getRank()>list.get(j+1).getRank()){
                    PokerCard temp=list.get(j);
                    list.set(j, list.get(j+1));//把j+1位置的元素,设置到了j的位置
                    list.set(j+1, temp);
                }
            }
        }
    }
}

测试类

import java.util.Collections;
import java.util.Comparator;

public class Test {
    public static void main(String[] args) {
        Poker poker=new Poker();
        poker.shuffle();//洗牌
        System.out.println(poker.getPokerList());

        PokerCardComparator  pokerCardComparator= new PokerCardComparator();
        Collections.sort(poker.getPokerList(),pokerCardComparator);

        System.out.println(poker.getPokerList());
        poker.licensing();//发牌,并显示
    }
}
/**
 * 自定义比较器类
 */
class PokerCardComparator implements Comparator<PokerCard> {
    @Override
    public int compare(PokerCard o1, PokerCard o2) {
        int n = o1.getRank()-o2.getRank();
        return n;
    }
}

运行结果

-->开始洗牌--
-->洗牌中--
-->洗牌结束...
[♥10[8], ♠K[5], ♣Q[6], ♦4[14], ♠J[7], ♠Q[6], ♦2[3], ♦J[7], ♥Q[6], ♠6[12], ♠4[14], ♥4[14], ♦7[11], ♥A[4], 小王[2], ♥2[3], ♦Q[6], ♦8[10], ♥3[15], ♣7[11], ♠10[8], ♣4[14], ♣A[4], ♣9[9], ♥J[7], ♥K[5], ♦6[12], ♥8[10], ♦10[8], ♣10[8], ♠2[3], ♥5[13], ♣K[5], ♦K[5], ♣3[15], ♣J[7], ♣8[10], ♦9[9], ♦5[13], ♣5[13], ♠8[10], 大王[1], ♥6[12], ♠A[4], ♥7[11], ♦3[15], ♠7[11], ♠9[9], ♣2[3], ♠5[13], ♥9[9], ♦A[4], ♣6[12], ♠3[15]]
[大王[1], 小王[2], ♦2[3], ♥2[3], ♠2[3], ♣2[3], ♥A[4], ♣A[4], ♠A[4], ♦A[4], ♠K[5], ♥K[5], ♣K[5], ♦K[5], ♣Q[6], ♠Q[6], ♥Q[6], ♦Q[6], ♠J[7], ♦J[7], ♥J[7], ♣J[7], ♥10[8], ♠10[8], ♦10[8], ♣10[8], ♣9[9], ♦9[9], ♠9[9], ♥9[9], ♦8[10], ♥8[10], ♣8[10], ♠8[10], ♦7[11], ♣7[11], ♥7[11], ♠7[11], ♠6[12], ♦6[12], ♥6[12], ♣6[12], ♥5[13], ♦5[13], ♣5[13], ♠5[13], ♦4[14], ♠4[14], ♥4[14], ♣4[14], ♥3[15], ♣3[15], ♦3[15], ♠3[15]]
玩家1手牌[17张]:大王[1] ♥2[3] ♥A[4] ♦A[4] ♣K[5] ♠Q[6] ♠J[7] ♣J[7] ♦10[8] ♦9[9] ♦8[10] ♠8[10] ♥7[11] ♦6[12] ♥5[13] ♠5[13] ♥4[14] 
玩家2手牌[17张]:小王[2] ♠2[3] ♣A[4] ♠K[5] ♦K[5] ♥Q[6] ♦J[7] ♥10[8] ♣10[8] ♠9[9] ♥8[10] ♦7[11] ♠7[11] ♥6[12] ♦5[13] ♦4[14] ♣4[14] 
玩家3手牌[17张]:♦2[3] ♣2[3] ♠A[4] ♥K[5] ♣Q[6] ♦Q[6] ♥J[7] ♠10[8] ♣9[9] ♥9[9] ♣8[10] ♣7[11] ♠6[12] ♣6[12] ♣5[13] ♠4[14] ♥3[15] 
底牌[3张]:♠3[15] ♦3[15] ♣3[15] 
Process finished with exit code 0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值