package net.jrtechs.setgame;
|
|
|
|
public class Hand
|
|
{
|
|
private Card[] hand;
|
|
|
|
Hand(Card[] temp)
|
|
{
|
|
hand= temp;
|
|
}
|
|
public void resize(int newSize, Deck deckT)
|
|
{
|
|
|
|
Card[] transfer = new Card[newSize];
|
|
int count = 0;
|
|
for(Card c: hand)
|
|
{
|
|
if(c != null)
|
|
{
|
|
transfer[count] = c;
|
|
count++;
|
|
}
|
|
}
|
|
for(int i = count; i < newSize; i++)
|
|
{
|
|
transfer[i] = deckT.deal();
|
|
}
|
|
hand = transfer;
|
|
}
|
|
public Card getCard(int e)
|
|
{
|
|
return hand[e];
|
|
}
|
|
public void display()
|
|
{
|
|
|
|
for(Card elem : hand)
|
|
System.out.print(elem + " ");
|
|
System.out.println("");
|
|
}
|
|
public Card[] getHand()
|
|
{
|
|
return hand;
|
|
}
|
|
public Card[] findSet()
|
|
{
|
|
Card[] match = new Card[3];
|
|
//checks each possible combination of three on the hand to find a set
|
|
for(Card one: hand)
|
|
for(Card two: hand)
|
|
for(Card three : hand)
|
|
if(Card.isSet(one, two, three) && Card.equals(one, two, three))
|
|
if(one.getInUse() && two.getInUse() && three.getInUse())
|
|
{
|
|
match[0] = one;
|
|
match[1] = two;
|
|
match[2] = three;
|
|
return match;
|
|
}
|
|
return match;
|
|
|
|
}
|
|
public int setsLeft()
|
|
{
|
|
int count = 0;
|
|
for(Card one: hand)
|
|
for(Card two: hand)
|
|
for(Card three : hand)
|
|
if(Card.isSet(one, two, three) && Card.equals(one, two, three))
|
|
if(one.getInUse() && two.getInUse() && three.getInUse())
|
|
count++;
|
|
|
|
//gets rid of all permutations
|
|
return count/6;
|
|
}
|
|
public int location(Card find)
|
|
{
|
|
for(int i = 0; i < hand.length; i++)
|
|
{
|
|
if(hand[i] == null)
|
|
{
|
|
|
|
}
|
|
else if(find.equals(hand[i]))
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
public void removePair(Card[] remove, Deck deckT)
|
|
{
|
|
if(deckT.cardsLeft() < 2)
|
|
{
|
|
//not enough cards in deck to replace w/ new cards
|
|
|
|
for(Card c : remove)
|
|
{
|
|
hand[this.location(c)] = null;
|
|
}
|
|
}
|
|
else if(hand.length > 12)
|
|
{
|
|
for(Card c : remove)
|
|
{
|
|
hand[location(c)] = null;
|
|
}
|
|
//condense the deck
|
|
this.resize(hand.length -3, deckT);
|
|
}
|
|
else
|
|
{
|
|
//removes a set and replaces it with new cards
|
|
int i = 0;
|
|
Card[] replace = deckT.dealMany(remove.length);
|
|
for(Card c : remove)
|
|
{
|
|
hand[this.location(c)] = replace[i];
|
|
i++;
|
|
}
|
|
}
|
|
|
|
}
|
|
public void disableCard(Card c)
|
|
{
|
|
hand[this.location(c)].setInUse(false);
|
|
}
|
|
}
|