001    /**
002     * 
003     */
004    package jagafa.rule;
005    
006    import jagafa.object.Board;
007    import jagafa.object.Card;
008    import jagafa.object.Hand;
009    import jagafa.stats.CardTool;
010    
011    import java.util.Iterator;
012    
013    /**
014     * @author Besitzer
015     * 
016     */
017    public class UntenRules implements RuleSet {
018            private enum UntenHierarchy {
019                    C6, C7, C8, C9, C10, CJ, CQ, CK, CAs;
020            }
021    
022            public Card getHigherCard(Card c1, Card c2) {
023                    Board dummy = new Board();
024                    if (this.getPower(c1, dummy) > this.getPower(c2, dummy)) {
025                            return c1;
026                    } else {
027                            return c2;
028                    }
029            }
030    
031            public int getPower(Card c, Board b) {
032                    int power = 0;
033    
034                    power = this.getValueRank(c, b);
035    
036                    power += 100 * this.getColorRank(c, b);
037    
038                    return power;
039            }
040    
041            public int getScore(Card c) {
042                    switch (UntenHierarchy.values()[c.getValue()]) {
043                    case C6:
044                            return 11;
045                    case C7:
046                            return 0;
047                    case C8:
048                            return 8;
049                    case C9:
050                            return 0;
051                    case C10:
052                            return 10;
053                    case CJ:
054                            return 2;
055                    case CQ:
056                            return 3;
057                    case CK:
058                            return 4;
059                    case CAs:
060                            return 0;
061                    }
062    
063                    return 0;
064            }
065    
066            public boolean isValid(Card cardToCheck, Hand hand, Board board) {
067                    if (cardToCheck==null){
068                            return false;
069                    }
070                    if (board.cardsPlayed() > 0) {
071                            Card firstCard = board.get(0);
072                            int firstColor = firstCard.getColor();
073    
074                            // Wenn keine Karten von der startFarbe auf der hand, dann egal
075                            // welche Karte gespielt wird
076                            if (CardTool.getAllOfColor(hand, firstColor).size() == 0) {
077                                    return true;
078                            } else {
079                                    // Wenn noch Karten von der startFarbe, dann muss Karte von der
080                                    // gleichen Farbe sein
081                                    if (cardToCheck.getColor() == (firstColor)) {
082                                            return true;
083                                    } else {
084                                            return false;
085                                    }
086                            }
087    
088                    }
089    
090                    return true;
091            }
092    
093            public int getValueRank(Card c, Board b) {
094                    for (UntenHierarchy o : UntenHierarchy.values()) {
095                            if (o.ordinal() == c.getValue()) {
096                                    return 8-o.ordinal();
097                            }
098                    }
099                    return -1;
100            }
101    
102            public int getColorRank(Card c, Board b) {
103                    if (b.cardsPlayed() > 0) {
104                            Card firstCard = b.get(0);
105                            int firstColor = firstCard.getColor();
106                            if (firstColor == c.getColor()) {
107                                    return 2;
108                            } else {
109                                    return 1;
110                            }
111                    }
112    
113                    return 2;
114            }
115    
116            public boolean compareHigher(Card c1, Board b) {
117                    int posc1 = getPower(c1, b);
118                    int highestOnBoard = 0;
119    
120                    Iterator<Card> boardIter = b.iterator();
121    
122                    while (boardIter.hasNext()) {
123                            Card nextC = boardIter.next();
124                            int posBoard = this.getPower(nextC, b);
125                            if (posBoard > highestOnBoard) {
126                                    highestOnBoard = posBoard;
127                            }
128                    }
129    
130                    if (posc1 >= highestOnBoard) {
131                            return true;
132                    }
133                    return false;
134    
135            }
136    
137            /*
138             * (non-Javadoc)
139             * 
140             * @see jass.rule.Rules#getName()
141             */
142            public String getName() {
143                    // TODO Auto-generated method stub
144                    return "Unten";
145            }
146            
147            /* (non-Javadoc)
148             * @see jass.rule.Rules#specialColor()
149             */
150            public int specialColor() {
151                    // TODO Auto-generated method stub
152                    return -1;
153            }
154            
155            public int hashCode()
156            {
157                    int sum = 0;
158                    char carray[] = this.getName().toCharArray();
159                    for (int i = 0;i<carray.length;i++) {
160                            sum += (int) carray[i];
161                    }
162                    
163                    return sum;
164            }
165    
166            public void updateAfterTurn() {
167                    // TODO Auto-generated method stub
168                    
169            }
170    }