需求

三人斗地主  集合完成

     编写一个自动发牌程序,模拟三人斗地主的摸牌场景。首先要给出提示,谁首先开始摸牌,并且摸牌要和现实摸牌一样,三人循环摸牌,最后还要剩余三张底牌,同时给出地主牌,摸到地主牌的玩家拥有三张底牌。三张底牌三人都可以看到。当三张底牌派发给地主后提示玩家摸牌结束

实现思路:

 1)首先将一副牌的四种花色和对应的牌面值随机组合放进Set集合,因为Set集合是非重复集合,所以无需考虑重复的问题,另外,因为每个牌面值出现的次数只能是四次,所以,当该牌面值出现了四次以后,将该牌面删除。

​        (2)获取洗牌结束的牌组(用Set集合作为初始化数据集),随机额抽取三张牌,作为底牌,不对玩家展示,并从剩余的牌组中随机选取一个张牌,作为地主牌,对所有人展示但不移动其位置。

​        (3)顺序循环发牌,直到牌组没有牌为止,将底牌展示并发给地主。提示玩家发牌结束。

Card类

package org.poker;

public class Card implements Comparable<Card> {
    private String name;
    private int order;
    public Card(String name, int order) {
        super();
        this.name = name;
        this.order = order;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getOrder() {
        return order;
    }
    public void setOrder(int order) {
        this.order = order;
    }
    @Override
    public String toString() {
        return "Card [name=" + name + ", order=" + order + "]";
    }
    @Override
    public int compareTo(Card o) {
        if(this.order>o.order)
            return 1;
        else if(this.order<o.order)
            return -1;
        return 0;
    }
    
    
}

AgainstLandowner类

package org.poker;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class AgainstLandowner {

    public static void main(String[] args) {
        //TreeSet  造成数量减少问题   值随机问题
        int owner=(int)(1+Math.random()*(51-1+1));
        
        List<Integer> list=new ArrayList<>();
            while(list.size()!=3){
            int index=(int)(1+Math.random()*(54-1+1));
            if(!list.contains(index))//返回 true如果这个列表包含指定元素。 
                list.add(index);
            }
        
        System.out.println(owner);
        HashSet<Card> card = new HashSet<>();
        HashSet<Card> card4 = new HashSet<>();
        Card(card);
        Iterator<Card> iter = card.iterator();
        HashSet<Card> card1 = new HashSet<>();
        HashSet<Card> card2 = new HashSet<>();
        HashSet<Card> card3 = new HashSet<>();
        int count = 1;
        while (iter.hasNext()) {
            if(count==list.get(0)||count==list.get(1)||count==list.get(2)) {
            card4.add(iter.next());
            iter.remove();
            }
            else
                iter.next();
            count++;
        }
        iter=card.iterator();//初始化 很关键 迭代   每次迭代 停止后如果不初始化  下次迭代就会从你上次停止的地方开始
        int count1=1;
        while (iter.hasNext()) {
            if(count1==owner)
            {
                System.out.println("地主牌是第"+owner+"张:"+iter.next()+"谁摸到谁就是地主了!");
                break;
            }else
                iter.next();
            count1++;
        }
        iter=card.iterator();
        int index=1;
        while(iter.hasNext()) 
        {
            if(index==owner)
                System.out.println("1号玩家是地主");
            card1.add(iter.next());
            index++;
            if(index==owner)
                System.out.println("2号玩家是地主");
            card2.add(iter.next());
            index++;
            if(index==owner)
                System.out.println("3号玩家是地主");
            card3.add(iter.next());
            index++;
        }
        System.out.println("一号玩家手牌"+card1);
        System.out.println("二号玩家手牌"+card2);
        System.out.println("三号玩家手牌"+card3);
        
        System.out.println("地主底牌"+card4);
    }

    public static void Card(Set<Card> card) {
        card.add(new Card("红♥A", 1));
        card.add(new Card("黑♥A", 1));
        card.add(new Card("方♦A", 1));
        card.add(new Card("梅♣A", 1));
        card.add(new Card("红♥2", 2));
        card.add(new Card("黑♥2", 2));
        card.add(new Card("方♦2", 2));
        card.add(new Card("梅♣2", 2));
        card.add(new Card("红♥3", 3));
        card.add(new Card("黑♥3", 3));
        card.add(new Card("方♦3", 3));
        card.add(new Card("梅♣3", 3));
        card.add(new Card("红♥4", 4));
        card.add(new Card("黑♥4", 4));
        card.add(new Card("方♦4", 4));
        card.add(new Card("梅♣4", 4));
        card.add(new Card("红♥5", 5));
        card.add(new Card("黑♥5", 5));
        card.add(new Card("方♦5", 5));
        card.add(new Card("梅♣5", 5));
        card.add(new Card("红♥6", 6));
        card.add(new Card("黑♥6", 6));
        card.add(new Card("方♦6", 6));
        card.add(new Card("梅♣6", 6));
        card.add(new Card("红♥7", 7));
        card.add(new Card("黑♥7", 7));
        card.add(new Card("方♦7", 7));
        card.add(new Card("梅♣7", 7));
        card.add(new Card("红♥8", 8));
        card.add(new Card("黑♥8", 8));
        card.add(new Card("方♦8", 8));
        card.add(new Card("梅♣8", 8));
        card.add(new Card("红♥9", 9));
        card.add(new Card("黑♥9", 9));
        card.add(new Card("方♦9", 9));
        card.add(new Card("梅♣9", 9));
        card.add(new Card("红♥10", 10));
        card.add(new Card("黑♥10", 10));
        card.add(new Card("方♦10", 10));
        card.add(new Card("梅♣10", 10));
        card.add(new Card("红♥J", 11));
        card.add(new Card("黑♥J", 11));
        card.add(new Card("方♦J", 11));
        card.add(new Card("梅♣J", 11));
        card.add(new Card("红♥Q", 12));
        card.add(new Card("黑♥Q", 12));
        card.add(new Card("方♦Q", 12));
        card.add(new Card("梅♣Q", 12));
        card.add(new Card("红♥K", 13));
        card.add(new Card("黑♥K", 13));
        card.add(new Card("方♦K", 13));
        card.add(new Card("梅♣K", 13));
        card.add(new Card("大王🃏", 14));
        card.add(new Card("小王🃏", 14));
        // System.out.println(card);
    }
}

输出结果

30
地主牌是第30张:Card [name=梅♣4, order=4]谁摸到谁就是地主了!
3号玩家是地主
一号玩家手牌[Card [name=黑♥10, order=10], Card [name=大王🃏, order=14], Card [name=黑♥9, order=9], Card [name=黑♥A, order=1], Card [name=方♦K, order=13], Card [name=黑♥3, order=3], Card [name=黑♥K, order=13], Card [name=红♥Q, order=12], Card [name=红♥4, order=4], Card [name=红♥10, order=10], Card [name=黑♥5, order=5], Card [name=梅♣J, order=11], Card [name=方♦6, order=6], Card [name=红♥2, order=2], Card [name=梅♣Q, order=12], Card [name=梅♣5, order=5], Card [name=方♦4, order=4]]
二号玩家手牌[Card [name=方♦7, order=7], Card [name=梅♣2, order=2], Card [name=黑♥4, order=4], Card [name=方♦10, order=10], Card [name=梅♣K, order=13], Card [name=梅♣9, order=9], Card [name=方♦5, order=5], Card [name=方♦3, order=3], Card [name=黑♥2, order=2], Card [name=梅♣7, order=7], Card [name=红♥5, order=5], Card [name=方♦J, order=11], Card [name=方♦2, order=2], Card [name=黑♥Q, order=12], Card [name=方♦Q, order=12], Card [name=梅♣8, order=8], Card [name=方♦9, order=9]]
三号玩家手牌[Card [name=黑♥8, order=8], Card [name=红♥A, order=1], Card [name=黑♥7, order=7], Card [name=红♥7, order=7], Card [name=梅♣4, order=4], Card [name=梅♣A, order=1], Card [name=黑♥J, order=11], Card [name=红♥6, order=6], Card [name=梅♣6, order=6], Card [name=梅♣3, order=3], Card [name=方♦8, order=8], Card [name=红♥J, order=11], Card [name=红♥3, order=3], Card [name=红♥9, order=9], Card [name=方♦A, order=1], Card [name=黑♥6, order=6], Card [name=梅♣10, order=10]]
地主底牌[Card [name=红♥K, order=13], Card [name=小王🃏, order=14], Card [name=红♥8, order=8]]