/**
* Copyright (C) 2017 Jan Schäfer (jansch@users.sourceforge.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jskat.util;
import java.util.Arrays;
import java.util.List;
/**
* Contains all ranks.
*/
public enum Rank {
/**
* Seven
*/
SEVEN {
@Override
public String shortString() {
return "7";
}
@Override
public String longString() {
return "Seven";
}
@Override
public int getSuitGrandOrder() {
return 0;
}
@Override
public int getNullOrder() {
return 0;
}
@Override
public int getRamschOrder() {
return 0;
}
@Override
public int getPoints() {
return 0;
}
},
/**
* Eight
*/
EIGHT {
@Override
public String shortString() {
return "8";
}
@Override
public String longString() {
return "Eight";
}
@Override
public int getSuitGrandOrder() {
return 1;
}
@Override
public int getNullOrder() {
return 1;
}
@Override
public int getRamschOrder() {
return 1;
}
@Override
public int getPoints() {
return 0;
}
},
/**
* Nine
*/
NINE {
@Override
public String shortString() {
return "9";
}
@Override
public String longString() {
return "Nine";
}
@Override
public int getSuitGrandOrder() {
return 2;
}
@Override
public int getNullOrder() {
return 2;
}
@Override
public int getRamschOrder() {
return 2;
}
@Override
public int getPoints() {
return 0;
}
},
/**
* Queen or Ober
*/
QUEEN {
@Override
public String shortString() {
return "Q";
}
@Override
public String longString() {
return "Queen";
}
@Override
public int getSuitGrandOrder() {
return 3;
}
@Override
public int getNullOrder() {
return 5;
}
@Override
public int getRamschOrder() {
return 3;
}
@Override
public int getPoints() {
return 3;
}
},
/**
* King or König
*/
KING {
@Override
public String shortString() {
return "K";
}
@Override
public String longString() {
return "King";
}
@Override
public int getSuitGrandOrder() {
return 4;
}
@Override
public int getNullOrder() {
return 6;
}
@Override
public int getRamschOrder() {
return 4;
}
@Override
public int getPoints() {
return 4;
}
},
/**
* Ten
*/
TEN {
@Override
public String shortString() {
return "T";
}
@Override
public String longString() {
return "Ten";
}
@Override
public int getSuitGrandOrder() {
return 5;
}
@Override
public int getNullOrder() {
return 3;
}
@Override
public int getRamschOrder() {
return 5;
}
@Override
public int getPoints() {
return 10;
}
},
/**
* Ace or Daus
*/
ACE {
@Override
public String shortString() {
return "A";
}
@Override
public String longString() {
return "Ace";
}
@Override
public int getSuitGrandOrder() {
return 6;
}
@Override
public int getNullOrder() {
return 7;
}
@Override
public int getRamschOrder() {
return 6;
}
@Override
public int getPoints() {
return 11;
}
},
/**
* Jack or Unter
*/
JACK {
@Override
public String shortString() {
return "J";
}
@Override
public String longString() {
return "Jack";
}
@Override
public int getSuitGrandOrder() {
return 7;
}
@Override
public int getNullOrder() {
return 4;
}
@Override
public int getRamschOrder() {
return 7;
}
@Override
public int getPoints() {
return 2;
}
};
/**
* Gets a short string representation of the constant.
*
* @return Short string representation of the constant
*/
public abstract String shortString();
/**
* Gets a long string representation of the constant.
*
* @return Long string representation of the constant
*/
public abstract String longString();
/**
* Gets the order of the constant in suit and grand games.
*
* @return Order in suit and grand games
*/
public abstract int getSuitGrandOrder();
/**
* Gets the order of the constant in null games.
*
* @return Order in null games
*/
public abstract int getNullOrder();
/**
* Gets the order of the constant in ramsch games.
*
* @return Order in ramsch games
*/
public abstract int getRamschOrder();
/**
* Gets the points of the card for game value calculation.
*
* @return Points of the card
*/
public abstract int getPoints();
/**
* Gets the rank of a card given as string.
*
* @param cardAsString
* Card as string
* @return Rank of card
*/
public static Rank getRankFromString(String cardAsString) {
Rank rank = null;
if (cardAsString.length() == 2) {
// parse only, iff the string is two characters long
if (cardAsString.endsWith("A")) { //$NON-NLS-1$
rank = ACE;
} else if (cardAsString.endsWith("T")) { //$NON-NLS-1$
rank = TEN;
} else if (cardAsString.endsWith("K")) { //$NON-NLS-1$
rank = KING;
} else if (cardAsString.endsWith("Q")) { //$NON-NLS-1$
rank = QUEEN;
} else if (cardAsString.endsWith("J")) { //$NON-NLS-1$
rank = JACK;
} else if (cardAsString.endsWith("9")) { //$NON-NLS-1$
rank = NINE;
} else if (cardAsString.endsWith("8")) { //$NON-NLS-1$
rank = EIGHT;
} else if (cardAsString.endsWith("7")) { //$NON-NLS-1$
rank = SEVEN;
}
}
return rank;
}
/**
* Builds an array of the ranks (e.g. to compute the multipliers)
*
* @return an array containing the ranks without the jack, starting with
* ace, ending with 7
*/
public static List<Rank> getRankList() {
return Arrays.asList(Rank.ACE, Rank.TEN, Rank.KING, Rank.QUEEN,
Rank.NINE, Rank.EIGHT, Rank.SEVEN);
}
/**
* converts the rank of a card to a specific int value (7=1, 8=2, 9=4, ...
* A=64, J=128)
*
* @return an int representation of the card's rank
*/
@Deprecated
public int toBinaryFlag() {
return (int) Math.pow(2, this.ordinal());
}
public int toNullBinaryFlag() {
return (int) Math.pow(2, this.getNullOrder());
}
public int toSuitBinaryFlag() {
return (int) Math.pow(2, this.getSuitGrandOrder());
}
public int toGrandBinaryFlag() {
return toSuitBinaryFlag();
}
public int toRamschBinaryFlag() {
return (int) Math.pow(2, this.getRamschOrder());
}
}