Create Card.java
Representation of a Card in Jass
This commit is contained in:
parent
5bbaa5b8b3
commit
89dc6ee958
200
jass/Card.java
Normal file
200
jass/Card.java
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
package ch.epfl.javass.jass;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static ch.epfl.javass.Preconditions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The representation of a {@link Card} by a {@link Color} and a {@link Rank}.
|
||||||
|
* @author Charles BEAUVILLE
|
||||||
|
* @author Celia HOUSSIAUX
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class Card {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link Card} object of a given {@link Rank} and a given {@link Color}.
|
||||||
|
* @param c the {@link Color} of the {@link Card} wanted
|
||||||
|
* @param r the {@link Rank} of the {@link Card} wanted
|
||||||
|
* @return an object {@link Card}, representing a {@link Card} with the given {@link Rank} and the given {@link Color}
|
||||||
|
*/
|
||||||
|
public static Card of(Color c, Rank r) {
|
||||||
|
return new Card(PackedCard.pack(c, r));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link Card} object from the packed version of a card.
|
||||||
|
* @param packed an int, the packed version of a card.
|
||||||
|
* @throws IllegalArgumentException if isValid(packed) is false.
|
||||||
|
* @return an object {@link Card}, representing the given packed version
|
||||||
|
*/
|
||||||
|
public static Card ofPacked(int packed) {
|
||||||
|
checkArgument(PackedCard.isValid(packed));
|
||||||
|
|
||||||
|
return new Card(packed);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final int packed;
|
||||||
|
|
||||||
|
private Card(int packed) {
|
||||||
|
this.packed = packed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An enumeration of the possible colors of a {@link Card}
|
||||||
|
* @author Charles BEAUVILLE
|
||||||
|
* @author Celia HOUSSIAUX
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum Color {
|
||||||
|
SPADE("\u2660"), HEART("\u2661"), DIAMOND("\u2662"), CLUB("\u2663");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* an int the total number of colors
|
||||||
|
*/
|
||||||
|
public static final int COUNT = 4;
|
||||||
|
/**
|
||||||
|
* a list containing all the {@link Color} values
|
||||||
|
*/
|
||||||
|
public static final List<Color> ALL = Collections.unmodifiableList(Arrays.asList(values()));
|
||||||
|
|
||||||
|
private final String symbole;
|
||||||
|
|
||||||
|
private Color(String symbole) {
|
||||||
|
this.symbole = symbole;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() { //redefinition of the Object class' toString method which gives us the card's color.
|
||||||
|
return symbole;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An enumeration of the possible ranks of a {@link Card}
|
||||||
|
* @author Charles BEAUVILLE
|
||||||
|
* @author Celia HOUSSIAUX
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum Rank {
|
||||||
|
|
||||||
|
SIX("6"),SEVEN("7"), EIGHT("8"), NINE("9"), TEN("10"), JACK("J"), QUEEN("Q"),KING("K"), ACE("A");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* an int the total number of ranks
|
||||||
|
*/
|
||||||
|
public static final int COUNT = 9;
|
||||||
|
/**
|
||||||
|
* a list containing all the {@link Rank} values
|
||||||
|
*/
|
||||||
|
public static final List<Rank> ALL = Collections.unmodifiableList(Arrays.asList(values()));
|
||||||
|
|
||||||
|
|
||||||
|
private final String rang;
|
||||||
|
|
||||||
|
private Rank(String rang) {
|
||||||
|
this.rang = rang;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gives the order of the {@link Rank} while the color is trump.
|
||||||
|
* @return an int the {@link Rank} index when the color is trump.
|
||||||
|
*/
|
||||||
|
public int trumpOrdinal() {
|
||||||
|
switch (this) {
|
||||||
|
case SIX:
|
||||||
|
return 0;
|
||||||
|
case SEVEN:
|
||||||
|
return 1;
|
||||||
|
case EIGHT:
|
||||||
|
return 2;
|
||||||
|
case NINE:
|
||||||
|
return 7;
|
||||||
|
case TEN:
|
||||||
|
return 3;
|
||||||
|
case JACK:
|
||||||
|
return 8;
|
||||||
|
case QUEEN:
|
||||||
|
return 4;
|
||||||
|
case KING:
|
||||||
|
return 5;
|
||||||
|
case ACE:
|
||||||
|
return 6;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return rang;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the packed version of this {@link Card}.
|
||||||
|
* @return an int the packed version of this {@link Card}.
|
||||||
|
*/
|
||||||
|
public int packed() {
|
||||||
|
return packed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the color of the {@link Card}.
|
||||||
|
* @return The {@link Color} of this {@link Card}
|
||||||
|
*/
|
||||||
|
public Color color(){
|
||||||
|
return PackedCard.color(packed);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the rank of the {@link Card}.
|
||||||
|
* @return The {@link Rank} of this {@link Card}
|
||||||
|
*/
|
||||||
|
public Rank rank(){
|
||||||
|
return PackedCard.rank(packed);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns true only if the card to which the function is applied is superior to the second argument of the function, knowing the trump {@link Color}.
|
||||||
|
* @param the trump {@link Color} of a the turn
|
||||||
|
* @param that the {@link Card} to compared with the caller of the function
|
||||||
|
* @return a boolean, whether or not this {@link Card} a better {@link Card} than the card argument
|
||||||
|
*/
|
||||||
|
public boolean isBetter(Color trump, Card that) {
|
||||||
|
return PackedCard.isBetter(trump, packed, that.packed());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value of this {@link Card}, knowing the current trump of the turn.
|
||||||
|
* @param the trump a {@link Color}, of the turn
|
||||||
|
* @return an int the number of points this {@link Card} is worth
|
||||||
|
*/
|
||||||
|
public int points(Color trump) {
|
||||||
|
return PackedCard.points(trump, packed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object that0) {
|
||||||
|
return that0 != null
|
||||||
|
&& that0.getClass() == this.getClass()
|
||||||
|
&& this.color() == ((Card)that0).color()
|
||||||
|
&& this.rank() == ((Card)that0).rank();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return packed;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return PackedCard.toString(packed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user