/* jeffery r 12-26-15 Game class keeps track of the score hand and deck */ package net.jrtechs.setgame; import java.awt.Color; import java.util.ArrayList; public class Game { //properties private Deck deck; private Hand hand; private int sets; private int score; private int setsLeft; private int currentDisplay = 12; private int time; private int timeOnSet; //constructor Game() { deck = new Deck(); deck.shuffle(); hand = new Hand(deck.dealMany(12)); setsLeft = hand.setsLeft(); sets = 0; time = 0; score = 0; currentDisplay = 12; timeOnSet = 0; } public void timerTic() { time++; timeOnSet++; } public Card[] getHand() { return hand.getHand(); } public void clicked(SetButton[] cards) { ArrayList sel; sel = selected(cards); if(sel.size() == 3) { //there is a set selected if(Card.isSet(sel.get(0),sel.get(1), sel.get(2))) { sets++; //calculates score to be given baised on time took and cards on board if(currentDisplay ==12) { int temp = 100 - timeOnSet; if(temp > 0) { score +=temp; } } score += 50; //base score timeOnSet = 0; Card[] remove = {sel.get(0),sel.get(1), sel.get(2)}; if(deck.cardsLeft() > 2) { hand.removePair(remove, deck); if(currentDisplay > 12) { currentDisplay -= 3; hand.resize(currentDisplay, deck); for(int i = 12; i < 15; i ++) { cards[i].setVisible(false); } } updateBoard(cards); } else { for(SetButton elem : cards) { if(elem.getPressed()) { hand.disableCard(elem.getCard()); elem.setEnabled(false); elem.setBackground(Color.black); } } } if(deck.cardsLeft() < 3) { setsLeft = 0; } else { setsLeft= hand.setsLeft(); } } diselectCards(cards); } } public void openThree(SetButton[] cards) { if(currentDisplay == 12) { currentDisplay += 3; hand.resize(currentDisplay, deck); //hand.display(); for(int i = 12; i < cards.length; i++) { cards[i].setVisible(true); } this.updateBoard(cards); } else { } } public void updateBoard(SetButton[] cards) { int count = 0; for(Card elem : hand.getHand()) { if(count >= currentDisplay) { } else { cards[count].setCard(elem); count ++; } } for(SetButton elem : cards) { elem.update(); elem.setBackground(Color.white); elem.setSelected(false); elem.setEnabled(true); } } public void findSet(SetButton[] cards) { Card[] set = hand.findSet(); for(Card elem : set) { int loc = hand.location(elem); //row * (4) + col cards[loc].setBackground(Color.PINK); } } public int getTime() { return time; } public int getNumSets() { return sets; } public int getScore() { return score; } public int modScore(int change) { score +=change; return score; } public Deck getDeck() { return deck; } public int getSetsLeft() { setsLeft = hand.setsLeft(); return setsLeft; } public void setScore(int newScore) { score = newScore; } private void diselectCards(SetButton[] cards) { for(SetButton elem : cards) { if(elem.getPressed()) { elem.setBackground(Color.white); elem.setPressed(false); } } } private ArrayList selected(SetButton[] cards) { ArrayList selectedCards = new ArrayList(); for(SetButton elem : cards) { if(elem.getPressed()) { selectedCards.add(elem.getCard()); } } return selectedCards; } }