Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.22 KB | None | 0 0
  1. package ch.epfl.javass.jass;
  2. import ch.epfl.javass.bits.Bits32;
  3. import ch.epfl.javass.jass.Card.Color;;
  4.  
  5. public final class TurnState {
  6.    
  7.     public long pkScore;
  8.     public int pkTrick;
  9.     public long pkUnplayedCards;
  10.    
  11.     private TurnState(long pkScore,long pkUnplayedCards,int pkTrick) {
  12.         this.pkScore = pkScore;
  13.         this.pkTrick = pkTrick;
  14.         this.pkUnplayedCards = pkUnplayedCards;
  15.     }
  16.    
  17.     public static TurnState initial(Color trump, Score score, PlayerId firstPlayer) {
  18.         return ofPackedComponents(score.packed(), PackedCardSet.ALL_CARDS, PackedTrick.firstEmpty(trump, firstPlayer));
  19.     }
  20.    
  21.     public static TurnState ofPackedComponents(long pkScore, long pkUnplayedCards, int pkTrick) {
  22.         if (PackedScore.isValid(pkScore) && PackedCardSet.isValid(pkUnplayedCards) && PackedTrick.isValid(pkTrick)) {
  23.             return new TurnState(pkScore,pkUnplayedCards,pkTrick);
  24.         }
  25.         else {
  26.             throw new IllegalArgumentException();
  27.         }
  28.     }
  29.    
  30.     public long packedScore() {
  31.         return pkScore;
  32.     }
  33.    
  34.     public long packedUnplayedCards() {
  35.         return pkUnplayedCards;
  36.     }
  37.    
  38.     public int packedTrick() {
  39.         return pkTrick;
  40.     }
  41.    
  42.     public Score score() {
  43.         return Score.ofPacked(pkScore);
  44.     }
  45.    
  46.     public CardSet unplayedCards() {
  47.         return CardSet.ofPacked(pkUnplayedCards);
  48.     }
  49.    
  50.     public Trick trick() {
  51.         return Trick.ofPacked(pkTrick);
  52.     }
  53.    
  54.     public boolean isTerminal() {
  55.         return (pkTrick == PackedTrick.INVALID);
  56.     }
  57.    
  58.     public PlayerId nextPlayer() {
  59.         if(!PackedTrick.isFull(pkTrick)) {
  60.             if(PackedTrick.isEmpty(pkTrick)) {
  61.                 return PackedTrick.player(pkTrick, 0);
  62.             }
  63.             else {
  64.                 int lastPlayerOrdinal = PackedTrick.player(pkTrick, PackedTrick.size(pkTrick)-1).ordinal();
  65.                 if (lastPlayerOrdinal == 4) {
  66.                     return PlayerId.ALL.get(0);
  67.                 }
  68.                 else {
  69.                     return PlayerId.ALL.get(lastPlayerOrdinal - 1);
  70.                 }
  71.             }
  72.            
  73.         }
  74.         else {
  75.             throw new IllegalStateException();
  76.         }
  77.     }
  78.    
  79.     public TurnState withNewCardPlayed(Card card) {
  80.         if(!PackedTrick.isFull(pkTrick)) {
  81.             return ofPackedComponents(pkScore,PackedCardSet.remove(pkUnplayedCards, card.packed()), PackedTrick.withAddedCard(pkTrick, card.packed()));
  82.         }
  83.         else {
  84.             throw new IllegalStateException();
  85.         }
  86.     }
  87.    
  88.     public TurnState withTrickCollected() {
  89.         if(PackedTrick.isFull(pkTrick)) {
  90.             long newScore = PackedScore.withAdditionalTrick(pkScore, PackedTrick.winningPlayer(pkTrick).team(), PackedTrick.points(pkTrick));
  91.             return new TurnState(newScore,pkUnplayedCards,PackedTrick.nextEmpty(pkTrick)) ;
  92.         }
  93.         else {
  94.             throw new IllegalStateException();
  95.         }
  96.     }
  97.    
  98.     public TurnState withNewCardPlayedAndTrickCollected(Card card){
  99.         TurnState newState = this.withNewCardPlayed(card);
  100.         return newState.withTrickCollected();
  101.        
  102.     }    
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement