004 關於對子優先排序的修改

    通過長達半個小時的抉擇,我終於下了一個很讓人心痛的決定,重構了對子優先排序類,先列出最新的代碼。java

/**
 * <p>Title: PairPrecedenceSort.java</p>
 * <p>Description:炸彈三個對子優先排序 </p>
 * <p>Copyright: Copyright (c) 2007</p>
 * @author Tunie 
 * @date 2014年9月15日
 * @version 1.0
 */
public class PairPrecedenceSort implements ICardGroupSort {

	public void sort(List<Card> list) {
		//從大到小排序
		CardGroup cardGroup = new CardGroup();
		cardGroup.addAll(list);
		cardGroup.doSort(CardGroupSortType.DECREASE);
		//優化算法
		if(cardGroup.size() < 3 ) return;
		// 從列表中取出對子,三個及炸彈牌形
		List<CardGroup> bombCardGroups = new ArrayList<CardGroup>();
		List<CardGroup> threeCardGroups = new ArrayList<CardGroup>();
		List<CardGroup> pairCardGroups = new ArrayList<CardGroup>();
		int index = 0;
		if (cardGroup.getCardList().get(index).isBigKing() && cardGroup.getCardList().get(index + 1).isSmallKing()) {
			bombCardGroups.add(cardGroup.removeRange(0, 2));
		}
		while(index < cardGroup.size() - 1) {
			if(cardGroup.subCardGroup(index, index + 2).isSame()) {
				if((index + 3 <= cardGroup.size()) && cardGroup.subCardGroup(index, index + 3).isSame()) {
					if((index + 4 <= cardGroup.size()) && cardGroup.subCardGroup(index, index + 4).isSame()) {
						bombCardGroups.add(cardGroup.removeRange(index, index + 4));
						continue;
					}
					threeCardGroups.add(cardGroup.removeRange(index, index + 3));
					continue;
				}
				pairCardGroups.add(cardGroup.removeRange(index, index + 2));
				continue;
			} 
			++index;
		}
		// 對牌形大小進行比較,與以前的列表合併
		List<Card> tempList = new ArrayList<Card>();
		for(int i = 0 ; i < bombCardGroups.size() ; i++) {
			tempList.addAll(bombCardGroups.get(i).getCardList());
		}
		for(int i = 0 ; i < threeCardGroups.size() ; i++) {
			tempList.addAll(threeCardGroups.get(i).getCardList());
		}
		for(int i = 0 ; i < pairCardGroups.size() ; i++) {
			tempList.addAll(pairCardGroups.get(i).getCardList());
		}
		if(!tempList.isEmpty()) {
			cardGroup.getCardList().addAll(0, tempList);
			list.clear();
			list.addAll(cardGroup.getCardList());
		}
	}

}

呵呵,主要修改就是將對子優先,改了炸彈三個對子優先排序,使用這種排序以後,炸彈永遠在三個對子及單牌以前,同理,就不囉嗦了。算法

相關文章
相關標籤/搜索