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    }