`
jxqc_job
  • 浏览: 529 次
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
holdpuke_7 holdpuke_7
包:com.youth.game.util
1. CardUtils.java
package com.youth.game.util;

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

import com.youth.game.base.Card;
import com.youth.game.base.CardSuit;
import com.youth.game.base.CardType;
import com.youth.game.base.CountCard;
import com.youth.game.exception.CardFormatException;
import com.youth.game.exception.CardNumberException;

/**
 * 处理纸牌的工具类
 * @author hadoop
 *
 */

public class CardUtils {

	private static final CardUtils cardUtils;
	static{
		cardUtils = new CardUtils();
	}
	private CardUtils() {
	}

	public static CardUtils newInstance(){
		return cardUtils;
	};
	
	/**
	 * 将一个list中的五张牌 转换成一个字符串 用空格分开
	 * @return
	 * @throws CardNumberException 
	 */
	public static String cardsToString(List<Card> cards) throws CardNumberException{
		validateList(cards, 5);
		
		
		
		return null;
	}
	
	public CardType getCardType(List<Card> cards) throws CardNumberException{
		validateList(cards, 5);
		
		
		return null;
	}
	/**
	 * 统计牌出现的次数
	 * @param cards
	 * @return
	 * @throws CardNumberException
	 */
	public static  List<CountCard> countCard(List<Card> cards) {
		Map<Integer, List<Card>> map = new HashMap<Integer, List<Card>>();
		for (Card card : cards) {
			int val = card.getValueIndex();
			if (map.get(val)!=null) {
				map.get(val).add(card);
			}else {
				List<Card> list = new ArrayList<Card>();
				list.add(card);
				map.put(val, list);   
			}
		}
		List<CountCard> countCard = new ArrayList<CountCard>();
		for (Integer val : map.keySet()) {
			CountCard cardTemp = new CountCard(map.get(val));
			countCard.add(cardTemp);
		}
		
		return countCard;
	}
	
	/**
	 * 验证输入的牌的数量是否正确
	 * @param cards  输入的牌的集合
	 * @param number 正确情况下 牌的数量
	 * @throws CardNumberException
	 */
	private static void validateList(List<Card> cards,int number) throws CardNumberException{
		if (cards==null||cards.size()!=number) {
			throw new CardNumberException("纸牌的数量有错!");
		}
	};
	
	/**
	 * 判断是否为同花
	 * @param list
	 * @return
	 */
	public static boolean isFlush(List<Card> list){
		CardSuit suit = null;
		for (Card card : list) {
			if (suit==null) {
				suit = card.getCardSuit();
			}else if(!suit.equals(card.getCardIndex())) {
				return false;
			}
		}
		return true;
	}
	/**
	 * 判断是否为顺子
	 * @param list
	 * @return
	 */
	public static boolean isStraight(List<Card> list){
		Collections.sort(list);
		//将牌的最大值和最小值相减的绝对值 如果结果等于 集合的长度减一 那么就为顺子
		int size = list.size();
		int minVal = list.get(0).getValueIndex();
		int maxVal = list.get(size-1).getValueIndex();
		
		
		if (Math.abs(maxVal-minVal)==size-1) {
			return true;
		}else if (minVal==0&& maxVal==12) {
			//注意 此处处理 A 2 3 4 5 的情况 
			maxVal = list.get(size-2).getValueIndex();
			if(Math.abs(maxVal-minVal)==size-2){
				return true;
			}
		} 
		return false;
	}
	
	
	public static List<Card> string2Cards(String cards) throws CardFormatException{
		String[] str = cards.trim().split(" ");
		List<Card> cardList = new ArrayList<Card>();
		for (String string : str) {
			cardList.add(new Card(string));
		}
		return cardList;
	}
}

Global site tag (gtag.js) - Google Analytics