// an applet by John Sklar
// see credits in the game
// written in java Swing

   import javax.swing.*;
   import java.applet.*;
   import java.awt.*;
   import java.awt.event.*;

    public class JMathGame extends JApplet implements ActionListener        
   {
      int answer,j,c,pressCounter; 
      int[] list = {0,1,2,3,4};  
      int[] index ={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
      int[][] card ={ {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31},
         {2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31},
         {4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31},
         {8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31},
         {16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}};
       
      Font bigFont = new Font("Courier",Font.BOLD,30);
      Font msgFont = new Font("Serif",Font.BOLD,24);
      Font smallFont = new Font("Serif",Font.BOLD,16);
     
      JButton[] block = new JButton[16];
      JButton yes = new JButton("YES");
      JButton no = new JButton("NO");
      JButton reset = new JButton("Reset");
      JButton Directions = new JButton("Directions");
      JButton credits = new JButton("Credits");
      JLabel message = new JLabel("Guess a number from 1 - 31, is it here?");
      JLabel bottommessage = new JLabel("An Applet by John Sklar!");
      
      JPanel top,middle,bottom;
      
       public void init()
      {
         getContentPane().setLayout(new FlowLayout());
         
         top = new JPanel();
         middle = new JPanel();
         bottom = new JPanel();
              
         getContentPane().add(top);
         getContentPane().add(middle);
         getContentPane().add(bottom);
             
         top.add(message);
          
         for(c=0;c < 16;++c)
         { // create each button
            block[c]=new JButton();
         }
       //set a grid in the center of the flowlayout
         middle.setLayout(new GridLayout(5,4,4,4));
       // alternate the color of the blocks
         for(c=0;c < 16;++c){
            j++;
            if(j<5)
               utility.Colorgrid( block[c],c);
            if(j>4 && j <9)
               utility.Colorgrid(block[c],c+1);
            if(j>8 && j < 13)
               utility.Colorgrid(block[c],c);
            if(j>12)
               utility.Colorgrid(block[c],c+1);
            block[c].setFont(bigFont);
            middle.add(block[c]);
         }
         
         yes.setFont(msgFont);
         no.setFont(msgFont);
         reset.setFont(msgFont);    
         message.setFont(msgFont);
         bottommessage.setFont(msgFont);
      
         yes.setBackground(Color.white);
         yes.setForeground(Color.red);
         no.setBackground(Color.white);
         no.setForeground(Color.red);
         Directions.setBackground(Color.white);
         credits.setBackground(Color.white);
      
         middle.add(Directions);
         middle.add(yes);
         middle.add(no);
         middle.add(credits);
         middle.setBackground(Color.black);
         
         Directions.setFont(smallFont);
         credits.setFont(smallFont);
         Directions.addActionListener(this);
         credits.addActionListener(this);
         yes.addActionListener(this);
         no.addActionListener(this);
          
         bottom.add(bottommessage);
         bottom.add(reset);
         reset.setVisible(false);
         bottommessage.setVisible(true);       
         reset.addActionListener(this);
      }
     		
       public void start()
      {
         answer=j=c=pressCounter=0;
         utility.mix(index);
         utility.mix(list);              		
         for(c=0;c < 16;++c)
         {
            block[c].setText(Integer.toString(card[list[pressCounter]][index[c]])); 
         }
         
      }
   
   		
   		            
       public void actionPerformed(ActionEvent e)
      {
         Object source = e.getSource();
         if(source == credits)
            utility.credits();
         else if(source == Directions)
            utility.directions();
         else {
            if(pressCounter==0)
               message.setText("Is Your Number Here?");
            if(source == yes)
               answer+=card[list[pressCounter]][0];
            if(++pressCounter< 5){
               utility.mix(index);
               for(c=0;c < 16;++c)
               {
                 block[c].setText(Integer.toString(card[list[pressCounter]][index[c]]));  
               }
            }
            else{
               for(c=0;c < 16;++c)
               {
                  block[c].setText(Integer.toString(answer)); 
               }
               reset.setEnabled(true);
               yes.setEnabled(false);
               no.setEnabled(false);
               message.setText("You picked the number " + answer);
               reset.setVisible(true);
               bottommessage.setVisible(false); 
            }
            if(source == reset)
            {
               start();
               reset.setEnabled(false);
               yes.setEnabled(true);
               no.setEnabled(true);
               message.setText("Guess a number from 1 - 31, is it here?");
               reset.setVisible(false);
               bottommessage.setVisible(true); 
            }
         }
      }
   }