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.
Can someone please help, here's what I got so far:
Driver:
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); } } "Location Panel" (Simon says game logic):
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<4; i++) { page.drawRect(xLoc[i]-20, yLoc[i]-20, 40, 40); } // if are displaying a target, draw it if (sTimer>0) { page.setColor(Color.blue); page.fillOval(xLoc[target[currTarget]]-15, yLoc[target[currTarget]]-15, 30, 30); sTimer--; repaint(); } if (sTimer == 0) { if (currTarget < numTargets - 1) { currTarget++; sTimer = 500; } else { sTimer--; } } // if are displaying a user click, draw it if (timer>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 < 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) {} } }