Java 实现斗地主的洗牌 发牌 理牌功能

建立一个扑克类

给他定义花色和大小

public class Poke implements Comparable<Poke> {
    private String colors;
    private Integer numbers;
    private String colornum;

    public String getColornum() {
        String num = String.valueOf(this.numbers) ;
        if(this.numbers==11){
            num="J";
        }
        if(this.numbers==12){
            num="Q";
        }
        if(this.numbers==13){
            num="K";
        }
        if(this.numbers==14){
            num="A";
        }
        if(this.numbers==15){
            num="2";
        }
        if(this.numbers==16){
            num="小王";
        }
        if(this.numbers==17){
            num="大王";
        }


        return this.colors+num;
    }

    public void setColors(String colors) {
        this.colors = colors;
    }

    public void setNumbers(Integer numbers) {
        this.numbers = numbers;
    }

    public String getColors() {
        return colors;
    }

    public Integer getNumbers() {
        return numbers;
    }

    @Override
    public int compareTo(Poke o) {
        return numbers-o.numbers;
    }
}

创建牌大小和牌的花色

    public ArrayList<Poke> newPokeList(){
        ArrayList<Poke> pokes=new ArrayList<Poke>();
        List<String> colors=new ArrayList<>();
        List<Integer> numbers=new ArrayList<>();
        colors.add("♥");
        colors.add("♠");
        colors.add("♦");
        colors.add("♥");
        for (int i = 3; i <= 15; i++) {
            numbers.add(i);
        }

        for(String c:colors){
            for(int n:numbers){
                Poke poke = new Poke();
                poke.setColors(c);
                poke.setNumbers(n);
                pokes.add(poke);
            }
        }
        Poke poke = new Poke();
        poke.setColors("☀");
        poke.setNumbers(16);
        pokes.add(poke);
        Poke poke2 = new Poke();
        poke2.setColors("☾");
        poke2.setNumbers(17);
        pokes.add(poke2);
        return pokes;
    }

使用Collections带的shuffle洗牌 

Collections.shuffle(pokes);

然后进行分牌

    public ArrayList<ArrayList<Poke>> fenpai(ArrayList<Poke> pokes){
        ArrayList<ArrayList<Poke>> fenpailist = new ArrayList<>();
        ArrayList<Poke> ddz1=new ArrayList<>();
        ArrayList<Poke> ddz2=new ArrayList<>();
        ArrayList<Poke> ddz3=new ArrayList<>();
        ArrayList<Poke> dp=new ArrayList<>();
        for (int i = 0; i < pokes.size(); i++) {
            Poke pai=pokes.get(i);
            if(i>=51){
                dp.add(pai);
            }else {
                if(i%3 == 0){
                    ddz1.add(pai);
                }else if(i%3 == 1){
                    ddz2.add(pai);
                }else {
                    ddz3.add(pai);
                }
            }
        }
        //理牌
        Collections.sort(ddz1);
        Collections.sort(ddz2);
        Collections.sort(ddz3);
        Collections.sort(dp);
        fenpailist.add(ddz1);
        fenpailist.add(ddz2);
        fenpailist.add(ddz3);
        fenpailist.add(dp);
        return fenpailist;
    }

顺带了下理牌

顺带一提这个类的排序是因为类继承了Comparable

不会的可以去https://blog.csdn.net/qq_37937537/article/details/80445731学一下

输出

完整代码块:

poke类

public class Poke implements Comparable<Poke> {
    private String colors;
    private Integer numbers;
    private String colornum;

    public String getColornum() {
        String num = String.valueOf(this.numbers) ;
        if(this.numbers==11){
            num="J";
        }
        if(this.numbers==12){
            num="Q";
        }
        if(this.numbers==13){
            num="K";
        }
        if(this.numbers==14){
            num="A";
        }
        if(this.numbers==15){
            num="2";
        }
        if(this.numbers==16){
            num="小王";
        }
        if(this.numbers==17){
            num="大王";
        }


        return this.colors+num;
    }

    public void setColors(String colors) {
        this.colors = colors;
    }

    public void setNumbers(Integer numbers) {
        this.numbers = numbers;
    }

    public String getColors() {
        return colors;
    }

    public Integer getNumbers() {
        return numbers;
    }

    @Override
    public int compareTo(Poke o) {
        return numbers-o.numbers;
    }
}

DouDiZhu类

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

public class DouDiZhu {
    public static void main(String[] args) {
        DouDiZhu douDiZhu = new DouDiZhu();
       ArrayList<Poke> pokes=new ArrayList<Poke>();
        pokes = douDiZhu.newPokeList();//新建一个扑克list
        douDiZhu.printPokefromList(pokes);
        //洗牌
        Collections.shuffle(pokes);
        douDiZhu.printPokefromList(pokes);
        //分牌
        ArrayList<ArrayList<Poke>> fenpailist =douDiZhu.fenpai(pokes);
        douDiZhu.printPokefromList(fenpailist.get(0));
        douDiZhu.printPokefromList(fenpailist.get(1));
        douDiZhu.printPokefromList(fenpailist.get(2));
        douDiZhu.printPokefromList(fenpailist.get(3));
    }
    public void printPokefromList(ArrayList<Poke> pokelist){
        for(Poke i :pokelist){
            System.out.print(i.getColornum());
        }
        System.out.println("\n");
    }
    public ArrayList<Poke> newPokeList(){
        ArrayList<Poke> pokes=new ArrayList<Poke>();
        List<String> colors=new ArrayList<>();
        List<Integer> numbers=new ArrayList<>();
        colors.add("♥");
        colors.add("♠");
        colors.add("♦");
        colors.add("♥");
        for (int i = 3; i <= 15; i++) {
            numbers.add(i);
        }

        for(String c:colors){
            for(int n:numbers){
                Poke poke = new Poke();
                poke.setColors(c);
                poke.setNumbers(n);
                pokes.add(poke);
            }
        }
        Poke poke = new Poke();
        poke.setColors("☀");
        poke.setNumbers(16);
        pokes.add(poke);
        Poke poke2 = new Poke();
        poke2.setColors("☾");
        poke2.setNumbers(17);
        pokes.add(poke2);
        return pokes;
    }
    public ArrayList<ArrayList<Poke>> fenpai(ArrayList<Poke> pokes){
        ArrayList<ArrayList<Poke>> fenpailist = new ArrayList<>();
        ArrayList<Poke> ddz1=new ArrayList<>();
        ArrayList<Poke> ddz2=new ArrayList<>();
        ArrayList<Poke> ddz3=new ArrayList<>();
        ArrayList<Poke> dp=new ArrayList<>();
        for (int i = 0; i < pokes.size(); i++) {
            Poke pai=pokes.get(i);
            if(i>=51){
                dp.add(pai);
            }else {
                if(i%3 == 0){
                    ddz1.add(pai);
                }else if(i%3 == 1){
                    ddz2.add(pai);
                }else {
                    ddz3.add(pai);
                }
            }
        }
        //理牌
        Collections.sort(ddz1);
        Collections.sort(ddz2);
        Collections.sort(ddz3);
        Collections.sort(dp);
        fenpailist.add(ddz1);
        fenpailist.add(ddz2);
        fenpailist.add(ddz3);
        fenpailist.add(dp);
        return fenpailist;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值