import java.awt.*;
import java.util.*;
import java.applet.*;
import java.awt.event.*;
import java.lang.*;
import java.math.*;
import javax.swing.*;
/*
Tekija: Pekka Laitinen 15.11.2000
Lahdekoodi vapaasti kaytettavissa ja muokattavissa taloudellista voittoa tavoittelemattomiin tarkoituksiin.
Edelleen lahdekoodin kaikkinainen kaytto kaikkia hierarkioita tukevaan toimintaan on kielletty.
Naita kommentti riveja ei saa poistaa uusistakaan versioista.
*/

public class MM extends java.applet.Applet implements ActionListener
{	
	int blockright[] = new int[5];
	int blockplace[] = new int[5];
	TextField tf[] = new TextField[55];
	Button nappi[] = new Button[11];
	Button uusipeli = new Button("Uusi peli");
	Panel napit = new Panel();
	Random rnd = new Random();
	int oikearivi[] = new int[5];

	public void init()
	{
		uusipeli.addActionListener(this);
		int arvo;
		for(int i=0; i<5; i++) {
			arvo = (int)(rnd.nextDouble()*(double)10);
			oikearivi[i] = arvo;
			blockright[i] = 0;
			blockplace[i] = 0;
		}
		resize(400,300);
		for(int i=0; i<55; i++) {
			if (i < 5) {
				tf[i] = (TextField) new TextField("X"); 
				tf[i].setEditable(false);
			}
			else tf[i] = (TextField) new TextField();
		}
		for(int i=0; i<11; i++) {
			if (i == 0) nappi[i] = (Button) new Button("vastaus");
			else if (i == 1) nappi[i] = (Button) new Button("");
			else if (i == 2) nappi[i] = (Button) new Button("");
			else if (i == 3) nappi[i] = (Button) new Button("");
			else if (i == 4) nappi[i] = (Button) new Button("");
			else if (i == 5) nappi[i] = (Button) new Button("");
			else if (i == 6) nappi[i] = (Button) new Button("");
			else if (i == 7) nappi[i] = (Button) new Button("");
			else if (i == 8) nappi[i] = (Button) new Button("");
			else if (i == 9) nappi[i] = (Button) new Button("");
			else if (i == 10) nappi[i] = (Button) new Button("1");
			nappi[i].addActionListener(this);
		}

		napit.setLayout(new GridLayout(11,6));
		for(int i=0; i<55; i++) {
			napit.add(tf[i]);
			if (i == 4) napit.add(nappi[0]);
			if (i == 9) napit.add(nappi[1]);
			if (i == 14) napit.add(nappi[2]);
			if (i == 19) napit.add(nappi[3]);
			if (i == 24) napit.add(nappi[4]);
			if (i == 29) napit.add(nappi[5]);
			if (i == 34) napit.add(nappi[6]);
			if (i == 39) napit.add(nappi[7]);
			if (i == 44) napit.add(nappi[8]);
			if (i == 49) napit.add(nappi[9]);
			else if (i == 54) napit.add(nappi[10]);
		}
		add("Center", napit);
		add("South", uusipeli);
	}
	
	public void initBlocks() {
		for(int i=0; i < 5; i++) {
			blockright[i] = 0;
			blockplace[i] = 0;
		}
	}
	
	public void AllRight(int answerFound) {
		for(int i=0; i < answerFound; i++) {
			nappi[i].setLabel("Great!");
		}
		for(int j=0; j<5; j++) {
			tf[j].setText(oikearivi[j] + "");
		}
	}
	
	public int Oikea(int min_tf, int loppu) {
		// Otetaan syöttökentästä String ja muutetaan se double-tyyppiseksi muuttujaksi (jotkin taulukoihin)
		int retValue = 0;
		int k = 0;
		for(int i=min_tf; i <= (min_tf + 4); i++) {
			int tempValue = Integer.parseInt( tf[i].getText( ) );
			if (tempValue == oikearivi[k]) {
				retValue = retValue + 1;
				blockright[k] = 1;
				blockplace[k] = 1;
			}
			k = k + 1;
		}
		if (retValue == 5) AllRight(loppu);
		return(retValue);
	}
	
	public int Paikka(int min_tf) {
		// Otetaan syöttökentästä String ja muutetaan se double-tyyppiseksi muuttujaksi (jotkin taulukoihin)
		int retValue = 0;
		for(int i=0; i <= 4; i++) {
			int k = 0;
			for(int j=min_tf; j <= (min_tf + 4); j++) {
				int tempValue = Integer.parseInt( tf[j].getText( ) );
				if (blockright[i] == 0 && blockplace[k] == 0 && tempValue == oikearivi[i]) {
					retValue = retValue + 1;
					blockright[i] = 1;
					blockplace[k] = 1;
				}
				k = k + 1;
			}
		}
		return(retValue);
	}

	public void actionPerformed( ActionEvent e ) {
		String command = e.getActionCommand();
		if( command == "1") {
			initBlocks();
			nappi[9].setLabel("2");
			int tulos1 = Oikea(50, 10);
			int tulos2 = Paikka(50);
			nappi[10].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "2") {
			initBlocks();
			nappi[8].setLabel("3");			
			int tulos1 = Oikea(45, 9);
			int tulos2 = Paikka(45);
			nappi[9].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "3") {
			initBlocks();
			nappi[7].setLabel("4");
			int tulos1 = Oikea(40, 8);
			int tulos2 = Paikka(40);
			nappi[8].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "4") {
			initBlocks();
			nappi[6].setLabel("5");			
			int tulos1 = Oikea(35, 7);
			int tulos2 = Paikka(35);
			nappi[7].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "5") {
			initBlocks();
			nappi[5].setLabel("6");			
			int tulos1 = Oikea(30, 6);
			int tulos2 = Paikka(30);
			nappi[6].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "6") {
			initBlocks();
			nappi[4].setLabel("7");			
			int tulos1 = Oikea(25, 5);
			int tulos2 = Paikka(25);
			nappi[5].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "7") {
			initBlocks();
			nappi[3].setLabel("8");			
			int tulos1 = Oikea(20, 4);
			int tulos2 = Paikka(20);
			nappi[4].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "8") {
			initBlocks();
			nappi[2].setLabel("9");			
			int tulos1 = Oikea(15, 3);
			int tulos2 = Paikka(15);
			nappi[3].setLabel(tulos1 + "/" + tulos2);			
		}
		else if (command == "9") {
			initBlocks();
			nappi[1].setLabel("10");			
			int tulos1 = Oikea(10, 2);
			int tulos2 = Paikka(10);
			nappi[2].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "10") {
			initBlocks();
			int tulos1 = Oikea(5, 1);
			int tulos2 = Paikka(5);
			nappi[1].setLabel(tulos1 + "/" + tulos2);
		}
		else if (command == "vastaus") {
			for(int i=0;  i<5; i++) {
				tf[i].setText(oikearivi[i] + "");
			}
			for(int j=0; j < 11; j++) {
				String missamennaan = nappi[j].getLabel();
				if (missamennaan == "") { 
					nappi[j].setLabel("ohi");
					nappi[j+1].setLabel("ohi");
				}
			}
		}
		else if (command == "Uusi peli") {
			newGame();
		}
	}
	
	 public void newGame() {
		int arvo;
    for (int i=0; i<55; i++) {
			if (i < 5) { 
				arvo = (int)(rnd.nextDouble()*(double)10);
				oikearivi[i] = arvo;
				tf[i].setText("X"); 
			}
			else { 
				tf[i].setText(""); 
			}
			nappi[0].setLabel("vastaus"); 
			nappi[10].setLabel("1"); 
			if (i > 0 && i < 10) { nappi[i].setLabel(""); }
			this.initBlocks();
		}
  }
}



