需求
三人斗地主 集合完成
编写一个自动发牌程序,模拟三人斗地主的摸牌场景。首先要给出提示,谁首先开始摸牌,并且摸牌要和现实摸牌一样,三人循环摸牌,最后还要剩余三张底牌,同时给出地主牌,摸到地主牌的玩家拥有三张底牌。三张底牌三人都可以看到。当三张底牌派发给地主后提示玩家摸牌结束
实现思路:
(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]]
浙公网安备 33010602011771号