/*
 * step4.java
 *
 * DATE : 2005/11/28 13:06
 */
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import java.io.*;

/**
 * step4
 *
 * @author NAME
 */
public class step4 extends IApplication {

	MainCanvas mc;

	public void start() {
		/*
		 * The program of IApplication is written here.
		 */
		System.out.println("Start IApplication");

		mc = new MainCanvas();

		//mc.init();
		Display.setCurrent(mc);
	}


}


class MainCanvas extends Canvas implements Runnable {

	Image		imgMain;				//メインイメージ：最終形態（キャンバス）
	Image		imgLoadResouce1;		//リソースからの読み込みイメージ：作業域
	Image		imgLoadResouce2;		//リソースからの読み込みイメージ：作業域
	Image		imgTemp;				//作業用イメージ
	Graphics	graMain;				//グラフィックオブジェクト

	int intWidth;						//キャンバスの幅
	int intHeight;						//キャンバスの高さ
	int intResourse1X;					//リソース1を描画するx座標
	int intResourse1Y;					//リソース1を描画するy座標
	int intResourse2X;					//リソース2を描画するx座標
	int intResourse2Y;					//リソース2を描画するy座標

	private Thread thread;				//スレッド

	int intTime;						//タイムカウント

	String strKeyEvent;					//キーイベントが発生した際にパラメータを文字として格納

	MainCanvas() 
	{
		//キャンバスのサイズをセット
		intWidth = 240;
		intHeight = 240;
		intResourse1X = 0;
		intResourse1Y = 0;
		intResourse2X = 0;
		intResourse2Y = 0;

		intTime = 0;
		strKeyEvent = "";

		//画像が取得できないときヌルポになるので初期化
		imgMain = Image.createImage(intWidth, intHeight);
		imgLoadResouce1 = Image.createImage(intWidth, intHeight);
		imgLoadResouce2 = Image.createImage(intWidth, intHeight);
		graMain = imgMain.getGraphics();

		//リソースからの読み込み
		try
		{
			MediaImage mediaImg = MediaManager.getImage("resource:///image1.gif");
			mediaImg.use();
			imgLoadResouce1 = mediaImg.getImage();
			mediaImg = MediaManager.getImage("resource:///image2.gif");
			mediaImg.use();
			imgLoadResouce2 = mediaImg.getImage();
		}
		catch( ConnectionException e)
		{}
		catch(IOException e)
		{}

		graMain.lock();
		//キャンバスをクリア
		graMain.clearRect(0, 0, intWidth, intHeight);
		//リソース1を描画
		graMain.drawImage(imgLoadResouce1, 0, 0);
		graMain.unlock(true);

	}

	void init()
	{
		//スレッド作成・スタート
		thread = new Thread(this);
		thread.start();
	}


	public void paint(Graphics g)
	{//repaint()が呼び出されると実行される

		//imgMain再描画
		g.lock();
		//g.clearRect(0, 0, intWidth, intHeight);
		g.drawImage(imgMain, 0, 0);
		g.unlock(true);

		//System.out.println("paint");
	}

	public void processEvent(int intType,int intParam)
	{//プロセスイベントを取得

		if(intType == Display.KEY_RELEASED_EVENT)
		{//キーアップイベントの時

			if(intParam == Display.KEY_UP)
			{
				System.out.println("上押した");
				strKeyEvent = "KEY_UP";
				init();
			}

			if(intParam == Display.KEY_DOWN)
			{
				System.out.println("下押した");
				strKeyEvent = "KEY_DOWN";
				init();
			}

			if(intParam == Display.KEY_LEFT)
			{
				System.out.println("左押した");
				strKeyEvent = "KEY_LEFT";
				init();
			}

			if(intParam == Display.KEY_RIGHT)
			{
				System.out.println("右押した");
				strKeyEvent = "KEY_RIGHT";
				init();
			}

		}
	}


	public void run()
	{
		//作ったスレッドと現在のスレッドが一致しているときループ
		Thread thisThread = Thread.currentThread();
		while(thread == thisThread)
		{

			try
			{
				//10ミリ秒スリープさせる
				Thread.sleep(10);
			}
			catch(InterruptedException e)
			{}

			if(intTime == 1000)
			{	//タイムカウントをリセット
				intTime = 0;
			}
			else
			{	//タイムをカウント
				intTime = intTime + 10;
			}

			if(strKeyEvent == "KEY_UP")
			{
				if(intResourse1Y > -240)
				{	//リソース描画Y座標をマイナス
					intResourse1X = 0;
					intResourse1Y = intResourse1Y - 24;
					intResourse2X = 0;
					intResourse2Y = 240;
				}
				else
				{	//threadを破棄し、ループ終了
					thread = null;
					//数値を初期化
					intResourse1X = 0;
					intResourse1Y = 0;
					intResourse2X = 0;
					intResourse2Y = 0;
					//イメージ入れ替え
					imgTemp = imgLoadResouce1;
					imgLoadResouce1 = imgLoadResouce2;
					imgLoadResouce2 = imgTemp;
				}
			}
			else if(strKeyEvent == "KEY_DOWN")
			{
				if(intResourse1Y < 240)
				{	//リソース描画Y座標をプラス
					intResourse1X = 0;
					intResourse1Y = intResourse1Y + 24;
					intResourse2X = 0;
					intResourse2Y = -240;
				}
				else
				{	//threadを破棄し、ループ終了
					thread = null;
					//数値を初期化
					intResourse1X = 0;
					intResourse1Y = 0;
					intResourse2X = 0;
					intResourse2Y = 0;
					//イメージ入れ替え
					imgTemp = imgLoadResouce1;
					imgLoadResouce1 = imgLoadResouce2;
					imgLoadResouce2 = imgTemp;
				}
			}
			else if(strKeyEvent == "KEY_LEFT")
			{
				if(intResourse1X > -240)
				{	//リソース描画X座標をマイナス
					intResourse1X = intResourse1X - 24;
					intResourse1Y = 0;
					intResourse2X = 240;
					intResourse2Y = 0;
				}
				else
				{	//threadを破棄し、ループ終了
					thread = null;
					//数値を初期化
					intResourse1X = 0;
					intResourse1Y = 0;
					intResourse2X = 0;
					intResourse2Y = 0;
					//イメージ入れ替え
					imgTemp = imgLoadResouce1;
					imgLoadResouce1 = imgLoadResouce2;
					imgLoadResouce2 = imgTemp;
				}
			}
			else if(strKeyEvent == "KEY_RIGHT")
			{
				if(intResourse1X < 240)
				{	//リソース描画X座標をプラス
					intResourse1X = intResourse1X + 24;
					intResourse1Y = 0;
					intResourse2X = -240;
					intResourse2Y = 0;
				}
				else
				{	//threadを破棄し、ループ終了
					thread = null;
					//数値を初期化
					intResourse1X = 0;
					intResourse1Y = 0;
					intResourse2X = 0;
					intResourse2Y = 0;
					//イメージ入れ替え
					imgTemp = imgLoadResouce1;
					imgLoadResouce1 = imgLoadResouce2;
					imgLoadResouce2 = imgTemp;
				}
			}

			//System.out.println(strKeyEvent);

			if(thread != null)
			{
				//graMainを再構築
				graMain.lock();
				graMain.clearRect(0, 0, intWidth, intHeight);
				graMain.drawImage(imgLoadResouce1, intResourse1X, intResourse1Y);
				graMain.drawImage(imgLoadResouce2, intResourse2X + intResourse1X, intResourse2Y + intResourse1Y);

				//タイムカウントを描画
				if((intTime / 100) >= 10)
				{
					graMain.drawString(Integer.toString((intTime / 100)) + "/10", 200, 220);
				}
				else
				{
					graMain.drawString("0" + Integer.toString((intTime / 100)) + "/10", 200, 220);
				}

				graMain.unlock(true);

				//再描画
				repaint();
			}
		}
	}
}
