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 ObenRules implements RuleSet {
018 private enum ObenHierarchy {
019 CAs, CK, CQ, CJ, C10, C9, C8, C7, C6;
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 (ObenHierarchy.values()[c.getValue()]) {
043 case C6:
044 return 0;
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 11;
061 }
062
063 return 0;
064 }
065
066 public boolean isValid(Card cardToCheck, Hand hand, Board board) {
067 //System.out.println(cardToCheck);
068 if (board.get(0) != null) {
069 Card firstCard = board.get(0);
070 int firstColor = firstCard.getColor();
071
072 // Wenn keine Karten von der startFarbe auf der hand, dann egal
073 // welche Karte gespielt wird
074 if (CardTool.getAllOfColor(hand, firstColor).size() == 0) {
075 return true;
076 } else {
077 // Wenn noch Karten von der startFarbe, dann muss Karte von der
078 // gleichen Farbe sein
079 if (cardToCheck.getColor() == (firstColor)) {
080 return true;
081 } else {
082 return false;
083 }
084 }
085
086 }
087
088 return true;
089 }
090
091
092 public int getValueRank(Card c, Board b) {
093
094
095 for (ObenHierarchy o : ObenHierarchy.values()) {
096 if (o.ordinal() == c.getValue()) {
097 return o.ordinal();
098 }
099 }
100 return -1;
101 }
102
103
104 public int getColorRank(Card c, Board b) {
105 if (b.cardsPlayed() > 0) {
106 Card firstCard = b.get(0);
107 int firstColor = firstCard.getColor();
108 if (firstColor == c.getColor()) {
109 return 2;
110 } else {
111 return 1;
112 }
113 }
114
115 return 2;
116 }
117
118
119 public boolean compareHigher(Card c1, Board b) {
120 int posc1 = getPower(c1, b);
121 int highestOnBoard = 0;
122
123 Iterator<Card> boardIter = b.iterator();
124
125 while (boardIter.hasNext()) {
126 Card nextC = boardIter.next();
127 int posBoard = this.getPower(nextC, b);
128 if (posBoard > highestOnBoard) {
129 highestOnBoard = posBoard;
130 }
131 }
132
133 if (posc1 >= highestOnBoard) {
134 return true;
135 }
136 return false;
137
138 }
139
140 /* (non-Javadoc)
141 * @see jass.rule.Rules#getName()
142 */
143 public String getName() {
144 // TODO Auto-generated method stub
145 return "Oben";
146 }
147
148 /* (non-Javadoc)
149 * @see jass.rule.Rules#specialColor()
150 */
151 public int specialColor() {
152 // TODO Auto-generated method stub
153 return -1;
154 }
155
156 public int hashCode()
157 {
158 int sum = 0;
159 char carray[] = this.getName().toCharArray();
160 for (int i = 0;i<carray.length;i++) {
161 sum += (int) carray[i];
162 }
163
164 return sum;
165 }
166
167 public void updateAfterTurn() {
168 // TODO Auto-generated method stub
169
170 }
171 }