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