Coder Social home page Coder Social logo

programacionconcurrente's Introduction

Objetivo

El objetivo de la práctica es implementar un programa concurrente en java que simule carreras de coches de Fórmula 1. En general una carrera de coches se encuentra formada por las siguientes entidades:

  • Vehículo. Entidad que representa cada uno de los coches que componen la parrilla de salida y que correrán en la carrera. Como en todas las carreras, cada coche tendrá características técnicas diferentes como, por ejemplo: mejor trazado de curvas, más aceleración en recta, etc. Así mismo se pueden producir adelantamientos o posibles problemas en un mismo tramo.
  • Circuito. Entidad que representa en lugar donde corren los vehículos. Un circuito se compone de una serie de tramos que pueden ser lentos o rápidos en función de si dificultan o facilitan la conducción a los pilotos, es decir, tramos con muchas curvas complican la conducción a los pilotos y, por tanto, ralentizan su velocidad. Por el contrario, tramos en línea recta serían fáciles de cubrir por los pilotos y por lo tanto los vehículos irían más rápidos. En función de cómo se organicen estos tramos darán lugar a distintos tipos de circuitos y, por lo tanto, distintos tipos de carreras.
  • Panel informativo o ranking de la carrera que registra, calcula y muestra información en "directo" de los vehículos de la carrera como: la posición actual, diferencia entre ellos, diferencia a meta, velocidades, etc. De esta forma, cada X tiempo la clasificación deberá ser actualizada con los nuevos cambios que se producen en la carrera.
  • El juez de carrera será el encargado de dar el pistoletazo de salida, controlar la estancia de los vehículos en boxes y revisar que todo el mundo ha acabado la carrera correctamente. Finalizar la carrera correctamente significa que todos los coches tendrán que pasar por meta, la clasificación se actualizará en el marcador, los coches darán otra vuelta y por último terminarán en boxes.

Funcionamiento

La lógica de la simulación será la siguiente: se crea un circuito a partir de diversos tramos. Después, se crean N vehículos cada uno con sus especificaciones técnicas. Entonces, el juez de carrera comprueba que todo está bien en la parrilla de salida, y si todo está bien da el pistoletazo de salida. A partir de ahí, los vehículos serán invocados cada 5 segundos, tiempo suficiente para la simulación anterior y que todos ellos compitan por intentar ser los primeros. Los vehículos tendrán que decidir si avanzan o no al siguiente tramo o, en caso de adelantamiento, si debieran avanzar uno más que su contrincante. El circuito informará al panel de control y a los competidores con datos "actuales" de los vehículos como posición actual, metros hacia la meta, distancia entre vehículos, etc. Como es lógico, el avance de cada tramo hará que los vehículos consuman combustible, teniendo que pasar a boxes a repostar cuando se encuentren en la reserva. La carrera terminará cuando todos los vehículos pasen la línea de meta, den una vuelta al circuito extra y acaben en boxes. El juez de la carrera se encargará de comprobar que se cumplen cada una de las situaciones anteriores. Una vez analizado el funcionamiento del programa, se pide que los alumnos implementen la siguiente jerarquía de clases para solucionar la práctica:

  • Clase Racetrack (Tramo) encargada de modelar un tramo del circuito donde correrán los coches. Un tramo representa una parte de un circuito y puede tener distintas formas: curvo, recto, múltiples curvas, cambio de rasante, etc. cada tipo de tramo requiere de un tiempo para ser cruzado, es decir, no es lo mismo un tramo recto donde los vehículos pueden ir a máxima velocidad y tardarán menos tiempo en recorrerlo que uno que tenga múltiples curvas.
  • Clase Race (Carrera) encargada de modelar el circuito donde correrán los coches. Una carrera se encuentra compuesta por una serie de tramos que pueden tener distintas formas, como se ha indicado anteriormente. El objetivo de esta clase será la de gestionar la lógica del movimiento de los vehículos, informar al panel de control y a los competidores con datos "actuales" de los vehículos como posición actual, metros hacia la meta, distancia entre vehículos, etc.
  • Clase Vehicle (Vehículo) encargada de modelar el coche que correrá en el circuito. Cada vehículo deberá ser modelado teniendo en cuenta características técnicas como: velocidad, gasto de combustible, motor, etc. Cada vez que un vehículo avanza al siguiente tramo se actualizaran aspectos relacionados con velocidad, combustible, etc. En el caso en el que no quede combustible el Vehículo tendrá que ir a boxes durante 2 simulaciones. Además, cada vehículo tendrá que decidir si avanzan o no al siguiente tramo, cuánto avanza dentro del tramo y, en caso de adelantamiento, si debieran avanzar uno más que su contrincante
  • Clase Score (Marcador) encargada de modelar el marcador donde se recoge toda la información de la carrera como posiciones, tiempos, distancias a meta y distancias entre los vehículos.
  • Clase RaceJudge (Juez de Carrera) encargada de modelar al juez de la carrera. El objetivo principal de esta clase es controlar el desarrollo correcto de la carrera desde que se inicia, cuando el juez da el pistoletazo de salida, hasta cuando se termina la carrera y se posicionan todos los vehículos en boxes.
  • Clase Principal que contendrá toda la lógica para crear, ejecutar y parar los hilos que se necesiten en la aplicación. Por último, el método principal tendrá en cuanta la entrada por pantalla, si se introduce algún valor se deberá parar la carrera y finalizar mostrando el resultado una vez se paren todos los vehículos.

programacionconcurrente's People

Contributors

christiantaidi avatar

Watchers

James Cloos avatar  avatar

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.