//----- // Nom du projet : Fly Simulator // Version : - dev - // Dernière modification le : 22 juillet 2019 //----- #include #include #include #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; }