📄 car_displayable.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 + -