Git Product home page Git Product logo

lecture-elevatorsimulator's Introduction

elevator-simulator

This is a Java project I made in 2008 during my Computer Science Applied to Business Management Master at the University of Nice Sophia-Antipolis.

The goal was to create several elevator strategies that could be hot-loaded in this Swing application and run simulation with these different behaviors.

Usage

Compile the project to <jar_file>.jar and run it with java -jar <jar_file>.jar.

Note: Be sure to put the elevator strategies .class inside the plugins/strategies/elevators/ folder (see "Elevator strategies" below).

Strategies

Elevator strategies

There is a collection of elevator strategies in src/strategies/elevators/ that can be hot-loaded as plugins.

To have access to these plugins at runtime, compile the src/strategies/elevators/*.java files and move the .class files into plugins/strategies/elevators/ (you can reload the plugin list with the Actions / Recharger les comportements menu item when the applicaiton is launched).

Développement de plugins

Méthodes à implémenter

Pour réaliser de nouveaux plugins, il faut ouvrir le projet “elevator-plugins”, dupliquer un des plugins existants dans le package src/strategies/elevators, puis modifier les méthodes qui le compose.

public abstract void acts()


Cette méthode est le coeur du fonctionnement d’une stratégie d’ascenseur. C’est dans cette méthode que tous les tests pour savoir si l’ascenseur doit s’arrêter, repartir etc ... se font.

public boolean takePassenger(Passenger passenger)

Cette méthode est appelé seulement si le passager passenger vient de monter dans l’ascenseur. Vous pouvez par exemple augmentez le temps d’arrêt nécesssaire dans cette méthode grâce à elevator.incrementStopTime(5*passenger.getPersonCount());.

`public void releasePassenger(Passenger passenger)


Cette méthode est appelé seulement si le passager passenger vient de sortir de l’ascenseur. Vous pouvez par exemple augmentez le temps d’arrêt nécesssaire dans cette méthode grâce à elevator.incrementStopTime(5*passenger.getPersonCount());.

public void leaveThisFloor()


Cette méthode est appelé à la fin de la méthode leaveThisFloor() de Elevator. Cette méthode est appelé pour indiquer à l’ascenseur graphique de repartir.

Quelques conseils pour le développement

Il est conseiller de s’inspirer des comportements déjà implémenté pour créer de nouveaux comportements.

Quelques méthodes intéressantes de Elevator :

  • La méthode setMoving(false) permet de dire à l’ascenseur de rester immobile.
  • La méthode releaseAllArrivedPassengers() permet de laisser sortir tous les passagers de l’ascenseur qui sont arrivés à leur étage de destination.
  • La méthode leaveThisFloor() permet de notifier l’ascenseur graphique que l’ascenseur veut repartir. Programmation Avancée -

Il existe beaucoup d’autres méthodes, pour récupérer des listes de passagers qui attendent, qui sont arrivés, des listes d’étages avec des passagers qui attendent... Voir la Javadoc pour plus de précisions Importation d’un nouveau comportement Un fois le comportement terminé, compilez-le, puis placer le .class dans le dossier plugins/strategies/ elevators du projet principal. Le comportement apparaît dans le menu “Choisir un comportement” après un clic sur le choix “Recharger les comportements” dans le menu “Actions” de la fenêtre de configuration de l’application (ou après un redémarrage de l’application bien sûr).

Limitations et réalisations du projet par rapport au sujet

Nous avons répondu à toutes les demandes obligatoires. En voici la liste :

  • Pouvoir facilement paramétrer une simulation.
- Pouvoir facilement lancer / relancer une simulation.
- Pouvoir intégrer de nouveaux programmes d’ascenseurs “à la volée” (plug-in)
  • Pouvoir connaître le temps d’attente des personnes (moyenne par ascenseur et totale)
  • Gérer les groupes de personnes qui ne veulent pas se séparer
- Gérer l’humeur des personnes
- Accélérer ou ralentir la simulation (min. 1 image/seconde, max. 50 images/seconde)

Nous avons également développé d’autres améliorations :

  • Pouvoir connaître le temps de voyage des personnes (moyenne par ascenseur et totale).
  • Gestion de la charge maximale d’un ascenseur (au delà du poinds maximum, l’ascenseur est bloqué).
  • Gestion d’un poids d’alerte (les passagers sont avertis que l’ascenseur risque d’être bloqué si il essaye de rentrer dedans).
  • Gestion d’une contenance physique maximum pour chaque ascenseur : un ascenseur ne peut pas accepter plus de personnes que son maximum physique autorisé.
  • Gestion du QI des personnes : possibilités d’effectuer différentes actions suivant le QI. Cet attribut pour- rait être massivement exploité par l’utilisation du design-pattern Strategy pour créer différents compor- tement de passagers.
  • Gestion du sexe des personnes : Même remarque que pour le QI.

lecture-elevatorsimulator's People

Contributors

haoict avatar

Stargazers

Nguyen Tien Huong avatar

Watchers

James Cloos avatar  avatar

Forkers

dung321046

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.