⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 car_displayable.java

📁 这是我原创的
💻 JAVA
字号:
/*============================
遊戲主控程式

創建時間:2007.1.13
作者:漫無目的
MSN:capaom@hotmail.com


============================*/
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;

public class Car_Displayable extends GameCanvas implements Runnable
{
	private boolean isPlay; //判斷是否已經開始
	private long delay; //線程延迟
	private int currentX,currentY; //圖形的X和Y軸
	private int width; //螢幕寬度
	private int height; //螢幕高度
//	private Sprite Start_Sprite;//啟動精靈
//	private Sprite Load_Sprite;//讀取精靈
	private Sprite Road_Sprite; //道路精靈
	private int Road_Index;//道路的動畫使用Index
	private Sprite Car_Sprite; //車輛精靈
	private boolean collides=false;//碰撞開關
	private Sprite Balk_Sprite; //障礙精靈
	private Sprite Slow_Sprite; //物品精靈
	private boolean slow_Collides=false;//物品碰撞開關
	private long Score;//得分(時間)
	private long Count_Start_Time=System.currentTimeMillis();//啟始時間
	private long Count_End_Time;//結束時間
	private Random random=new Random(System.currentTimeMillis());//隨機類申明
	private int Random_Balk;//隨機障礙 判斷值
	private int Random_Slow;//隨機物品 判斷值
	private int Balk_X;//障礙X座標
	private boolean random_to_end=false;//判斷障礙Y座標是否已到盡頭
	private int Balk_Y=0;//障礙Y座標

	public Car_Displayable() throws Exception
	{
		/*---構造函數---*/
		super(true);
//		setFullScreenMode(true);
		width=getWidth();
		height=getHeight();
		currentX=width/5;
		currentY=height-30;
		delay=20;

		/*---讀取相關圖形文件---*/
		/*Image Start=Image.createImage("/Start.png");
		Start_Sprite=new Sprite(Start);
		Image Load=Image.createImage("/Load.png");
		Load_Sprite=new Sprite(Load);*/
		Image Road=Image.createImage("/Road.png");
		Road_Sprite=new Sprite(Road,176,200);
		Image Balk=Image.createImage("/Balk.png");
		Balk_Sprite=new Sprite(Balk);
		Image Slow=Image.createImage("/Slow.png");
		Slow_Sprite=new Sprite(Balk);
		Image Car=Image.createImage("/Car.png");
		Car_Sprite=new Sprite(Car);

/*		layerManager=new LayerManager();
		layerManager.append(Start_Sprite);
		layerManager.append(Load_Sprite);
		layerManager.append(Road_Sprite);
		layerManager.append(Car_Sprite);
		layerManager.append(Balk_Sprite);*/
	}

	public void start()
	{
		isPlay=true;
		Thread t=new Thread(this);
		t.start();
	}

	public void stop()
	{
		isPlay=false;
	}

	public void run()
	{
		
		Graphics g=getGraphics();
		
		/*===遊戲啟動畫面===
		try
		{	
			drawScreen_menu(g);
			Thread.sleep(1000);//啟動畫面等待1000毫秒
		}
		catch (InterruptedException ie)
		{
			ie.printStackTrace();
		}*/
		
		while(isPlay==true)
		{
			
			input_game();//遊戲中的控制
			drawScreen_Road(g);//道路的繪製
			
			/*===障礙的繪製===*/
			if(random_to_end==true)//Y座標已到盡頭
			{
				Random_Balk=Math.abs(random.nextInt()%2)+1;//隨機産生1,2之間一個數
				random_to_end=false;
			}
			Count_End_Time=System.currentTimeMillis();//當前時間

			if(Random_Balk==1)//如果隨機為1,則放左邊否則就放置右邊
			{
				Balk_X=getWidth()/5-10;
				Balk_Y+=5;
				//如果遊戲已經超過5秒,加快速度,超過15秒,更快!
				if(((Count_End_Time/1000)-(Count_Start_Time/1000))>=5 && ((Count_End_Time/1000)-(Count_Start_Time/1000))<15 && slow_Collides==false)
				{
					Balk_Y+=10;
				}
				else if(((Count_End_Time/1000)-(Count_Start_Time/1000))>=15 && ((Count_End_Time/1000)-(Count_Start_Time/1000))<20 && slow_Collides==false)
				{
					Balk_Y+=12;
				}
				else if(((Count_End_Time/1000)-(Count_Start_Time/1000))>=20 && ((Count_End_Time/1000)-(Count_Start_Time/1000))<40 && slow_Collides==false)
				{
					Balk_Y+=15;
				}
				else if(((Count_End_Time/1000)-(Count_Start_Time/1000))>=60 && ((Count_End_Time/1000)-(Count_Start_Time/1000))<100)
				{
					Balk_Y+=23;
				}
				if(Balk_Y>=getHeight())//Y座標如果已到盡頭
				{
					Balk_Y=0;			//設置Y座標複位
					random_to_end=true;
				}
			}
			else
			{
				Balk_X=getWidth()/5+76;
				Balk_Y+=5;
				if(((Count_End_Time/1000)-(Count_Start_Time/1000))>=5 && ((Count_End_Time/1000)-(Count_Start_Time/1000))<15)
				{
					Balk_Y+=10;
				}
				else  if(((Count_End_Time/1000)-(Count_Start_Time/1000))>=15 && ((Count_End_Time/1000)-(Count_Start_Time/1000))<20)
				{
					Balk_Y+=12;
				}
				else if(((Count_End_Time/1000)-(Count_Start_Time/1000))>=20 && ((Count_End_Time/1000)-(Count_Start_Time/1000))<60)
				{
					Balk_Y+=15;
				}
				else if(((Count_End_Time/1000)-(Count_Start_Time/1000))>=60 && ((Count_End_Time/1000)-(Count_Start_Time/1000))<100)
				{
					Balk_Y+=23;
				}
				if(Balk_Y>=getHeight())
				{
					Balk_Y=0;
					random_to_end=true;
				}
			}
			drawScreen_Balk(g);
			
			/*===車輛的碰撞及繪製===*/
			if(Car_Sprite.collidesWith(Balk_Sprite,true))
			{
				collides=true;
			}
			drawScreen_Car(g);

			/*===物品的碰撞及繪製===*/
			if(random_to_end==true)
			{
				Random_Slow=Math.abs(random.nextInt()%2)+1;//隨機産生1,10之間一個數
			}
			
			if(Random_Slow==1)
			{
				
				if(Slow_Sprite.collidesWith(Car_Sprite,true))
				{
					slow_Collides=true;
				}
				drawScreen_Slow(g);
			}

			try
			{
				Thread.sleep(delay);
			}
			catch (InterruptedException ie)
			{
				ie.printStackTrace();
			}
		}
	}

	/*private void input_menu()
	{
		int keyStates=getKeyStates();
		//Up
		if((keyStates & UP_PRESSED)!=0)
			currentY=Math.max(0,currentY-1);
		//Down
		if((keyStates & DOWN_PRESSED)!=0)
			if(currentY+10<height)
			currentY=Math.min(height,currentY+1);
	}*/

	private void input_game()
	{
		int keyStates=getKeyStates();
		//Left
		if((keyStates & LEFT_PRESSED)!=0)
		{
			/*---如果當前車輛X軸小於或等於螢幕寬度除以4,則不變---*/
			if(currentX<=width/5)
			{
				currentX=currentX;
			}
			else
			{
			currentX=Math.max(0,currentX-87);
			}
		}	
		//Right
		if((keyStates & RIGHT_PRESSED)!=0)
		{
			/*--如果當前車輛X軸大於等螢幕寬度除以3,則不變;只要比向左的少就好--*/
			if(currentX>=width/3)
			{
				currentX=currentX;
			}
			else if(currentX+5<width)
			{
				currentX=Math.min(width,currentX+87);
			}
		}
		//軟鍵A
		if((keyStates & GAME_A_PRESSED)!=0)
		{
			System.out.println("aaaaaaaaa");
		}
	}

	/*private void drawScreen_menu(Graphics g)
	{
		//啟動畫面的産生
		g.setColor(0xffffff);
		g.fillRect(0,0,getWidth(),getHeight());
		Start_Sprite.paint(g);
		//g.drawString("load",width/2,height/2,Graphics.TOP|Graphics.LEFT);

		讀取畫面的産生
		Load_Sprite.setPosition(currentX/2+5,currentY/2);
		Load_Sprite.paint(g);
		flushGraphics();
	}*/

	private void drawScreen_Road(Graphics g)
	{
		//道路的産生
		Road_Index=(Road_Index+1)%2;//産生道路動畫Index
		Road_Sprite.setFrame(Road_Index);//産生動畫
		g.fillRect(0,0,width,height);
		Road_Sprite.paint(g);
	}

	private void drawScreen_Balk(Graphics g)
	{
		//障礙産生
		Balk_Sprite.setPosition(Balk_X,Balk_Y);
		Balk_Sprite.paint(g);
	}

	private void drawScreen_Car(Graphics g)
	{
		//車輛的産生
		Car_Sprite.setPosition(currentX,currentY);
		Car_Sprite.paint(g);
		flushGraphics();
		if(collides==true)
		{
			//如果車輛碰撞
			drawScreen_Over(g);
		}
	}

		private void drawScreen_Slow(Graphics g)
	{
		//物品産生
		Slow_Sprite.setPosition(getWidth()/2,getHeight()/2);
		Slow_Sprite.paint(g);
	}

	private void drawScreen_Over(Graphics g)
	{
		//遊戲産生
		g.setColor(0xff0000);
		Score=((Count_End_Time/1000)-(Count_Start_Time/1000));
		g.drawString("=== GAME OVER ===",getWidth()/2,getHeight()/2,Graphics.TOP|Graphics.HCENTER);
		g.drawString("您堅持了 "+Score+" 秒",getWidth()/2,getHeight()/2+10,Graphics.TOP|Graphics.HCENTER);
		flushGraphics();
		isPlay=false;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -