title: Java Simon Says
body: <p>I currently have the GUI made for a simon says game, the only problem I'm having is implementing the game logic (my current code will generate a sequence and display user input, but won't save the generated sequence, or compare it to the input). I know I have to use either a queue or a stack, but I can't figure out how to implement either of these to make a working game.</p>
  
  <p>Can someone please help, here's what I got so far:</p>
  
  <p>Driver:</p>
  
  <pre><code>import javax.swing.JFrame;
  
  public class Location 
  {
     public static void main (String[] args) 
     {
        JFrame frame = new JFrame ("Location");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new LocationPanel());
        frame.pack();
        frame.setVisible(true);
     }
  }
  </code></pre>
  
  <p>"Location Panel" (Simon says game logic):</p>
  
  <pre><code>import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  import java.awt.event.MouseListener;
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseMotionListener;
  import java.util.Random;
  
  public class LocationPanel extends JPanel 
  {
  
      private final int WIDTH =300, HEIGHT=300;   // dimensions of window
      private int[] xLoc, yLoc;       // locations for target boxes
          /*      0       1
                  2       3   */
  
      private int timer;      // timer for displaying user clicks
      private int xClick, yClick; // location of a user click
  
      private int sTimer;     // timer for displaying target
      private int[] target;       // choice of target
  
      private int currTarget;
      private int numTargets;
  
      private JButton pushButton; // button for playing next sequence
  
      public LocationPanel() 
      {
          xLoc = new int[4];
          yLoc = new int[4];
          xLoc[0] = 100;  yLoc[0] = 100;
          xLoc[1] = 200;  yLoc[1] = 100;
          xLoc[2] = 100;  yLoc[2] = 200;
          xLoc[3] = 200;  yLoc[3] = 200;
  
          timer = 0;
          sTimer = 0;
  
          xClick = -100;  yClick = -100;
          target = new int[10];
          currTarget = -1;
  
          pushButton = new JButton("Next Sequence");
          pushButton.addActionListener(new ButtonListener());
          add(pushButton);
  
          addMouseListener(new MouseHandler()); 
          setPreferredSize (new Dimension(WIDTH, HEIGHT));
          setBackground (Color.white);
      }
  
      public void paintComponent(Graphics page) 
      {
          super.paintComponent(page);
  
          // draw four target area boxes
          page.setColor(Color.black);
          for (int i=0; i&lt;4; i++) 
          {
              page.drawRect(xLoc[i]-20, yLoc[i]-20, 40, 40);
          }
  
          // if are displaying a target, draw it
          if (sTimer&gt;0)
          {
              page.setColor(Color.blue);
              page.fillOval(xLoc[target[currTarget]]-15, yLoc[target[currTarget]]-15, 30, 30);
              sTimer--;
              repaint();
          }
          if (sTimer == 0) 
          {
              if (currTarget &lt; numTargets - 1) 
              {
                  currTarget++;
                  sTimer = 500;
              } 
              else 
              {
                  sTimer--;
              }
          }
  
          // if are displaying a user click, draw it
          if (timer&gt;0) 
          {
              page.setColor(Color.red);
              page.fillOval(xClick-15, yClick-15, 30, 30);
              timer--;
              repaint();
          }
      }
  
      // when the button is pressed, currently the program selects a single
      // random target location and displays the target there for a short time
      private class ButtonListener implements ActionListener 
      {
          public void actionPerformed(ActionEvent event) 
          {
              Random gen = new Random();
              numTargets = target.length;
              for (int i = 0; i &lt; target.length; i++) 
              {
                  int insert = gen.nextInt(4);
  
                  if(i == 0)
                      target[i] = insert;
                  else
                  {
                      while(insert == target[i - 1])
                              insert = gen.nextInt(4);
  
                      target[i] = insert;
                  }
              }
              currTarget = 0;
              sTimer = 500;
              repaint();
          }
      }
  
      // when the user clicks the mouse, this method registers the click and
      // draws a circle there for a short time
      private class MouseHandler implements MouseListener, MouseMotionListener 
      {
          // the method that is called when the mouse is clicked - note that Java is very picky that a click does
          // not include any movement of the mouse; if you move the mouse while you are clicking that is a
          // "drag" and this method is not called
          public void mouseClicked(MouseEvent event) 
          {
              // get the X and Y coordinates of where the  mouse was clicked 
              xClick = event.getX();
              yClick = event.getY();
              System.out.println("(" + xClick + "," + yClick + ")");
  
              // the repaint( ) method calls the paintComponent method, forcing the application window to be redrawn
              timer = 50;
              repaint();
          }
          // Java requires that the following six methods be included in a MouseListener class, but they need
          // not have any functionality provided for them
          public void mouseExited(MouseEvent event) {}
          public void mouseEntered(MouseEvent event) {}
          public void mouseReleased(MouseEvent event) {}
          public void mousePressed(MouseEvent event) {}
          public void mouseMoved(MouseEvent event) {}
          public void mouseDragged(MouseEvent event) {}
      }
  </code></pre>
  
  <p>}</p>