?? chengtie.java
字號:
if(trains[i].positionX<=T_MIDDLEX&&trains[i].direction==NORTHWESTR)
{
trains[i].setPosition(T_MIDDLEX,T_TOP);
continue;
}
if(trains[i].positionX>=T_MIDDLEX&&trains[i].direction==EAST)
{
trains[i].setPosition(T_MIDDLEX,T_TOP+1);
continue;
}
if(trains[i].positionX>=T_RIGHT&&trains[i].direction==SOUTHEASTR)
{
trains[i].setPosition(T_RIGHT,T_MIDDLEY);
continue;
}
if(trains[i].positionY<=T_MIDDLEY-3&&trains[i].direction==NORTH)
{
trains[i].setPosition(T_RIGHT,T_MIDDLEY-3);
continue;
}
if((trains[i].positionX<=T_ENDX)&&(trains[i].positionY>=T_BOTTOM)
&&trains[i].direction==SOUTH)
{
trains[i].setPosition(T_ENDX,T_BOTTOM);
continue;
}
if(/*(trains[i].positionX>=T_STARX)&&*/(trains[i].positionY>=T_BOTTOM)
&&trains[i].direction==SOUTHEASTL)
{
trains[i].setPosition(T_STARX,T_BOTTOM);
continue;
}
}
repaint();
try {Thread.sleep(sleeptime);}
catch(InterruptedException e) {break;}
}
}
public void paint(Graphics g)
{
offScreenGraphics=offScreenImage.getGraphics();
offScreenGraphics.drawImage(backGroundImage,0,0,this);
if(!trainPaused)
{
offScreenGraphics.drawImage(stopImage,imgButtonLeft,imgButtonHeight,this);
offScreenGraphics.drawImage(playInImage,imgButtonLeft,imgButtonHeight+80,this);
}
else
{
offScreenGraphics.drawImage(stopInImage,imgButtonLeft,imgButtonHeight,this);
offScreenGraphics.drawImage(playImage,imgButtonLeft,imgButtonHeight+80,this);
}
for(int i=0;i<numOfTrain;i++)
trains[i].paint(offScreenGraphics);
g.drawImage(offScreenImage,0,-50,this);//后臺繪出圖像
}
public void update(Graphics g)
{
paint(g);
}
//處理控制事件
public boolean action(Event e,Object o)
{
if(e.target instanceof Choice)
{
traintoBeTraced=choiceWhichTrain.getSelectedIndex();
showStatus(trains[traintoBeTraced].traintype+"第"+
String.valueOf(traintoBeTraced)+"列車號");
textStatus.setText(trains[traintoBeTraced].traintype+"第"+
String.valueOf(traintoBeTraced)+"列車號");
if(traintoBeTraced>=0&&traintoBeTraced<numOfRingTrain)
{
audioLine.stop();
audio13.stop();
audioRing.loop();
}
else if(traintoBeTraced>=8&&traintoBeTraced<18)
{
audioLine.loop();
audioRing.stop();
audio13.stop();
}
else if(traintoBeTraced>=18&&traintoBeTraced<numOfTrain)
{
audioRing.stop();
audio13.loop();
audioLine.stop();
}
return true;
}
if(e.target instanceof Button)
{
int userInput;
userInput=Integer.parseInt(textWhichSpeed.getText());
if(userInput<=5)
{userInput=5;textWhichSpeed.setText(String.valueOf(5));}
if(userInput>=10)
{userInput=10;textWhichSpeed.setText(String.valueOf(10));}
if(userInput<=10&&userInput>=1)
{
for(int i=0;i<numOfTrain;i++)
trains[i].speed=userInput;
}
else
{
textWhichSpeed.setText(String.valueOf(trains[0].speed));
}
return true;
}
return true;
}
public boolean mouseDown(Event e,int x,int y)
{
int width=playImage.getWidth(this);
int height=playImage.getHeight(this);
if(x>=imgButtonLeft&&x<(imgButtonLeft+width))
{
//如果暗下停止按鈕
if((y>=imgButtonHeight-50)&&(y<(imgButtonHeight+height-50))&&!trainPaused)
{
t.suspend();
trainPaused=true;
repaint();
}
//如果按下播放按鈕
else if((y>=imgButtonHeight+30)&&(y<(imgButtonLeft+30+height))&&trainPaused)
{t.resume();
trainPaused=false;
repaint();
}
}
return true;
}
public void waitLoadingImage(Image img)
{
mediatracker=new MediaTracker(this);
mediatracker.addImage(img,0);
try
{
mediatracker.waitForID(0);
}
catch(InterruptedException e){}
}
}
class Train extends Panel
{
int positionX,positionY;
private int width,height;
int direction, speed;
boolean isMoving;
int hasPausedTimes;
int shouldPausedTimes=2;
Color color;
int trainID=0;
String traintype;
private int nextID=0;
Train()
{
this.width=10;
this.height=10;
this.speed=5;//每次移動5個象素
this.isMoving=true;
this.trainID=nextID++;
}
Train(int x,int y,int direction)
{
this();
this.positionX=x;
this.positionY=y;
this.direction=direction;
}
Train(int x,int y,int direction,Color c)
{
this(x,y,direction);
this.color=c;
}
Train(int x,int y,int direction,Color c,int tID,int stayTimes,String type)
{
this(x,y,direction);
this.color=c;
this.trainID=tID;
this.hasPausedTimes=stayTimes;
this.traintype=type;
}
public void setTrain(int x,int y,int direction)
{
this.positionX=x;
this.positionY=y;
this.direction=direction;
}
public void setDirection(int direction)
{
this.direction=direction;
}
public void setPosition(int x,int y)
{
positionX=x;
positionY=y;
}
//列車是否到站
public boolean isAtStation()
{
for(int i=0;i<Chengtie.numOfStation;i++)
{
if(positionX==Chengtie.stations[i].x&&positionY==Chengtie.stations[i].y)
return true;
}
return false;
}
//返回列車到站站名
public String atWhichStation()
{
for(int i=0;i<Chengtie.numOfStation;i++)
{
if(positionX==Chengtie.stations[i].x&&positionY==Chengtie.stations[i].y)
return Chengtie.stations[i].stationName;
}
return"";
}
//實現列車運行
public void move()
{
if(isMoving)
{
int nextX,nextY;
nextX=positionX+(int)(speed*Math.cos((2*Math.PI*direction)/360));
nextY=positionY+(int)(speed*Math.sin((2*Math.PI*direction)/360));
int x_min=Math.min(nextX,positionX);
int x_max=Math.max(nextX,positionX);
int y_min=Math.min(nextY,positionY);
int y_max=Math.max(nextY,positionY);
for(int i=0;i<Chengtie.numOfStation;i++)
{
if(Chengtie.stations[i].x<x_max&&Chengtie.stations[i].x>x_min
&&y_min==y_max&&y_min==Chengtie.stations[i].y)
{
positionX=Chengtie.stations[i].x;
positionY=Chengtie.stations[i].y;
return;
}
if(Chengtie.stations[i].y<y_max&&Chengtie.stations[i].y>y_min
&&x_min==x_max&&x_min==Chengtie.stations[i].x)
{
positionX=Chengtie.stations[i].x;
positionY=Chengtie.stations[i].y;
return;
}
}
this.positionX=nextX;
this.positionY=nextY;
}
}
//畫出列車
public void paint(Graphics g)
{
int px[]={positionX,positionX+10,positionX+15,positionX+5,positionX};
int py[]={positionY,positionY,positionY+8,positionY+8,positionY};
g.setColor(Color.yellow);
g.setXORMode(Color.red);
g.fillPolygon(px,py,5);
g.setPaintMode();
g.setColor(Color.red);
g.drawString(String.valueOf(trainID),positionX,positionY);
}
}
class Station
{
int x,y;
String stationName;
public Station(int x,int y,String name)
{
this.x=x;
this.y=y;
this.stationName=name;
}
public static void initStation(Station[] stations)
{
stations[13]=new Station(Chengtie.RING_LEFT,492,"阜城門");
stations[14]=new Station(Chengtie.RING_LEFT,466,"車公莊");
stations[15]=new Station(Chengtie.RING_LEFT,431,"西直門");
stations[16]=new Station(315,Chengtie.RING_TOP,"積水潭");
stations[17]=new Station(360,Chengtie.RING_TOP,"鼓樓");
stations[18]=new Station(407,Chengtie.RING_TOP,"安定門");
stations[19]=new Station(450,Chengtie.RING_TOP,"雍和宮");
stations[20]=new Station(Chengtie.RING_RIGHT-10,431,"東直門");
stations[21]=new Station(Chengtie.RING_RIGHT-10,466,"東十四條");
stations[22]=new Station(Chengtie.RING_RIGHT-10,492,"朝陽門");
stations[23]=new Station(Chengtie.RING_RIGHT-10,Chengtie.LINE_TOP,"建國門");
stations[24]=new Station(294,Chengtie.RING_BOTTOM-10,"長椿街");
stations[25]=new Station(325,Chengtie.RING_BOTTOM-10,"宣武門");
stations[26]=new Station(360,Chengtie.RING_BOTTOM-10,"和平門");
stations[27]=new Station(395,Chengtie.RING_BOTTOM-10,"前門");
stations[28]=new Station(427,Chengtie.RING_BOTTOM-10,"崇文門");
stations[29]=new Station(473,Chengtie.RING_BOTTOM-10,"北京站");
stations[0]=new Station(2,510,"蘋果園");
stations[1]=new Station(31,Chengtie.LINE_TOP,"古城");
stations[2]=new Station(53,Chengtie.LINE_TOP,"八角游樂園");
stations[3]=new Station(75,Chengtie.LINE_TOP,"八寶山");
stations[4]=new Station(102,Chengtie.LINE_TOP,"玉泉路");
stations[5]=new Station(124,Chengtie.LINE_TOP,"五棵松");
stations[6]=new Station(157,Chengtie.LINE_TOP,"萬壽路");
stations[7]=new Station(181,Chengtie.LINE_TOP,"公主墳");
stations[8]=new Station(204,Chengtie.LINE_TOP,"軍事博物館");
stations[9]=new Station(225,Chengtie.LINE_TOP,"木樨地");
stations[10]=new Station(248,Chengtie.LINE_TOP,"南禮士路");
stations[11]=new Station(290,Chengtie.LINE_TOP,"復興門");
stations[12]=new Station(320,Chengtie.LINE_TOP,"西單");
stations[30]=new Station(354,Chengtie.LINE_TOP,"天安門西");
stations[31]=new Station(387,Chengtie.LINE_TOP,"天安門東");
stations[32]=new Station(420,Chengtie.LINE_TOP,"王府井");
stations[33]=new Station(455,Chengtie.LINE_TOP,"東單");
stations[34]=new Station(512,Chengtie.LINE_TOP,"永安里");
stations[35]=new Station(536,Chengtie.LINE_TOP,"國貿");
stations[36]=new Station(563,Chengtie.LINE_TOP,"大望橋");
stations[37]=new Station(595,Chengtie.LINE_TOP,"四惠西站");
stations[38]=new Station(630,Chengtie.LINE_TOP,"四惠東站");
stations[39]=new Station(Chengtie.T_STARX,Chengtie.T_BOTTOM,"北京北站");
stations[40]=new Station(263,351,"大鐘寺");
stations[41]=new Station(241,307,"知春路");
stations[42]=new Station(227,279,"東升鄉");
stations[43]=new Station(193,211,"上地");
stations[44]=new Station(169,163,"西三旗");
stations[45]=new Station(199,Chengtie.T_TOP,"龍澤");
stations[46]=new Station(260,Chengtie.T_TOP,"回龍觀");
stations[47]=new Station(310,Chengtie.T_TOP,"霍營");
stations[48]=new Station(382,137,"立水橋");
stations[49]=new Station(442,152,"北苑");
stations[50]=new Station(Chengtie.T_RIGHT,247,"望京西");
stations[51]=new Station(Chengtie.T_RIGHT,300,"芍藥居");
stations[52]=new Station(Chengtie.T_RIGHT,327,"光熙門東");
stations[53]=new Station(Chengtie.T_RIGHT,360,"柳芳");
stations[54]=new Station(490,395,"東直門13號線");
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -