import javax.microedition.lcdui.*;
import java.io.*;
import java.util.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
class Louend extends Canvas implements Runnable{
	Liiguta							nihuta;	
	//Salvestamine					seivi;
	Graphics 						g;
	Thread 							kell = new Thread(this);        		
	int 							servaruum=5;		
	int								kiirus=500;
	int 							laius_min=servaruum*2;
	int 							korgus_min=servaruum*2;	
	int 							korgus_max=this.getHeight()-(servaruum*4);
	int 							laius_max=(this.getWidth()/2)-(servaruum*2);
	int 							samm=(korgus_max-korgus_min)/20;		
	int 							kujundiX=4;
	int 							kujundiY=19;	
	boolean[][]						kujund = new boolean[4][4];
	boolean[][]						tabelis = new boolean[20][10];
	boolean							paus=false;
	
	public Louend(){		
		algvaartusta();		
		nihuta=new Liiguta(tabelis);
		//kujund=nihuta.tee_uus_kujund();
		kujund=nihuta.liikuv_kujund;		
		kell.start();		
	}
	protected void paint(Graphics graafika){
		g=graafika;	
		if(paus){
		}else{
		
			kujundus();			
			kujundid();
			if(nihuta.manglabi){
				skoor();
			}
		}
	}
	/*
	 * Joonistab kogu üldkujunduse alates raamist ja ruudustikust kuni punktiskoorini välja
	 */
	protected void kujundus(){	
		
		g.setColor(255, 255, 255);
     	g.fillRect(0, 0, getWidth(), getHeight());	     				
     	g.setColor(0, 0, 0);
		g.drawRoundRect(servaruum,servaruum,getWidth()-(servaruum*2),getHeight()-(servaruum*2),servaruum,servaruum);
		g.drawRect(laius_min,korgus_min,(getWidth()/2)-(servaruum*4),getHeight()-(servaruum*6));
		g.setColor(150, 150, 150);
		//horisontaalsed triibud
		int j=korgus_min;
		for(int i=0;i<=20;i++){
			g.drawLine(laius_min,j,laius_max,j);
			j+=samm;
		}
		//vertikaalsed triibud
		j=laius_min;
		for(int i=0;i<=10;i++){
			g.drawLine(j,korgus_min,j,korgus_max);
			j+=samm;
		}
		g.setColor(0, 0, 0);
		g.drawString("Punkte: "+String.valueOf(nihuta.skoor), laius_max+10, korgus_min,g.LEFT|g.TOP);
		g.drawString("Boonus: "+String.valueOf(nihuta.boonus), laius_max+10, korgus_min+15,g.LEFT|g.TOP);
		g.drawString("Kiirus: "+String.valueOf(kiirus), laius_max+15, korgus_max-10,g.LEFT|g.TOP);
		
		// järgmise kujundi paneel
		
		//horisontaalsed
		g.setColor(150, 150, 150);
		int j_=korgus_max/3;
		int laius_min_=(getWidth()/2)+servaruum;
		int laius_max_=laius_min_+(4*samm);
		for(int i=0;i<=4;i++){
			g.drawLine(laius_min_,j_,laius_max_,j_);
			j_+=samm;
		}
		
		j_=laius_min_;
		int korgus_min_=korgus_max/3;
		int korgus_max_=(korgus_max/3)+(4*samm);
		for(int i=0;i<=4;i++){
			g.drawLine(j_,korgus_min_,j_,korgus_max_);
			j_+=samm;
		}
		g.setColor(0, 0, 0);
	}
	/*
	 * Joonistab ruudustiku sisu, ehk klotsid/kujundid + järgmise kujundi 
	 */
	protected void kujundid(){
		
		
		for(int i=0;i<20;i++){
			for(int j=0;j<10;j++){
				if(tabelis[i][j]==true){
					int y=korgus_max-(i*samm)-samm;			
					int x=laius_min+(j*samm);			
					g.drawRect(x,y,6,6);
				}
			}
		}
		// Järgmine kujund
		
		for(int i=0;i<4;i++){
			for(int j=0;j<4;j++){
				if(nihuta.jargmine[i][j]==true){
					int y=(korgus_max/3)+(i*samm);
					int x=(getWidth()/2)+servaruum+(j*samm);
					g.drawRect(x,y,6,6);
				}
			}
		}
	}
	/*
	 * joonistab parimate tulemuste edetabeli
	 */
	protected void skoor(){
		if(nihuta.skoor>=100){
			Tetris_3.c.addCommand(Tetris_3.c6);
		}
		g.setColor(255, 255, 255);
		int keskx=getWidth()/2;
		int kesky=(getHeight()/2)-45;
     	g.fillRect(keskx-75,kesky,150,95);	     				
     	g.setColor(0, 0, 0);
     	g.drawRect(keskx-75,kesky,150,95);	     			
     	kesky+=5;	
     	g.drawString("..::PARIMAD MÄNGIJAD::..", keskx-65,kesky,g.LEFT|g.TOP);     	     	
     	kesky+=10;	
     	for(int i=1;i<=3;i++){
     		kesky+=10;
     		g.drawString("#"+i, keskx-60,kesky,g.LEFT|g.TOP);     	
     		g.drawString(nihuta.seivi.nimed[i], keskx-25,kesky,g.LEFT|g.TOP);     	
     		g.drawString(String.valueOf(nihuta.seivi.punktiskoorid[i]), keskx+20,kesky,g.LEFT|g.TOP);     	
     	}
     	kesky+=20;	
     	g.drawString("Sinu skoor oli : "+String.valueOf(nihuta.skoor), keskx-60,kesky,g.LEFT|g.TOP);     	
	}
	/*
	 * Klahvikuular. Peale iga vajutust värskendatakse ekraani
	 */
	protected void keyPressed(int nupukood){
		if(getGameAction(nupukood)==Canvas.LEFT){tabelis=nihuta.vasakule(kujundiX,kujundiY,kujund);}
		if(getGameAction(nupukood)==Canvas.RIGHT){tabelis=nihuta.paremale(kujundiX,kujundiY,kujund);}
		if(getGameAction(nupukood)==Canvas.DOWN){tabelis=nihuta.alla(kujundiX,kujundiY,kujund);}
		if(getGameAction(nupukood)==Canvas.FIRE){kujund=nihuta.poora(kujundiX,kujundiY,kujund);}				
		if(nihuta.manglabi==true){
			kell=null;
			try{
				gameover();			
			}catch(Exception e){}
		}else{
			kujund=nihuta.liikuv_kujund;
			kujundiY=nihuta.y;
			kujundiX=nihuta.x;
		}
		repaint();
	}
	/*
	 * Mängu sisene kell, eraldi lõimes. 
	 * Iga ajaühiku jooksul värskendadatakse ekraani ning liigutatakse kujundit alla ühe ühiku võrra. 
	 * Ühtlasi määrab ära mängu kiiruse
	 */
	public void run(){
		
			while(!nihuta.manglabi){
				try{Thread.sleep(kiirus);}catch(Exception e){}			
				if(paus){
				}else{
					tabelis=nihuta.alla(kujundiX,kujundiY,kujund);	
					kujund=nihuta.liikuv_kujund;
					kujundiY=nihuta.y;
					kujundiX=nihuta.x;
				
					repaint();
				}
			}
			try{gameover();}catch(Exception e){
				//System.out.println("no krt, jälle kala:"+e);
			}
		
	}
	/*
	 * Lööb mänguväljad nulli
	 */
	protected void algvaartusta(){
			for(int i=0;i<20;i++){
				for(int j=0;j<10;j++){
					tabelis[i][j]=false;
					// lihtsalt testiks
					if((i==0)&&(j==0)||((i==0)&&(j==1))||((i==0)&&(j==2))||((i==0)&&(j==3))||((i==0)&&(j==4))||((i==0)&&(j==5))||((i==0)&&(j==6))||((i==0)&&(j==7))){
						tabelis[i][j]=true;
					}
				}
			}
			//System.out.println("tabel algvaartustatud");
	}
	protected void gameover() throws Exception{		
		//System.out.println("statistika");
		g.setColor(255, 255, 255);
     	g.fillRect(0, 0, getWidth(), getHeight());	     				
     	g.setColor(0, 0, 0);
		
	}
}
