?? chengtie.java
字號:
import java.awt.*;
import java.applet.*;
public class Chengtie extends Applet implements Runnable
{
Thread t=null;
//音樂
AudioClip audioRing;
AudioClip audioLine;
AudioClip audioStop;
AudioClip audio13;
public final static int numOfTrain=28;
public final static int numOfRingTrain=8;
public final static int numOfOneTrain=10;
public final static int numOf13Train=10;
public final static int numOfStation=55;
static Train trains[]=new Train[numOfTrain];
static Station stations[]=new Station[numOfStation];
//定義城鐵方向常量
public final static int EAST=0;
public final static int NORTH=270;
public final static int WEST=180;
public final static int SOUTH=90;
public final static int SOUTHEAST=60;
public final static int NORTHWEST=240;
public final static int NORTHWESTL=243;
public final static int SOUTHEASTL=63;
public final static int SOUTHEASTR=16;
public final static int NORTHWESTR=196;
//定義地圖位置常量
public final static int LINE_LEFT=2;
public final static int LINE_RIGHT=630;
public final static int LINE_TOP=536;
public final static int RING_LEFT=290;
public final static int RING_RIGHT=500;
public final static int RING_TOP=410;
public final static int RING_BOTTOM=582;
public final static int T_TOP=123;
public final static int T_LEFT=149;
public final static int T_MIDDLEX=330;
public final static int T_MIDDLEY=167;
public final static int T_RIGHT=490;
public final static int T_BOTTOM=395;
public final static int T_STARX=285;
public final static int T_ENDX=490;
//采用雙緩沖技術后臺繪制圖像
Image offScreenImage;
Image backGroundImage;
Image stopImage,stopInImage,playImage,playInImage;
Graphics offScreenGraphics;
MediaTracker mediatracker;
int imgButtonLeft=330;
int imgButtonHeight=200;
Label label1,label2;
Choice choiceWhichTrain;
TextField textWhichSpeed;
TextField textStatus;
Button buttonChangeSpeed;
public int traintoBeTraced=0; //被跟蹤運行狀況的列車號
public boolean trainPaused=false; //列車是否處于暫停狀態
boolean moveDisplay=false; //是否顯示運行狀態
int sleeptime=150;
public void init()
{
t=new Thread(this);
//設置各列車的初始方向及位置
for(int i=0;i<4;i++) //0-3 西直門站
trains[i]=new Train(RING_LEFT,431,NORTH,Color.red,i,-55*i,"環線");
setVisible(false);
for(int i=4;i<8;i++) //4-7 西直門站
trains[i]=new Train(RING_LEFT,431,SOUTH,Color.red,i,-55*(i-4),"環線");
setVisible(false);
for(int i=0;i<5;i++) //8-12 蘋果園站
trains[i+8]=new Train(LINE_LEFT,510,SOUTHEAST,Color.green,
i+numOfRingTrain,-40*i,"一線");
for(int i=5;i<10;i++) //13-17 四惠東站
trains[i+8]=new Train(LINE_RIGHT,LINE_TOP,WEST,Color.green,
i+numOfRingTrain,-40*(i-5),"一線");
for(int i=0;i<5;i++) //18-22 北京北站
trains[i+18]=new Train(T_STARX,T_BOTTOM,NORTHWESTL,Color.blue,i+18,-50*i,"13號線"); setVisible(false);
for(int i=5;i<10;i++) //23-27 東直門
trains[i+18]=new Train(T_ENDX,T_BOTTOM,NORTH,Color.blue,i+18,-50*(i-5),"13號線");
Station.initStation(stations);
mediatracker=new MediaTracker(this);
offScreenImage=createImage(this.size().width,this.size().height);
showStatus("Loading image");
//載入圖像
backGroundImage=getImage(getCodeBase(),"Chengtie.jpg");
waitLoadingImage(backGroundImage);
stopImage=getImage(getCodeBase(),"stop.gif");
waitLoadingImage(stopImage);
stopInImage=getImage(getCodeBase(),"stop.in.gif");
waitLoadingImage(stopInImage);
playImage=getImage(getCodeBase(),"play.gif");
waitLoadingImage(playImage);
playInImage=getImage(getCodeBase(),"play.in.gif");
waitLoadingImage(playInImage);
showStatus("Images has been loaded.");
setLayout(null);
label1=new Label("選擇列車:");
choiceWhichTrain=new Choice();
for(int i=0;i<numOfTrain;i++)
choiceWhichTrain.addItem("第"+String.valueOf(i)+"號列車");
textStatus=new TextField(23);
label2=new Label("輸入列車運行速度(5-10):");
textWhichSpeed=new TextField("5",2);
buttonChangeSpeed=new Button("改變速度");
add(label1);
add(choiceWhichTrain);
add(textStatus);
add(label2);
add(textWhichSpeed);
add(buttonChangeSpeed);
label1.setBounds(10,20,60,20);
choiceWhichTrain.setBounds(70,20,85,20);
textStatus.setBounds(155,20,185,20);
label2.setBounds(10,200,135,20);
textWhichSpeed.setBounds(10,220,60,20);
buttonChangeSpeed.setBounds(70,220,75,20);
audioRing=getAudioClip(getCodeBase(),"randj.au");
audioLine=getAudioClip(getCodeBase(),"lionking.au");
audioStop=getAudioClip(getCodeBase(),"ding.au");
audio13=getAudioClip(getCodeBase(),"audio13.au");
t.start();
t.suspend();
}
public void start()
{ if(traintoBeTraced>=0&&traintoBeTraced<8)
{
audioRing.loop();
audioLine.stop();
audio13.stop();
}
t.resume();
}
public void stop()
{
if(traintoBeTraced>=0&&traintoBeTraced<numOfRingTrain)
audioRing.stop();
else if(traintoBeTraced>=numOfRingTrain&&traintoBeTraced<18)
audioLine.stop();
else if(traintoBeTraced>=18&&traintoBeTraced<28)
audio13.stop();
t.suspend();
}
public void destroy()
{
if(t!=null){t.stop();t=null;}
}
public void run()
{
while(true) //實現到站暫停及顯示跟蹤列車情況
{
for(int i=0;i<numOfTrain;i++)
{
if(trains[i].isAtStation()&&trains[i].hasPausedTimes<=trains[i].shouldPausedTimes)
{
trains[i].isMoving=false;
trains[i].hasPausedTimes++;
if(i==traintoBeTraced)
{
showStatus(trains[i].traintype+"第"+String.valueOf(traintoBeTraced)+
"號列車達到"+trains[i].atWhichStation()+"站");
if(trains[i].hasPausedTimes==1)
{
audioStop.play();
textStatus.setText(trains[i].traintype+"第"+
String.valueOf(traintoBeTraced)+"號列車到達"+
trains[i].atWhichStation()+"站");
}
moveDisplay=false;
}
}
else
{
trains[i].isMoving=true;
trains[i].hasPausedTimes=0;
if((i==traintoBeTraced)&&(!moveDisplay))
{
showStatus(trains[i].traintype+"第"+
String.valueOf(traintoBeTraced)+"號列車正在運行中");
textStatus.setText(trains[i].traintype+"第"+
String.valueOf(traintoBeTraced)+"號列車正在運行中");
moveDisplay=true;
}
}
}
//控制一線地鐵改變方向
for(int i=8;i<18;i++)
{
if(trains[i].positionX==LINE_RIGHT&&trains[i].isMoving)
trains[i].setDirection(WEST);//四惠東->四惠
if(trains[i].positionX==LINE_LEFT&&trains[i].isMoving)
trains[i].setDirection(SOUTHEAST);//蘋果園 古城
if(trains[i].positionX==15&&trains[i].direction==SOUTHEAST)
trains[i].setDirection(EAST);// 古城八角游樂園
if(trains[i].positionX==15&&trains[i].direction==WEST)
trains[i].setDirection(NORTHWEST);// 古城 蘋果園
}
//控制環線地鐵改變方向
for(int i=0;i<8;i++)
{
if((trains[i].positionX==RING_RIGHT-10)&&((trains[i].positionY<=RING_TOP&&
trains[i].direction==NORTH)||(trains[i].positionY>=RING_BOTTOM-10
&&trains[i].direction==SOUTH)))
{
trains[i].setDirection(WEST);//運行在東環的列車,達到盡頭后向西行駛
continue;
}
if((trains[i].positionY==RING_BOTTOM-10)&&((trains[i].positionX>=RING_RIGHT-10
&&trains[i].direction==EAST)||(trains[i].positionX<=RING_LEFT&&
trains[i].direction==WEST)))
{
trains[i].setDirection(NORTH);//運行在南環的列車到盡頭后向北行駛
continue;
}
if((trains[i].positionX==RING_LEFT)&&((trains[i].positionY>=RING_BOTTOM-10
&&trains[i].direction==SOUTH)||(trains[i].positionY<=RING_TOP&&
trains[i].direction==NORTH)))
{
trains[i].setDirection(EAST);// 運行在西環的列車到盡頭后向東行駛
continue;
}
if((trains[i].positionY==RING_TOP)&&((trains[i].positionX<=RING_LEFT
&&trains[i].direction==WEST)||(trains[i].positionX>=RING_RIGHT-10&&
trains[i].direction==EAST)))
{
trains[i].setDirection(SOUTH);// 運行在北環的列車到盡頭后向南行駛
continue;
}
}
//控制13號線列車改變方向
for(int i=18;i<28;i++)
{
if((trains[i].positionY<=T_TOP)&&trains[i].direction==NORTHWESTL)
{
trains[i].setDirection(EAST);
continue;
}
if((trains[i].positionX>=T_MIDDLEX)&&trains[i].direction==EAST)
{
trains[i].setDirection(SOUTHEASTR);
continue;
}
if((trains[i].positionY>=T_MIDDLEY)&&trains[i].direction==SOUTHEASTR)
{
trains[i].setDirection(SOUTH);
continue;
}
if((trains[i].positionY>=T_BOTTOM)&&trains[i].direction==SOUTH)
{
trains[i].setDirection(NORTH);
continue;
}
if((trains[i].positionY<=T_MIDDLEY-3)&&trains[i].direction==NORTH)
{
trains[i].setDirection(NORTHWESTR);
continue;
}
if((trains[i].positionX<=T_MIDDLEX) &&trains[i].direction==NORTHWESTR)
{
trains[i].setDirection(WEST);
continue;
}
if((trains[i].positionX<=T_LEFT)&&trains[i].direction==WEST)
{
trains[i].setDirection(SOUTHEASTL);
continue;
}
if((trains[i].positionX>=T_STARX)&&trains[i].direction==SOUTHEASTL)
{
trains[i].setDirection(NORTHWESTL);
continue;
}
}
//移動列車
for(int i=0;i<numOfTrain;i++){trains[i].move();}
//防止一線列車超出軌道
for(int i=8;i<18;i++)
{
if(trains[i].positionX>LINE_RIGHT)trains[i].setPosition(LINE_RIGHT,LINE_TOP);
if(trains[i].positionX<LINE_LEFT)trains[i].setPosition(LINE_LEFT,510);
if(trains[i].positionY>LINE_TOP)trains[i].setPosition(15,LINE_TOP);
if(trains[i].positionX<15&&trains[i].positionY==LINE_TOP)trains[i].setPosition(15,LINE_TOP);
}
//防止環線地鐵超出軌道
for(int i=0;i<8;i++)
{
if(trains[i].positionX<RING_LEFT)
{
trains[i].positionX=RING_LEFT;
continue;
}
if(trains[i].positionX>RING_RIGHT-10)
{
trains[i].positionX=RING_RIGHT-10;
continue;
}
if(trains[i].positionY<RING_TOP)
{
trains[i].positionY=RING_TOP;
continue;
}
if(trains[i].positionY>RING_BOTTOM-10)
{
trains[i].positionY=RING_BOTTOM-10;
continue;
}
}
//防止13號線列車超出軌道
for(int i=18;i<28;i++)
{
if(trains[i].positionY<=T_TOP&&trains[i].direction==NORTHWESTL)
{
trains[i].setPosition(T_LEFT,T_TOP);
continue;
}
if(trains[i].positionX<=T_LEFT&&trains[i].direction==WEST)
{
trains[i].setPosition(T_LEFT,T_TOP);
continue;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -