Fly_Simulator/Sources/src/main.c

311 lines
8.5 KiB
C

//-----
// Nom du projet : Fly Simulator
// Version : - dev -
// Dernière modification le : 22 juillet 2019
//-----
#include <gint/display.h>
#include <gint/keyboard.h>
#include <gint/std/string.h>
#define C_RED 0xf800
#define C_GREEN 0x07e0
#define C_BLUE 0x001f
/*
Éviter de donner des noms non standards à des fonctions standard
Quand tu prends des pointeurs en paramètres, si tu n'as pas l'intention de modifier les données alors mets const
Quand tu déclares une chaîne de caractères, char str[] = "xyz" fait une copie, si tu ne veux pas modifier la chaîne alors const char *str = "xyz" suffit (mineur)
fill(msg_1, aipt_depart); add(msg_1, "tour, "); add(msg_1, immat); add(msg_1, "bonjour.");
sprintf(msg_1, "%s tour, %s bonjour.", aipt_depart, immat)
*/
//communication : gère les communications entre la tour et l'avion
void communication (int *com_id, int *id);
//display_comm : affiche les communications
void display_comm (char *msg_1, char *msg_2, char *msg_3, int *joueur);
//add : concatène deux chaines de caractère, str >> dest
char *add (char *dest, const char *src);
//fill : initialise une chaine de caractère en écrasant le texte contenu dans dest
char *fill (char *dest, const char *src);
//fill_char : initialise une chaine avec un nombre de caractères répétés 'n' fois
char *fill_char(char *dest, const char *src, unsigned int debut, unsigned int fin);
int main (void)
{
int com_id = 1, id = 0;// variables des communications
int key = 0;//variables diverses
dclear(C_WHITE);
dupdate();
while(com_id <= 26)
{
communication(&com_id, &id);
key = getkey().key;
dupdate();
if(key == KEY_EXIT) return 0;
}
getkey();
return 0;
}
void communication(int *com_id, int *id)
{
//faire un choix de la langue Français / Anglais
char avion[] = "Cessna 172 ", immat[] = "F-GUXF ", immat_courte[] = "F-XF ", aipt_depart[] = "Caen ", aipt_arrivee[] = "Le Havre ", freq_cont[] = "117.15 ", freq_arrivee[] = "122.80 ", passagers[] = "4 personnes a bord, ", msg_1[70], msg_2[70], msg_3[70];
fill_char(msg_1, " ", 0, 70);
fill_char(msg_2, " ", 0, 70);
fill_char(msg_3, " ", 0, 70);
switch (*com_id)
{
case 1:
*id = 1;
fill(msg_1, aipt_depart);
add(msg_1, "tour, ");
add(msg_1, immat);
add(msg_1, "bonjour.");
break;
case 2:
*id = 0;
fill(msg_1, immat);
add(msg_1, aipt_depart);
add(msg_1, "bonjour.");
break;
case 3:
*id = 1;
fill(msg_1, immat);
add(msg_1, avion);
add(msg_1, passagers);
add(msg_1, "demandons");
fill(msg_2, "vol vers ");
add(msg_2, aipt_arrivee);
break;
case 4:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "vol autorise. Rappelez pret au depart.");
break;
case 5:
*id = 1;
fill(msg_1, "Rappelons pret au depart, ");
add(msg_1, immat_courte);
break;
case 6:
*id = 1;
fill(msg_1, immat_courte);
add(msg_1, "pret au depart.");
break;
case 7:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "autorise decollage.");
break;
case 8:
*id = 1;
fill(msg_1, "Autorise decollage, ");
add(msg_1, immat_courte);
break;
case 9:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "Vous quittez mon espace. Services radar");
fill(msg_2, "et radio termines. Informations de vol avec");
fill(msg_3, "Controle, ");
add(msg_3, freq_cont);
add(msg_3, "au revoir.");
break;
case 10:
*id = 1;
fill(msg_1, "Controle ");
add(msg_1, freq_cont);
add(msg_1, "bonne journee. ");
add(msg_1, immat_courte);
break;
case 11:
*id = 1;
fill(msg_1, "Controle ");
add(msg_1, immat);
add(msg_1, "bonjour.");
break;
case 12:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "Controle, bienvenu.");
break;
case 13:
*id = 1;
fill(msg_1, immat);
add(msg_1, avion);
add(msg_1, passagers);
add(msg_1, "sortie de ");
fill(msg_2, aipt_depart);
add(msg_2, "vers ");
add(msg_2, aipt_arrivee);
break;
case 14:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "identifie radar.");
break;
case 15:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "Vous quittez mon espace, contactez ");
add(msg_1, aipt_arrivee);
fill(msg_2, freq_arrivee);
add(msg_2, "bon vol.");
break;
case 16:
*id = 1;
fill(msg_1, aipt_arrivee);
add(msg_1, freq_arrivee);
add(msg_1, "au revoir. ");
add(msg_1, immat_courte);
break;
case 17:
*id = 1;
fill(msg_1, aipt_arrivee);
add(msg_1, "tour, ");
add(msg_1, immat);
add(msg_1, "bonjour.");
break;
case 18:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, aipt_arrivee);
add(msg_1, "bonjour.");
break;
case 19:
*id = 1;
fill(msg_1, immat);
add(msg_1, avion);
add(msg_1, passagers);
add(msg_1, "demandons");
fill(msg_2, "consignes pour atterrissage sur ");
add(msg_2, aipt_arrivee);
break;
case 20:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "Commencez votre approche");
break;
case 21:
*id = 1;
fill(msg_1, "Commencons notre approche ");
add(msg_1, immat_courte);
break;
case 22:
*id = 1;
fill(msg_1, immat_courte);
add(msg_1, "en finale, demandons autorisation");
fill(msg_2, "d'atterrissage");
break;
case 23:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "autorise aterrissage. Rappelez au sol.");
break;
case 24:
*id = 1;
fill(msg_1, "Autorise aterrissage, rappelons au sol, ");
add(msg_1, immat_courte);
break;
case 25:
*id = 1;
fill(msg_1, immat_courte);
add(msg_1, "au sol, pour quitter, merci.");
break;
case 26:
*id = 0;
fill(msg_1, immat_courte);
add(msg_1, "quittez la frequence, a bientot.");
}
display_comm(msg_1, msg_2, msg_3, &(*id));
*com_id += 1;
}
void display_comm (char *msg_1, char *msg_2, char *msg_3, int *joueur)
{
fill_char(msg_1, " ", strlen(msg_1), 70);
fill_char(msg_2, " ", strlen(msg_2), 70);
fill_char(msg_3, " ", strlen(msg_3), 70);
if (*joueur == 1){
dtext(1, 1, msg_1, C_BLUE, C_WHITE);
dtext(1, 12, msg_2, C_BLUE, C_WHITE);
dtext(1, 23, msg_3, C_BLUE, C_WHITE);
}
else{
dtext(1, 1, msg_1, C_BLACK, C_WHITE);
dtext(1, 12, msg_2, C_BLACK, C_WHITE);
dtext(1, 23, msg_3, C_BLACK, C_WHITE);
}
}
char *add(char *dest, const char *src)
{
unsigned long fin_dest = strlen(dest);
unsigned int i;
for (i = 0 ; i <= strlen(src) ; i++) dest[fin_dest + i] = src[i];
return dest;
}
char *fill(char *dest, const char *src)
{
unsigned int i;
for (i = 0 ; i <= strlen(src) ; i++) dest[i] = src[i];
return dest;
}
char *fill_char(char *dest, const char *src, unsigned int debut, unsigned int fin)
{
unsigned int i;
for (i = debut ; i < fin ; i++)
{
dest[i] = src[0];
}
dest[fin] = '\0';
return dest;
}