Fly_Simulator/Sources/src/main.c

301 lines
8.0 KiB
C
Executable File

//-----
// 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
//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;
}