I am trying to create a memory game where you have 12 togglebuttons. If you click one button, the icon would change. If two icons match then both are flipped. However, if they do not match, then a timer starts for 1.5 secs then switch both togglebuttons back to main icon "MemoryGame.png". This is what I have:
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.*;
import java.util.Collections;
public class MemoryGame extends JToggleButton implements ActionListener {
private Timer cdTimer;
private Timer swTimer;
private int count = 1;
private JToggleButton[] buttons;
private String[] commandID = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"};
ArrayList<ImageIcon> iconList = new ArrayList();
ImageIcon icon = new ImageIcon("MemoryGame.png");
public MemoryGame() {
JFrame jfrm = new JFrame();
jfrm.setSize(1000, 1000);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout = new GridLayout(3,4);
JPanel gamePanel = new JPanel();
gamePanel.setLayout(layout);
JPanel timerPanel;
createIcons();
buttons = new JToggleButton[12];
for(int i = 0; i < buttons.length; i++) {
JToggleButton btn = new JToggleButton(icon);
buttons[i] = btn;
buttons[i].setActionCommand(commandID[i]);
buttons[i].addActionListener(this);
gamePanel.add(buttons[i]);
}
//Collections.shuffle(Arrays.asList(buttons));
jfrm.add(gamePanel, BorderLayout.CENTER);
jfrm.setLocationRelativeTo(null);
jfrm.setVisible(true);
}
public void actionPerformed(ActionEvent e){
JToggleButton btn = (JToggleButton)e.getSource();
JToggleButton btn2 = (JToggleButton)e.getSource();
firstClick(btn, btn2);
secondClick(btn, btn2);
matching(btn, btn2);
}
private void firstClick(JToggleButton btn, JToggleButton btn2) {
if(btn == buttons[0] || btn == buttons[1])
btn.setIcon(iconList.get(0));
else if(btn == buttons[2] || btn == buttons[3])
btn.setIcon(iconList.get(1));
else if(btn == buttons[4] || btn == buttons[5])
btn.setIcon(iconList.get(2));
else if(btn == buttons[6] || btn == buttons[7])
btn.setIcon(iconList.get(3));
else if(btn == buttons[8] || btn == buttons[9])
btn.setIcon(iconList.get(4));
else if(btn == buttons[10] || btn == buttons[11])
btn.setIcon(iconList.get(5));
}
private void secondClick(JToggleButton btn, JToggleButton btn2){
if(btn2 != btn && btn2 == buttons[0] || btn2 == buttons[1])
btn.setIcon(iconList.get(0));
else if(btn2 != btn && btn2 == buttons[2] || btn2 == buttons[3])
btn.setIcon(iconList.get(1));
else if(btn2 != btn && btn2 == buttons[4] || btn2 == buttons[5])
btn.setIcon(iconList.get(2));
else if(btn2 != btn && btn2 == buttons[6] || btn2 == buttons[7])
btn.setIcon(iconList.get(3));
else if(btn2 != btn && btn2 == buttons[8] || btn2 == buttons[9])
btn.setIcon(iconList.get(4));
else if(btn2 != btn && btn2 == buttons[10] || btn2 == buttons[11])
btn.setIcon(iconList.get(5));
}
private void matching(JToggleButton btn, JToggleButton btn2){
if(btn.isSelected()){
btn.setEnabled(false);
if(btn2.isSelected()){
btn2.setEnabled(false);
if(!btn.getIcon().toString().equals(btn2.getIcon().toString())){
startTime(1, btn, btn2);
}
else
retirePair(btn, btn2);
}
}
}
private void startTime(int countPassed, JToggleButton button, JToggleButton button2){
ActionListener action = new ActionListener(){
public void actionPerformed(ActionEvent e){
if(count == 0){
cdTimer.stop();
button.setIcon(icon);
button2.setIcon(icon);
button.setEnabled(true);
button2.setEnabled(true);
button.setSelected(false);
button2.setSelected(false);
}
else
count--;
}
};
cdTimer = new Timer(500, action);
cdTimer.start();
count = countPassed;
}
private void unflipPair(JToggleButton btn, JToggleButton btn2){
btn.setEnabled(true);
btn2.setEnabled(true);
btn.setSelected(false);
btn2.setSelected(false);
}
private void retirePair(JToggleButton btn, JToggleButton btn2){
btn.setEnabled(false);
btn2.setEnabled(false);
btn.setSelected(true);
btn2.setSelected(true);
}
private void createIcons(){
ImageIcon icon1 = new ImageIcon("1.png");
ImageIcon icon2 = new ImageIcon("2.png");
ImageIcon icon3 = new ImageIcon("3.png");
ImageIcon icon4 = new ImageIcon("4.png");
ImageIcon icon5 = new ImageIcon("5.png");
ImageIcon icon6 = new ImageIcon("6.png");
iconList.add(icon1);
iconList.add(icon2);
iconList.add(icon3);
iconList.add(icon4);
iconList.add(icon5);
iconList.add(icon6);
}
The problem I am having is the timer does not start at all; therefore, the icons remain the same and do not flip back even when they don't match. Is there a way to make this work? Thank you