通过java集合---------实现斗地主的发牌

在这里值模拟得到斗地主的洗牌,发牌,看牌的功能

先来个Card里来定义一张牌

public class Card {
	// 每一张牌都是由点数和花色组成的(除大小王外)
	private String color;
	private String point;

	public Card(String color, String point) {
		super();
		this.color = color;
		this.point = point;
	}

	@Override
	public String toString() {
		return color + point;
	}

	public String getColor() {
		return color;
	}

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

	public String getPoint() {
		return point;
	}

	public void setPoint(String point) {
		this.point = point;
	}
}

然后在来一个比较器,便于每个人在看牌的时候牌都是排好序的

import java.util.Comparator;

public class ListCompare implements Comparator<Card> {

	@Override
	public int compare(Card o1, Card o2) {
		// TODO Auto-generated method stub
		//先比较点数,点数如果比不出来,则比较花色
		if(o1.getPoint().equals(o2.getPoint())) {
		return getColors(o1)-getColors(o2);	
		}else {
			return getPoint(o1)-getPoint(o2);			
		}
	}
	
	
	//穿进去一张牌,取他点数对应的一个数字,方便排序
	public static int getPoint(Card o1) {
		int count=0;
		switch (o1.getPoint()) {
		case "J":
			count =11;
			break;
		case "Q":
			count =12;
			break;
		case "K":
			count =13;
			break;
		case "A":
			count =14;
			break;
		case "2":
			count =15;
			break;
		case "S":
			count =30;
			break;
		case "M":
			count =40;
			break;
		default:
			count=Integer.parseInt(o1.getPoint());
		}
		return count;
	}
	
	
	
	public int getColors(Card o1) {
		int count=0;
		switch (o1.getColor()) {
		case "♣":
			count=4;
			break;
		case "♥":
			count=3;
			break;
		case "♠":
			count=2;
			break;
		default:
			count=1;
			break;
		}
		return count;
	}

}

主函数和操作类

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 模拟斗地主 洗牌 发牌 看牌
 * 
 * @author lenovo
 *
 */
public class Test {

	String[] player = new String[3];// 存放玩家,一共三个人
	String[] color = { "♣", "♠", "♥", "♦" };// 定义花色
	// 定义一个数组用于存放底牌
	Card[] bottomCard = new Card[3];
	// 定义点数
	String[] point = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
	// 定义一个牌盒集合,存放所有的牌
	List<Card> cards = new ArrayList<Card>();
	// 定义一个map集合,用于存放每个玩家的牌
	Map<String, List<Card>> maps = new HashMap<String, List<Card>>();

	// 定义3个list集合存放每个玩家手中的牌
	List<Card> playerCard1 = new ArrayList<Card>();
	List<Card> playerCard2 = new ArrayList<Card>();
	List<Card> playerCard3 = new ArrayList<Card>();
	ListCompare l = new ListCompare();

	// 1.添加玩家
	public void addPlayer(String... names) {
		/**
		 * 本次只需要三个玩家,加入的玩家大于3则只取前三个,小于3则给添加一个电脑玩家
		 */
		// 给定的人数大于3个
		if (names.length >= player.length) {
			// 将names的前三个值赋给player数组
			for (int i = 0; i < player.length; i++) {
				player[i] = names[i];
			}
		} else {
			// 如果names里的内容少于3个,则给其添加电脑,达到3人
			for (int i = 0; i < names.length; i++) {
				player[i] = names[i];
			}
			// 此时play集合里的元素还没有满

			for (int i = names.length; i < player.length; i++) {
				player[i] = "电脑" + (int) (Math.random() * 10000);
			}

		}

	}

	// 2.洗牌
	public void mixCard() {
		// A:先将牌全部放到牌盒中,然后打乱顺序
		for (int i = 0; i < color.length; i++) {
			for (int j = 0; j < point.length; j++) {
				cards.add(new Card(color[i], point[j]));
			}
		}
		// 最后将大小王放进牌盒中
		cards.add(new Card("大王", "S"));
		cards.add(new Card("小王", "M"));

		// 利用collections里的方法,将集合里的顺序进行打乱
		Collections.shuffle(cards);

	}

	// 3.发牌
	public void sendCard() {
		// A:先发底牌
		bottomCard[0] = cards.get(cards.size() - 1);
		bottomCard[1] = cards.get(cards.size() - 2);
		bottomCard[2] = cards.get(cards.size() - 3);
		for (int i = 0; i < cards.size() - 3; i += 3) {
			playerCard1.add(cards.get(i));
			playerCard2.add(cards.get(i + 1));
			playerCard3.add(cards.get(i + 2));
		}
		Collections.sort(playerCard1, l);
		Collections.sort(playerCard2, l);
		Collections.sort(playerCard3, l);
		maps.put(player[0], playerCard1);
		maps.put(player[1], playerCard2);
		maps.put(player[2], playerCard3);
	}

	// 4.看牌
	public void showCard() {
		Set<String> ks = maps.keySet();
		for (String m : ks) {
			System.out.println(m + "---" + maps.get(m));
		}
		System.out.println("---------");
		System.out.println(
				"底牌\t" + bottomCard[0].toString() + "\t" + bottomCard[1].toString() + "\t" + bottomCard[2].toString());
	}

	public static void main(String[] args) {
		Test t = new Test();
		t.addPlayer("张三");
		t.mixCard();
		t.sendCard();
		t.showCard();

	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值