
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;




public class Opgave14_5 extends JFrame {

    JPanel contentPane;
  	JPanel jPanel1 = new JPanel();  
  	JPanel jPanel2 = new JPanel(); 
  	JPanel jPanel3 = new JPanel();
  	JPanel jPanel4 = new JPanel();
 	JPanel jPanel5 = new JPanel();
  	JPanel jPanel6 = new JPanel();
  	JPanel jPanel7 = new JPanel();
  	JPanel jPanel8 = new JPanel();
  	JPanel jPanel9 = new JPanel();
	JButton jButton1 = new JButton();
   	int [] [] tabel = new int [3] [3];
   	
   	int [] som = new int [8];
   	
   	Random random = new Random();
   	
   	boolean spelerWint = false;
   	boolean computerWint = false;
   	boolean spelTenEinde = false;
   	

    public static void main(String[] args) {
        Opgave14_5 frame = new Opgave14_5();
        
        frame.setSize(300,175);
        frame.createGUI();
        frame.show();
    }

    private void createGUI() {
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    contentPane = (JPanel) getContentPane();
    contentPane.setLayout(null);
    setSize(new Dimension(400, 300));
    setTitle("Frame Title");
    
    jPanel1.setBackground(Color.gray);
    jPanel1.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel1.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel1.setBounds(new Rectangle(50, 50, 50, 50));
    jPanel1.addMouseListener(new Frame1_jPanel1_mouseAdapter(this));
    
    jButton1.setBounds(new Rectangle(50, 226, 150, 24));
    jButton1.setText("Start spel");
    jButton1.addMouseListener(new Frame1_jButton1_mouseAdapter(this));
    
    jPanel2.setBackground(Color.gray);
    jPanel2.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel2.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel2.setBounds(new Rectangle(100, 50, 50, 50));
    jPanel2.addMouseListener(new Frame1_jPanel2_mouseAdapter(this));
    
    jPanel3.setBackground(Color.gray);
    jPanel3.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel3.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel3.setBounds(new Rectangle(150, 50, 50, 50));
    jPanel3.addMouseListener(new Frame1_jPanel3_mouseAdapter(this));
    
    jPanel4.setBackground(Color.gray);
    jPanel4.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel4.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel4.setBounds(new Rectangle(50, 100, 50, 50));
    jPanel4.addMouseListener(new Frame1_jPanel4_mouseAdapter(this));
    
    jPanel5.setBackground(Color.gray);
    jPanel5.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel5.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel5.setBounds(new Rectangle(100, 100, 50, 50));
    jPanel5.addMouseListener(new Frame1_jPanel5_mouseAdapter(this));
    
    jPanel6.setBackground(Color.gray);
    jPanel6.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel6.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel6.setBounds(new Rectangle(150, 100, 50, 50));
    jPanel6.addMouseListener(new Frame1_jPanel6_mouseAdapter(this));
    
    jPanel7.setBackground(Color.gray);
    jPanel7.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel7.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel7.setBounds(new Rectangle(50, 150, 50, 50));
    jPanel7.addMouseListener(new Frame1_jPanel7_mouseAdapter(this));
    
    jPanel8.setBackground(Color.gray);
    jPanel8.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel8.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel8.setBounds(new Rectangle(100, 150, 50, 50));
    jPanel8.addMouseListener(new Frame1_jPanel8_mouseAdapter(this));
    
    jPanel9.setBackground(Color.gray);
    jPanel9.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 30));
    jPanel9.setBorder(BorderFactory.createLineBorder(Color.black));
    jPanel9.setBounds(new Rectangle(150, 150, 50, 50));
    jPanel9.addMouseListener(new Frame1_jPanel9_mouseAdapter(this));
    
    contentPane.add(jPanel1);
    contentPane.add(jPanel2);
    contentPane.add(jPanel3);
    contentPane.add(jPanel4);
    contentPane.add(jPanel5);
    contentPane.add(jPanel6);
    contentPane.add(jPanel7);
    contentPane.add(jPanel8);
    contentPane.add(jPanel9);
    contentPane.add(jButton1);
    
    zetTabelOpVier();
    
    
  }
  
  public void speel() {
  	
  	
  	
  	if (!spelTenEinde) {
  		
  		wintSpeler();
  	}
  	
  	 	
  	if (!spelerWint && !spelTenEinde) {
  		
  		zetComputer();
    	wintComputer();
    
  	}
  	
  	if (spelTenEinde && !spelerWint && !computerWint) {
     	
     	JOptionPane.showMessageDialog(null,"Remise!");
     }
  	
  	
   
  	
  }
  
  public void spelTenEinde() {
  	
  	//controleer einde spel
  	//niemand heeft gewonnen
  	//het array bevat geen waarden vier meer
  	
  	spelTenEinde = true;
  	
  	 for (int rij = 0; rij < tabel.length; rij++) {

            for (int kolom = 0; kolom < tabel[0].length ; kolom++) {
                
                if (tabel[rij][kolom] == 4) {
                	
                	spelTenEinde = false;                	
                }
       		}
       		
     }
     
     
  	
  	
  	
  }
  
  public void zetTabelOpVier() {
  	
  	 //we plaatsen alle waarden van het array op vier
  	 
  	 
  	 
  	 for (int rij = 0; rij < tabel.length; rij++) {

            for (int kolom = 0; kolom < tabel[0].length ; kolom++) {
                
                tabel[rij][kolom] = 4;
       		}
       		
     }
  	
  }
  
  
  
  public void jButton1_mouseClicked(MouseEvent e) {

      //we wissen alle panelen
        Graphics papier = jPanel1.getGraphics();
        papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
        
       
        papier = jPanel2.getGraphics();
        papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
         
    
        papier = jPanel3.getGraphics();
        papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
         
    
    	papier = jPanel4.getGraphics();
    	papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
    	
    
    	papier = jPanel5.getGraphics();
    	papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
    	
    
    	papier = jPanel6.getGraphics();
    	papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
     
    
    	papier = jPanel7.getGraphics();
    	papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
    	 
    
    	papier = jPanel8.getGraphics();
    	papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
    	 
    
    	papier = jPanel9.getGraphics();
    	papier.setColor(Color.gray);
        papier.fillRect(5,5,40,40);
    	
    	//we zetten de waarden in het array op vier
    	zetTabelOpVier();
    	
    	//we berekenen de rijen, kolommen en diagonalen
    	totaal();
    	
    	//we plaatsen de spelerWint,spelTenEinde en computerWint op false
    	spelerWint = false;    	
    	spelTenEinde = false;
    	computerWint = false;
      
  }
	
  
  public void totaal() {
  	
  	som[0] = tabel[0][0] + tabel[0][1] + tabel[0][2];
  	som[1] = tabel[1][0] + tabel[1][1] + tabel[1][2];
  	som[2] = tabel[2][0] + tabel[2][1] + tabel[2][2];
  	som[3] = tabel[0][0] + tabel[1][0] + tabel[2][0];
  	som[4] = tabel[0][1] + tabel[1][1] + tabel[2][1];
  	som[5] = tabel[0][2] + tabel[1][2] + tabel[2][2];
  	som[6] = tabel[0][0] + tabel[1][1] + tabel[2][2];
  	som[7] = tabel[0][2] + tabel[1][1] + tabel[2][0];
  	
  	
  }
  
  public void wintSpeler() {
  	
  	//wanneer de som gelijk is aan drie wint de speler
  	
  	totaal();
  	
  	spelTenEinde();
  	
  	for (int teller = 0; teller < som.length; teller++) {
  		
  		if (som[teller] == 3) {
  			
  			JOptionPane.showMessageDialog(null, "speler wint!");
  			spelerWint = true;
  			spelTenEinde = true;
  		}
  		
  		
  	}
  }
  
  public void wintComputer() {
  	
  	//wanneer de som gelijk is aan nul wint de computer
  	
  	totaal();
  	
  	spelTenEinde();
  	
  	for (int teller = 0; teller < som.length; teller++) {
  		
  		if (som[teller] == 0) {
  			
  			JOptionPane.showMessageDialog(null, "computer wint!");
  			computerWint = true;
  			spelTenEinde = true;
  		}
  		
  		
  	}
  }
  
  public void zetComputer() {
  	
  	//we zoeken willekeurig een vrij plaats
  	
  	int rij;
  	int kolom;
  	Graphics papier;
  	
  	
  	do {
  		rij = random.nextInt(3);
  		kolom = random.nextInt(3);
  	}
  	
  	while (tabel[rij][kolom] == 1 || tabel[rij][kolom] == 0);
  	
  	//we plaatsen de waarde in het array
  	tabel[rij][kolom] = 0;
  	
  		
  	
  	//we plaatsen een nul in het paneel
  	
  	if (tabel[rij][kolom] == tabel[0][0]) {
  		papier = jPanel1.getGraphics();
    	papier.drawString("O",17,35);
  	}
  	
  	if (tabel[rij][kolom] == tabel[0][1]) {
  		papier = jPanel2.getGraphics();
    	papier.drawString("O",17,35);
  	}
  	
  	if (tabel[rij][kolom] == tabel[0][2]) {
  		papier = jPanel3.getGraphics();
    	papier.drawString("O",17,35);
  	}
  	
  	if (tabel[rij][kolom] == tabel[1][0]) {
  		papier = jPanel4.getGraphics();
    	papier.drawString("O",17,35);
  	}
  	
  	if (tabel[rij][kolom] == tabel[1][1]) {
  		papier = jPanel5.getGraphics();
    	papier.drawString("O",17,35);
  	}
  	
  	if (tabel[rij][kolom] == tabel[1][2]) {
  		papier = jPanel6.getGraphics();
    	papier.drawString("O",17,35);
  	}
  	
  	if (tabel[rij][kolom] == tabel[2][0]) {
  		papier = jPanel7.getGraphics();
    	papier.drawString("O",17,35);
  	}
  	
  	if (tabel[rij][kolom] == tabel[2][1]) {
  		papier = jPanel8.getGraphics();
    	papier.drawString("O",17,35);
  	}
  		
  	if (tabel[rij][kolom] == tabel[2][2]) {
  		papier = jPanel9.getGraphics();
    	papier.drawString("O",17,35);
  	}
  	
  }
  
  
  
  	

  public void jPanel1_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel1.getGraphics();
    papier.drawString("X",17,35);
    tabel [0] [0] = 1; 
    speel();
  }

  public void jPanel2_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel2.getGraphics();
    papier.drawString("X",17,35);
    tabel [0] [1] = 1; 
    speel();

  }

  public void jPanel3_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel3.getGraphics();
    papier.drawString("X",17,35);
    tabel [0] [2] = 1; 
    speel();

  }

  public void jPanel4_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel4.getGraphics();
    papier.drawString("X",17,35);
    tabel [1] [0] = 1; 
    speel();

  }

  public void jPanel5_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel5.getGraphics();
    papier.drawString("X",17,35);
    tabel [1] [1] = 1; 
    speel();

  }

  public void jPanel6_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel6.getGraphics();
    papier.drawString("X",17,35);
    tabel [1] [2] = 1; 
    speel();

  }

  public void jPanel7_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel7.getGraphics();
    papier.drawString("X",17,35);
    tabel [2] [0] = 1; 
    speel();

  }

  public void jPanel8_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel8.getGraphics();
    papier.drawString("X",17,35);
    tabel [2] [1] = 1; 
    speel();

  }

  public void jPanel9_mouseClicked(MouseEvent e) {
    Graphics papier = jPanel9.getGraphics();
    papier.drawString("X",17,35);
    tabel [2] [2] = 1; 
    speel();

  }
}

class Frame1_jPanel8_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel8_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel8_mouseClicked(e);
  }
}

class Frame1_jPanel9_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel9_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel9_mouseClicked(e);
  }
}

class Frame1_jPanel7_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel7_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel7_mouseClicked(e);
  }
}

class Frame1_jPanel4_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel4_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel4_mouseClicked(e);
  }
}

class Frame1_jPanel3_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel3_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel3_mouseClicked(e);
  }
}

class Frame1_jPanel2_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel2_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel2_mouseClicked(e);
  }
}

class Frame1_jPanel1_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel1_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel1_mouseClicked(e);
  }
}

class Frame1_jPanel5_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel5_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel5_mouseClicked(e);
  }
}

class Frame1_jPanel6_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jPanel6_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jPanel6_mouseClicked(e);
  }
 } 
 

class Frame1_jButton1_mouseAdapter
    extends MouseAdapter {
  private Opgave14_5 adaptee;
  Frame1_jButton1_mouseAdapter(Opgave14_5 adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseClicked(MouseEvent e) {
    adaptee.jButton1_mouseClicked(e);
  }

 }


