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

📄 elevatorview.java

📁 用java模拟的电梯程序,可以选择有几层楼,一共有几个人在哪几层等电梯,可以不断的增加等电梯的人数,并看电梯如何以设定的方式运行.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.Anance.elevator.view;import java.awt.*;import java.awt.event.*;import java.util.*;import java.applet.*;import javax.swing.*;import com.Anance.elevator.event.*;import com.Anance.elevator.ElevatorConstants;public class ElevatorView extends JPanel    implements ActionListener, ElevatorModelListener,      ElevatorConstants {   private static final int VIEW_WIDTH = 800;   private static final int VIEW_HEIGHT = 435;   private static final int OFFSET = 10;   private static final int ANIMATION_DELAY = 50;   private static final int PERSON_TO_BUTTON_DISTANCE = 400;   private static final int BUTTON_TO_ELEVATOR_DISTANCE = 50;   private static final int PERSON_TO_ELEVATOR_DISTANCE =       PERSON_TO_BUTTON_DISTANCE + BUTTON_TO_ELEVATOR_DISTANCE;   private static final int TIME_TO_BUTTON = 3000;    private static final int TIME_TO_ELEVATOR = 1000;    private static final int ELEVATOR_TRAVEL_TIME = 5000;   private static final String doorFrames[] = {      "images/door1.png", "images/door2.png", "images/door3.png",      "images/door4.png", "images/door5.png" };   private static final String personFrames[] = {       "images/bug1.png", "images/bug2.png", "images/bug3.png",       "images/bug4.png", "images/bug5.png", "images/bug6.png",      "images/bug7.png", "images/bug8.png" };   private static final String lightFrames[] = {      "images/lightOff.png", "images/lightOn.png" };   private static final String firstFloorLightFrames[] = {      "images/firstFloorLightOff.png",       "images/firstFloorLightOn.png" };   private static final String secondFloorLightFrames[] = {      "images/secondFloorLightOff.png",       "images/secondFloorLightOn.png", };   private static final String floorButtonFrames[] = {       "images/floorButtonUnpressed.png",      "images/floorButtonPressed.png",      "images/floorButtonLit.png" };   private static final String elevatorButtonFrames[] = {      "images/elevatorButtonUnpressed.png",      "images/elevatorButtonPressed.png",      "images/elevatorButtonLit.png" };   private static final String bellFrames[] = {       "images/bell1.png", "images/bell2.png",       "images/bell3.png" };   private static final String floorImage =       "images/floor.png";   private static final String ceilingImage =       "images/ceiling.png";   private static final String elevatorImage =       "images/elevator.png";   private static final String wallImage =       "images/wall.jpg";   private static final String elevatorShaftImage =       "images/elevatorShaft.png";   private static final String bellSound = "bell.wav";   private static final String doorOpenSound = "doorOpen.wav";   private static final String doorCloseSound = "doorClose.wav";   private static final String elevatorSound = "elevator.au";   private static final String buttonSound = "button.wav";   private static final String walkingSound = "walk.wav";   private static final String midiFile = "sounds/liszt.mid";   private ImagePanel firstFloorPanel;   private ImagePanel secondFloorPanel;   private ImagePanel elevatorShaftPanel;   private ImagePanel wallPanel;   private ImagePanel ceilingPanel;   private MovingPanel elevatorPanel;   private AnimatedPanel firstFloorButtonPanel;   private AnimatedPanel secondFloorButtonPanel;   private AnimatedPanel elevatorButtonPanel;   private AnimatedPanel bellPanel;   private AnimatedPanel elevatorLightPanel;   private AnimatedPanel firstFloorLightPanel;   private AnimatedPanel secondFloorLightPanel;   private AnimatedPanel doorPanel;   private java.util.List personAnimatedPanels;   private AudioClip bellClip;   private AudioClip doorOpenClip;   private AudioClip doorCloseClip;   private AudioClip elevatorClip;   private AudioClip buttonClip;   private AudioClip walkClip;   private ElevatorMusic elevatorMusic;   private javax.swing.Timer animationTimer;   private int firstFloorPosition;   private int secondFloorPosition;   private double elevatorVelocity;   public ElevatorView()   {      super( null );      instantiatePanels();      placePanelsOnView();      initializeAudio();      double floorDistance =          firstFloorPosition - secondFloorPosition;      double time = ELEVATOR_TRAVEL_TIME / ANIMATION_DELAY;      elevatorVelocity = ( floorDistance + OFFSET ) / time;      startAnimation();   }    private void instantiatePanels()   {      firstFloorPanel = new ImagePanel( 0, floorImage );      secondFloorPanel = new ImagePanel( 0, floorImage );      firstFloorPosition = VIEW_HEIGHT - firstFloorPanel.getHeight();      secondFloorPosition = ( int ) ( firstFloorPosition / 2 ) - OFFSET;      firstFloorPanel.setPosition( 0, firstFloorPosition );      secondFloorPanel.setPosition( 0, secondFloorPosition );      wallPanel = new ImagePanel( 0, wallImage );      elevatorShaftPanel = new ImagePanel( 0, elevatorShaftImage );      double xPosition = PERSON_TO_ELEVATOR_DISTANCE + OFFSET;      double yPosition = firstFloorPosition - elevatorShaftPanel.getHeight();      elevatorShaftPanel.setPosition( xPosition, yPosition );      ceilingPanel = new ImagePanel( 0, ceilingImage );      yPosition = elevatorShaftPanel.getPosition().getY() -ceilingPanel.getHeight();      ceilingPanel.setPosition( xPosition, yPosition );      elevatorPanel = new MovingPanel( 0, elevatorImage );      yPosition = firstFloorPosition - elevatorPanel.getHeight();      elevatorPanel.setPosition( xPosition, yPosition );      firstFloorButtonPanel =new AnimatedPanel( 0, floorButtonFrames );      xPosition = PERSON_TO_BUTTON_DISTANCE + 2 * OFFSET;      yPosition = firstFloorPosition - 5 * OFFSET;      firstFloorButtonPanel.setPosition( xPosition, yPosition );      int floorButtonPressedFrameOrder[] = { 0, 1, 2 };      firstFloorButtonPanel.addFrameSequence( floorButtonPressedFrameOrder );      secondFloorButtonPanel = new AnimatedPanel( 1, floorButtonFrames );      xPosition = PERSON_TO_BUTTON_DISTANCE + 2 * OFFSET;      yPosition = secondFloorPosition - 5 * OFFSET;      secondFloorButtonPanel.setPosition( xPosition, yPosition );      secondFloorButtonPanel.addFrameSequence( floorButtonPressedFrameOrder );      firstFloorLightPanel = new AnimatedPanel( 0, firstFloorLightFrames );      xPosition = elevatorPanel.getLocation().x - 4 * OFFSET;      yPosition = firstFloorButtonPanel.getLocation().y - 10 * OFFSET;      firstFloorLightPanel.setPosition( xPosition, yPosition );      secondFloorLightPanel = new AnimatedPanel( 1, secondFloorLightFrames );      yPosition = secondFloorButtonPanel.getLocation().y - 10 * OFFSET;      secondFloorLightPanel.setPosition( xPosition, yPosition );      doorPanel = new AnimatedPanel( 0, doorFrames );      int doorOpenedFrameOrder[] = { 0, 1, 2, 3, 4 };      int doorClosedFrameOrder[] = { 4, 3, 2, 1, 0 };      doorPanel.addFrameSequence( doorOpenedFrameOrder );      doorPanel.addFrameSequence( doorClosedFrameOrder );      yPosition =elevatorPanel.getHeight() - doorPanel.getHeight();      doorPanel.setPosition( 0, yPosition );      elevatorLightPanel = new AnimatedPanel( 0, lightFrames );      elevatorLightPanel.setPosition( OFFSET, 5 * OFFSET );      bellPanel = new AnimatedPanel( 0, bellFrames );      yPosition = elevatorLightPanel.getPosition().getY() +         elevatorLightPanel.getHeight() + OFFSET;      bellPanel.setPosition( OFFSET, yPosition );      int bellRingAnimation[] = { 0, 1, 0, 2 };      bellPanel.addFrameSequence( bellRingAnimation );      elevatorButtonPanel = new AnimatedPanel( 0, elevatorButtonFrames );      yPosition = elevatorPanel.getHeight() - 6 * OFFSET;      elevatorButtonPanel.setPosition( 10 * OFFSET, yPosition );      int buttonPressedFrameOrder[] = { 0, 1, 2 };      elevatorButtonPanel.addFrameSequence(          buttonPressedFrameOrder );      personAnimatedPanels = new ArrayList();   }    private void placePanelsOnView()   {      // add Panels to ElevatorView      add( firstFloorPanel );      add( secondFloorPanel );      add( ceilingPanel );      add( elevatorPanel );      add( firstFloorButtonPanel );      add( secondFloorButtonPanel );      add( firstFloorLightPanel );      add( secondFloorLightPanel );      add( elevatorShaftPanel );      add( wallPanel );      // add Panels to Elevator's MovingPanel      elevatorPanel.add( doorPanel );      elevatorPanel.add( elevatorLightPanel );      elevatorPanel.add( bellPanel );      elevatorPanel.add( elevatorButtonPanel );   } // end method placePanelsOnView   // get sound effects and elevatorMusic   private void initializeAudio()   {      // create AudioClip sound effects from audio files      SoundEffects sounds = new SoundEffects();      sounds.setPathPrefix( "sounds/" );      bellClip = sounds.getAudioClip( bellSound );      doorOpenClip = sounds.getAudioClip( doorOpenSound );      doorCloseClip = sounds.getAudioClip( doorCloseSound );      elevatorClip = sounds.getAudioClip( elevatorSound );      buttonClip = sounds.getAudioClip( buttonSound );      walkClip = sounds.getAudioClip( walkingSound );      // create MIDI player using Java Media Framework      elevatorMusic = new ElevatorMusic( midiFile );      elevatorMusic.open();   } // end method initializeAudio   // starts animation by repeatedly drawing images to screen   public void startAnimation()   {      if ( animationTimer == null ) {         animationTimer =             new javax.swing.Timer( ANIMATION_DELAY, this );         animationTimer.start();      }      else         if ( !animationTimer.isRunning() )            animationTimer.restart();   }   // stop animation   public void stopAnimation()   {      animationTimer.stop();   }   // update AnimatedPanels animation in response to Timer   public void actionPerformed( ActionEvent actionEvent )   {      elevatorPanel.animate();      firstFloorButtonPanel.animate();      secondFloorButtonPanel.animate();      Iterator iterator = getPersonAnimatedPanelsIterator();      while ( iterator.hasNext() ) {         // get Person's AnimatedPanel from Set         AnimatedPanel personPanel =             ( AnimatedPanel ) iterator.next();         personPanel.animate(); // update panel      }      repaint(); // paint all Components   } // end method actionPerformed   private Iterator getPersonAnimatedPanelsIterator()   {      // obtain iterator from List      synchronized( personAnimatedPanels )      {         return new ArrayList( personAnimatedPanels ).iterator();      }   }   // stop sound clip of Person walking   private void stopWalkingSound()   {      // stop playing walking sound      walkClip.stop();      Iterator iterator = getPersonAnimatedPanelsIterator();      // but if Person is still walking, then keep playing      while ( iterator.hasNext() ) {         AnimatedPanel panel = ( AnimatedPanel ) iterator.next();         if ( panel.getXVelocity() != 0 )            walkClip.loop();      }   } // end method stopWalkingSound   // returns Person AnimatedPanel with proper identifier   private AnimatedPanel getPersonPanel( PersonMoveEvent event )   {      Iterator iterator = getPersonAnimatedPanelsIterator();      while ( iterator.hasNext() ) {         // get next AnimatedPanel         AnimatedPanel personPanel =             ( AnimatedPanel ) iterator.next();                  // return AnimatedPanel with identifier that matches         if ( personPanel.getID() == event.getID() )            return personPanel;      }      // return null if no match with correct identifier      return null;   } // end method getPersonPanel   // invoked when Elevator has departed from Floor   public void elevatorDeparted( ElevatorMoveEvent moveEvent )   {      String location =          moveEvent.getLocation().getLocationName();      // determine if Person is on Elevator      Iterator iterator = getPersonAnimatedPanelsIterator();      while ( iterator.hasNext() ) {         AnimatedPanel personPanel =            ( AnimatedPanel ) iterator.next();         double yPosition = personPanel.getPosition().getY();         String panelLocation;         // determine on which Floor the Person entered         if ( yPosition > secondFloorPosition )            panelLocation = FIRST_FLOOR_NAME;         else            panelLocation = SECOND_FLOOR_NAME;         int xPosition =             ( int ) personPanel.getPosition().getX();         // if Person is inside Elevator         if ( panelLocation.equals( location )             && xPosition > PERSON_TO_BUTTON_DISTANCE + OFFSET ) {            // remove Person AnimatedPanel from ElevatorView            remove( personPanel );            // add Person AnimatedPanel to Elevator            elevatorPanel.add( personPanel, 1 );            personPanel.setLocation( 2 * OFFSET, 9 * OFFSET );            personPanel.setMoving( false );            personPanel.setAnimating( false );            personPanel.setVelocity( 0, 0 );            personPanel.setCurrentFrame( 1 );         }      } // end while loop      // determine Elevator velocity depending on Floor      if ( location.equals( FIRST_FLOOR_NAME ) )         elevatorPanel.setVelocity( 0, -elevatorVelocity );      else         if ( location.equals( SECOND_FLOOR_NAME ) )            elevatorPanel.setVelocity( 0, elevatorVelocity );      // begin moving Elevator and play Elevator music      elevatorPanel.setMoving( true );      if ( elevatorClip != null )         elevatorClip.play();      elevatorMusic.play();   } // end method elevatorDeparted   // invoked when Elevator has arrived at destination Floor   public void elevatorArrived( ElevatorMoveEvent moveEvent )   {      // stop Elevator and music      elevatorPanel.setMoving( false );      elevatorMusic.getSequencer().stop();      double xPosition = elevatorPanel.getPosition().getX();      double yPosition;

⌨️ 快捷键说明

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