// Guess six numbers compared to six hidden random numbers ... try for smallest difference // R.Metcalfe May, 2013 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GuessingGame extends JFrame implements ActionListener { int best = -1; JPanel row1 = new JPanel(); JPanel row2 = new JPanel(); JLabel guessesLabel = new JLabel("Guesses: ", JLabel.RIGHT); JTextField[] guesses = new JTextField[6]; JLabel versusLabel = new JLabel("Versus: ", JLabel.RIGHT); JTextField[] versus = new JTextField[6]; JPanel row3 = new JPanel(); JButton stop = new JButton("Stop"); JButton check = new JButton("Check"); JButton reset = new JButton("Reset"); public void actionPerformed(ActionEvent e) { int diff = 0; if (e.getSource() == this.check) { for (int i = 0; i < 6; i++) { diff += Math.abs(Integer.parseInt("0" + guesses[i].getText()) - Integer.parseInt(versus[i].getText())); versus[i].setVisible(true); } if (best < 0) { JOptionPane.showMessageDialog( this.check, Integer.toString(diff) + " ... is best score so far"); best = diff; } else if (diff < best) { JOptionPane.showMessageDialog( this.check, Integer.toString(diff) + " ... is best score so far, better than " + Integer.toString(best)); best = diff; } else { JOptionPane.showMessageDialog( this.check, Integer.toString(diff) + " ... is not as good as your best score of " + Integer.toString(best)); } stop.setEnabled(true); check.setEnabled(false); } else if (e.getSource() == this.reset) { for (int ii = 0; ii < 6; ii++) { guesses[ii].setText( "" ); versus[ii].setVisible(false); versus[ii].setText( Integer.toString((int)(Math.random() * (9 - 1) + 1)) ); } check.setEnabled(true); } else if (e.getSource() == this.stop) { setVisible(false); //you can't see me! dispose(); //Destroy the JFrame object } } public GuessingGame() { super("Guessing Game (guesses from 1 to 9)"); setSize(550, 270); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); GridLayout layout = new GridLayout(5, 1, 10, 10); setLayout(layout); FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER, 10, 10); row1.setLayout(layout1); add(row1); GridLayout layout2 = new GridLayout(2, 7, 10, 2); row2.setLayout(layout2); row2.add(guessesLabel); for (int i = 0; i < 6; i++) { guesses[i] = new JTextField(); row2.add(guesses[i]); } row2.add(versusLabel); for (int i = 0; i < 6; i++) { versus[i] = new JTextField( Integer.toString((int)(Math.random() * (9 - 1) + 1)) ); versus[i].setEditable(false); versus[i].setVisible(false); row2.add(versus[i]); } add(row2); FlowLayout layout3 = new FlowLayout(FlowLayout.CENTER, 10, 10); row3.setLayout(layout3); stop.setEnabled(false); row3.add(stop); row3.add(check); row3.add(reset); add(row3); stop.addActionListener(this); check.addActionListener(this); reset.addActionListener(this); setVisible(true); } public static void main(String[] arguments) { GuessingGame frame = new GuessingGame(); } }