
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class Nim_oplossing extends JFrame implements ActionListener {

    private JButton button;
    private JTextField stapel1Txt,stapel2Txt,stapel3Txt;
    private int[] stapel = new int[3];	
    private int stapelnr,lucifers,loting,totaal;
    private Random random = new Random();
    private boolean gameOver = false;  
    private boolean computer = false;	  

    public static void main(String[] args) {
        Nim_oplossing frame = new Nim_oplossing();
        frame.setSize(400,200);
        frame.createGUI();
        frame.show();
    }

    private void createGUI() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout());
        
        button = new JButton("Start spel!");
        window.add(button);
        button.addActionListener(this);

        stapel1Txt = new JTextField(2);
        window.add(stapel1Txt);

		stapel2Txt = new JTextField(2);
        window.add(stapel2Txt);

		stapel3Txt = new JTextField(2);
        window.add(stapel3Txt);

        //we genereren per stapel een aantal lucifers
        stapel[0] = random.nextInt(20)+1;
		stapel[1] = random.nextInt(20)+1;
		stapel[2] = random.nextInt(20)+1;

		display();	    

    }

    public void actionPerformed(ActionEvent event) {
        
	//roep de methode totaal() aan 
	totaal();
    
    //we loten wie er mag beginnen. 
    //de computer of de mens
    //0 is de computer, 1 is de mens        
    loting = random.nextInt(2);
    //we stoppen het resultaat in een boolean
    if (loting == 0) {
    	computer = true;
    } else {
    	computer = false;
    }
    
    //het spel    	
    while (totaal > 1 && !gameOver) {    		
    		
    	if (computer) {
    		computer();
    	} else {
    		speler();    				
    	}    			
			wegnemen();
			display();
			totaal();
			wieWint();
			computer = !computer;  	
    } 
    
   }
   
   public void wieWint() {
   	
   	//Controleer of het totaal gelijk is aan 1
   	//De winnaar is die speler die de andere speler de laatste lucifer
   	//weg laat nemen
   	if (totaal == 1 ) {	
   		String wie;
   		if (computer) {
   			wie = "computer";
   		} else {
   			wie = "mens";
   		}				
		JOptionPane.showMessageDialog(null, wie + " wint!");
		gameOver = true;
	}
   }
  
   public void speler() {
   	
   	 //we vragen aan de spelers het aantal lucifers en de stapel
   	 stapelnr = Integer.parseInt(JOptionPane.showInputDialog("Welke stapel kies je?"))-1;
     lucifers = Integer.parseInt(JOptionPane.showInputDialog("Hoeveel lucifers kies je?"));   	
   	
   }
   
   public void computer() {   	   	  	
   	
   	//de computer kiest een stapel met lucifers   	   	
   	do {   		   		
   		stapelnr = random.nextInt(3);   		
   	} 
   	
   	while (stapel[stapelnr] == 0);   	
   	 	  	
   	//de computer kiest een aantal lucifers      	
   	do {   		
   		lucifers = random.nextInt(stapel[stapelnr]+1);   		
   	} 
   	
   	while (lucifers == 0 || lucifers > stapel[stapelnr] );
   	
   	JOptionPane.showMessageDialog(null,"Computer kiest stapel " + (stapelnr+1) + " en " + lucifers + " lucifers.");   	  		
   	
   }
   
   public void display() {
   	
   	//tonen het aantal lucifers
   	stapel1Txt.setText(stapel[0]+"");
	stapel2Txt.setText(stapel[1]+"");
	stapel3Txt.setText(stapel[2]+"");
   	
   }
   
   public void wegnemen() {
   	
   	//wegnemen lucifers   	
   	if (lucifers >= 1 && lucifers <= stapel[stapelnr] ) {
   		
   		stapel[stapelnr] = stapel[stapelnr] - lucifers;
   	}   	
   	
   }    
   
   public void totaal() {
   	
   	//we stoppen het totaal aantal lucifers in de variabele totaal
   	totaal = stapel[0]+stapel[1]+stapel[2];
   }
}

