/FormulaOne

A Formula One simulation

Primary LanguageCGNU General Public License v3.0GPL-3.0

stronghold logo

Build Status Maintenance GitHub contributors official JetBrains project License: GPL v3 version Badge w/ Platform

FormulaOne

This a project of the lesson Operating Systems. (Unix) 2nd Bachelor at EPHEC

GIF demo

Group

👉 Number : 4

👉 Authors :

  1. Daniel Olivier (@danny00747)
  2. Martin Michotte (@MMichotte)
  3. Morgan Valentin (@momo007dev)
  4. Martin Pardaens (@Martinp-95)

How to compile this program

make

How to run this program

./prog followed by --day with it's value option sat for example. And --step with it's value to specify which step that needs to be runned Q1 for instance. For race the user has the option to specify the lap --length, by default it's 7Km. The length command is optional.

For P sessions on friday (P1, P2, P3) :

./prog --day fri --step P2

For Q sessions on saturday (Q1, Q2, Q3) :

./prog --day sat --step Q3

For the RACE on sunday (RACE) :

./prog --day sun --step RACE --length 10

./prog -d sun -s RACE -l 10

For the manuel info (help) :

./prog --help or ./prog -h

For the version info (version) :

./prog --version or ./prog -v

GIF demo

Built With

IntelliJ IDEA Community Edition - A cross-platform IDE for C and C++

Program Manuel

Use the help command for more information on how to run this program

./prog --help

Program Version

Use the version command in order to get the program current version

./prog --version

Tâches à faire

  • CrĂ©ation du GitHub
  • CrĂ©ation d'un randomizer pour gĂ©nĂ©rer un temps
  • CrĂ©ation d'un affichage temporaire pour tester des parties du code
  • RĂ©utilisation du randomizer pour la gestion des secteurs, tours et des crashs
  • CrĂ©ation de l'affichage final
  • Triage de l'affichage
  • CrĂ©ation des forks et attribuer Ă  chaque vĂ©hicule une structure par dĂ©faut
  • Gestion de la compĂ©tition en 3 parties au niveau des sĂ©ances d'essais libres
  • Gestion de la compĂ©tition en 3 parties au niveau des qualifications
  • Gestion de la compĂ©tition lors de la course, du grand prix

Cahier des charges du projet

Projet OS Octobre 2019

Le but du projet est de gérer un week-end complet d’un grand prix de Formule 1, depuis les séances d’essais du vendredi jusqu’à la course du dimanche, en passant par les essais du samedi et la séance de qualifications.

Il y a 20 voitures engagées dans un grand prix. Leurs numéros sont : 44, 77, 5, 7, 3, 33, 11, 31, 18, 35, 27, 55, 10, 28, 8, 20, 2, 14, 9, 16.

Un circuit de F1 est divisé en 3 secteurs (S1, S2, S3).

Le calendrier d’un week-end de F1 est établi comme suit :

  • Vendredi matin, une sĂ©ance d’essais libres d’1h30 (P1)
  • Vendredi après-midi, une sĂ©ance d’essais libres d’1h30 (P2)
  • Samedi matin, une sĂ©ance d’essais libres d’1h (P3)
  • Samedi après-midi, la sĂ©ance de qualifications, divisĂ©e en 3 parties :
    • Q1, durĂ©e 18 minutes, qui Ă©limine les 5 dernières voitures (qui occuperont les places 16 Ă  20 sur la grille de dĂ©part de la course)
    • Q2, durĂ©e 15 minutes, qui Ă©limine les 6 voitures suivantes (qui occuperont les places 11 Ă  16 sur la grille de dĂ©part de la course)
    • Q3, durĂ©e 12 minutes, qui permet de classer les 10 voitures restantes pour Ă©tablir les 10 premières places sur la grille de dĂ©part de la course
  • Dimanche après-midi, la course en elle-mĂŞme.

Votre projet devra prendre en charge les choses suivantes.

Première partie : gestion des séances d’essai, des qualifications et de la course

Lors des séances d’essais (P1, P2, P3) :
  • Relever les temps dans les 3 secteurs Ă  chaque passage pour chaque voiture
  • Toujours savoir qui a le meilleur temps dans chacun des secteurs
  • Classer les voitures en fonction de leur tour complet le plus rapide
  • Savoir si une voiture est aux stands (P)
  • Savoir si une voiture est out (abandon de la sĂ©ance)
  • Dans ces 2 derniers cas, on conserve toujours le meilleur temps de la voiture et celle-ci reste dans le classement
  • Conserver le classement final Ă  la fin de la sĂ©ance
Lors des qualifications (Q1, Q2, Q3) :
  • Relever les temps dans les 3 secteurs Ă  chaque passage pour chaque voiture
  • Toujours savoir qui a le meilleur temps dans chacun des secteurs
  • Classer les voitures en fonction de leur tour complet le plus rapide
  • Savoir si une voiture est aux stands (P)
  • Savoir si une voitures est out (abandon de la sĂ©ance)
  • Dans ces 2 derniers cas, on conserve toujours le meilleur temps de la voiture et celle-ci reste dans le classement
  • A la fin de Q1, il reste 15 voitures qualifiĂ©es pour Q2 et les 5 dernières sont placĂ©es Ă  la fin de la grille de dĂ©part (places 16 Ă  20)
  • A la fin de Q2, il reste 10 voitures qualifiĂ©es pour Q3 et les 5 dernières sont placĂ©es dans les places 11 Ă  15 de la grille de dĂ©part
  • Le classement de Q3 attribue les places 1 Ă  10 de la grille de dĂ©part
  • Conserver le classement final Ă  la fin des 3 sĂ©ances (ce sera l’ordre de dĂ©part pour la course)
Lors de la course :
  • Le premier classement est l’ordre sur la grille de dĂ©part
  • Le classement doit toujours ĂŞtre maintenu tout au long de la course (gĂ©rer les dĂ©passements)
  • Relever les temps dans les 3 secteurs Ă  chaque passage pour chaque voiture
  • Toujours savoir qui a le meilleur temps dans chacun des secteurs
  • Toujours savoir qui a le tour le plus rapide
  • Savoir si la voiture est out (abandon) ; dans ce cas, elle sera classĂ©e en fin de classement
  • Savoir si la voiture est aux stands (PIT), gĂ©rer le temps aux stands et faire ressortir la voiture Ă  sa place dans la course (gĂ©nĂ©ralement 2 ou 3 PIT par voitures)
  • Conserver le classement final et le tour le plus rapide

Remarque : les stands se trouvent toujours dans le secteur 3.

De plus, il vous est demandé de paramétrer votre programme.

En effet, les circuits peuvent être de longueur très variable et, dès lors le nombre de tours pour la course varie également (on essaie que le nombre total de kilomètres soit toujours plus ou moins le même pour chacune des courses du calendrier).

On vous demande de :
  • RĂ©aliser le programme en C sous Linux
  • Utiliser la mĂ©moire partagĂ©e comme moyen de communication inter-processus
  • Utiliser les sĂ©maphores pour synchroniser l’accès Ă  la mĂ©moire partagĂ©e

Bon courage. đź‘Ť

Licence & Copyright

GNU General Public License v3.0

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

© Daniel Olivier, EPHEC Louvain-la-Neuve