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

📄 chengtie.java

📁 这是一个用java实现城铁和地铁调度的程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
         	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 + -