package net.jrtechs.setgame; import javax.swing.JOptionPane; import java.awt.event.*; import javax.swing.Timer; /* jeffery R 12-26-15 gui component for set */ public class SetGame extends javax.swing.JFrame implements ActionListener { private SetButton[] cards = new SetButton[15]; private Game game; public SetGame() { initComponents(); initSetButtons(); showButtons(false); cmdFindSet.setEnabled(false); cmdOpen3.setEnabled(false); //creates an event listener for the timer in the game class ActionListener actTimer = new ActionListener() { public void actionPerformed(ActionEvent e) { if(game != null) { game.timerTic(); lblTime.setText("Time " + game.getTime()); } } }; Timer timer = new Timer(1000, actTimer); timer.start(); } public void showButtons(Boolean set) { for(int i = 0; i < 12; i++) { cards[i].setVisible(set); } } private void initSetButtons() { //fills the array with new SetButtons and ands action listeners for(int i = 0; i < cards.length; i++) { cards[i] = new SetButton(i); cards[i].addActionListener(this); } //sets the location of each of the buttons on the absolute layout getContentPane().add(cards[0], new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 11, 146, 84)); getContentPane().add(cards[1], new org.netbeans.lib.awtextra.AbsoluteConstraints(172, 11, 146, 84)); getContentPane().add(cards[2], new org.netbeans.lib.awtextra.AbsoluteConstraints(336, 11, 146, 84)); getContentPane().add(cards[3], new org.netbeans.lib.awtextra.AbsoluteConstraints(500, 11, 146, 84)); getContentPane().add(cards[4], new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 121, 146, 84)); getContentPane().add(cards[5], new org.netbeans.lib.awtextra.AbsoluteConstraints(172, 121, 146, 84)); getContentPane().add(cards[6], new org.netbeans.lib.awtextra.AbsoluteConstraints(336, 121, 146, 84)); getContentPane().add(cards[7], new org.netbeans.lib.awtextra.AbsoluteConstraints(500, 121, 146, 84)); getContentPane().add(cards[8], new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 233, 146, 84)); getContentPane().add(cards[9], new org.netbeans.lib.awtextra.AbsoluteConstraints(172, 233, 146, 84)); getContentPane().add(cards[10], new org.netbeans.lib.awtextra.AbsoluteConstraints(336, 233, 146, 84)); getContentPane().add(cards[11], new org.netbeans.lib.awtextra.AbsoluteConstraints(500, 233, 146, 84)); getContentPane().add(cards[12], new org.netbeans.lib.awtextra.AbsoluteConstraints(664, 11, 146, 84)); getContentPane().add(cards[13], new org.netbeans.lib.awtextra.AbsoluteConstraints(664, 121, 146, 84)); getContentPane().add(cards[14], new org.netbeans.lib.awtextra.AbsoluteConstraints(664, 233, 146, 84)); for(int i = 12; i < 15; i++) { cards[i].setVisible(false); } } public void actionPerformed(ActionEvent e) { //casts the object of e to a setButton then calls the getLoc to find its index location in the cards "setButtons" array SetButton clicked = (SetButton)e.getSource(); cards[clicked.getLoc()].clicked(); game.clicked(cards); updateBoard(); } // //GEN-BEGIN:initComponents private void initComponents() { cmdPlay = new javax.swing.JButton(); lblScore = new javax.swing.JLabel(); lblSets = new javax.swing.JLabel(); lblCardsLeft = new javax.swing.JLabel(); lblSetsOnBoard = new javax.swing.JLabel(); cmdExit = new javax.swing.JButton(); cmdFindSet = new javax.swing.JButton(); cmdOpen3 = new javax.swing.JButton(); lblTime = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Set Game"); setPreferredSize(new java.awt.Dimension(670, 500)); getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); cmdPlay.setText("Play"); cmdPlay.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdPlayActionPerformed(evt); } }); getContentPane().add(cmdPlay, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 343, 95, 38)); lblScore.setText("Score"); getContentPane().add(lblScore, new org.netbeans.lib.awtextra.AbsoluteConstraints(390, 350, -1, -1)); lblSets.setText("Sets"); getContentPane().add(lblSets, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 350, -1, -1)); lblCardsLeft.setText("Cards Left in Deck"); getContentPane().add(lblCardsLeft, new org.netbeans.lib.awtextra.AbsoluteConstraints(390, 380, -1, -1)); lblSetsOnBoard.setText("Sets on board"); getContentPane().add(lblSetsOnBoard, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 380, -1, -1)); cmdExit.setText("Exit"); cmdExit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdExitActionPerformed(evt); } }); getContentPane().add(cmdExit, new org.netbeans.lib.awtextra.AbsoluteConstraints(124, 400, 95, 38)); cmdFindSet.setText("Find a Set"); cmdFindSet.setActionCommand("cmdFindaSet"); cmdFindSet.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdFindSetActionPerformed(evt); } }); getContentPane().add(cmdFindSet, new org.netbeans.lib.awtextra.AbsoluteConstraints(124, 343, 95, 40)); cmdOpen3.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N cmdOpen3.setText("Open 3 Cards"); cmdOpen3.setToolTipText(""); cmdOpen3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdOpen3ActionPerformed(evt); } }); getContentPane().add(cmdOpen3, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 400, 95, 38)); lblTime.setText("Time"); getContentPane().add(lblTime, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 410, -1, -1)); pack(); }// //GEN-END:initComponents private void cmdPlayActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdPlayActionPerformed cmdFindSet.setEnabled(true); cmdOpen3.setEnabled(true); game = new Game(); showButtons(true); for(int i = 12; i < 15; i++) { cards[i].setVisible(false); } cmdPlay.setText("New Game"); game.updateBoard(cards); this.updateBoard(); }//GEN-LAST:event_cmdPlayActionPerformed private void updateBoard() { lblScore.setText("Score " + game.getScore()); lblSets.setText("Sets " + game.getNumSets()); lblCardsLeft.setText("Cards Left in Deck " + game.getDeck().cardsLeft()); lblSetsOnBoard.setText("Sets on board " + game.getSetsLeft()); if(game.getSetsLeft() == 0) { cmdFindSet.setEnabled(false); endGame(); } else if(game.getHand().length==12 && game.getDeck().cardsLeft() > 2) { cmdOpen3.setEnabled(true); } } private void cmdExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdExitActionPerformed System.exit(0); }//GEN-LAST:event_cmdExitActionPerformed private void endGame() { if(game.getHand().length ==12 && game.getDeck().cardsLeft() > 3) { JOptionPane.showMessageDialog(null,"There are no more sets left on the board. However, you can still open three cards.","",JOptionPane.WARNING_MESSAGE); } else { game = null; cmdOpen3.setEnabled(false); JOptionPane.showMessageDialog(null,"There are no more sets left on the board.","End of Game",JOptionPane.WARNING_MESSAGE); } } private void cmdFindSetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdFindSetActionPerformed game.findSet(cards); lblScore.setText("Score " + game.modScore(-150)); }//GEN-LAST:event_cmdFindSetActionPerformed private void cmdOpen3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdOpen3ActionPerformed game.openThree(cards); cmdOpen3.setEnabled(false); updateBoard(); this.setBounds(0,0, 830, 480); if(game.getSetsLeft() == 0) { //end of game endGame(); } else { //keep on playing game cmdFindSet.setEnabled(true); } }//GEN-LAST:event_cmdOpen3ActionPerformed public static void main(String args[]) { // /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(SetGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(SetGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(SetGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(SetGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } // java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new SetGame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cmdExit; private javax.swing.JButton cmdFindSet; private javax.swing.JButton cmdOpen3; private javax.swing.JButton cmdPlay; private javax.swing.JLabel lblCardsLeft; private javax.swing.JLabel lblScore; private javax.swing.JLabel lblSets; private javax.swing.JLabel lblSetsOnBoard; private javax.swing.JLabel lblTime; // End of variables declaration//GEN-END:variables }