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 }