001 /*
002 * Created on 24.02.2005 Filename: Hand.java
003 */
004 package jagafa.object;
005
006 import jagafa.rule.RuleSet;
007
008 import java.util.Iterator;
009
010
011
012 /**
013 * Hand is a CardList holding all the Cards in a Players hand
014 */
015 public class Hand extends CardList {
016
017 private static final int COLORS = 4;
018
019 /**
020 * Constructor: Create a new Hand
021 */
022 public Hand() {
023 super();
024
025 }
026 /**
027 * Constructor: Init the Hand with the Cards in the CardList
028 */
029 public Hand(CardList handCards) {
030
031 this.addAll(handCards);
032
033 }
034
035 /**
036 * Sort the Hand according to the RuleSet
037 * @param rules The relevant RuleSet
038 */
039 public void sort(RuleSet rules) {
040 if (rules==null) {
041
042 return;
043 }
044 CardList colorList[] = new CardList[COLORS];
045
046 for (int i = 0; i < COLORS; i++) {
047 colorList[i] = new CardList();
048 Iterator<Card> cardIter = this.iterator();
049 while (cardIter.hasNext()) {
050
051 Card card = cardIter.next();
052 if (card.getColor()==i) {
053 colorList[i].add(card);
054 }
055 }
056 }
057 this.clear();
058
059 for (int i = 0; i < COLORS; i++) {
060 this.addAll(sortByValue(colorList[i],rules));
061 }
062
063 }
064
065 /**
066 * Sort a CardList by value according to a RuleSet
067 * @param rules The relevant RuleSet
068 * @param cardList The CardList to sort
069 */
070 private CardList sortByValue(CardList cardList, RuleSet rules) {
071 Card cardArray[] = new Card[cardList.size()];
072 Board dummy = new Board();
073 for (int i = 0;i<cardList.size();i++) {
074 cardArray[i] = cardList.get(i);
075 }
076
077 for (int i = 0;i<cardList.size();i++) {
078 for (int j = 0;j<cardList.size();j++) {
079 int valueI = rules.getPower(cardArray[i],dummy);
080 int valueJ = rules.getPower(cardArray[j],dummy);
081
082 if (valueI>=valueJ && i<j) {
083 Card c = cardArray[i].copy();
084 cardArray[i] = cardArray[j].copy();
085 cardArray[j] = c.copy();
086 }
087 }
088
089 }
090
091 CardList newList = new CardList();
092 for (int i = 0;i<cardList.size();i++) {
093 newList.add(cardArray[i].copy());
094 }
095
096
097 return newList;
098 }
099
100 }