mohamed20031805 / R_mostafa

0 stars 0 forks source link

project__c2 #2

Open mohamed20031805 opened 4 weeks ago

mohamed20031805 commented 4 weeks ago

include

include

include

define HAUTEUR_MAX 10

define LARGEUR_MAX 30

typedef struct { int id; int x, y; int direction; // 0 pour horizontal, 1 pour vertical int actif; // 1 si le véhicule est actif, 0 s'il a quitté la carte } Vehicle;

char carte[HAUTEUR_MAX][LARGEUR_MAX]; int hauteur, largeur, nb_vehicules;

void afficherCarte() { system("clear"); for (int i = 0; i < hauteur; i++) { for (int j = 0; j < largeur; j++) { printf("%c", carte[i][j]); } printf("\n"); } usleep(500000); // Pause pour rendre l'affichage plus lisible }

void initialiserCarte() { for (int i = 0; i < hauteur; i++) { for (int j = 0; j < largeur; j++) { if (i == hauteur / 2) carte[i][j] = '-'; // Route horizontale else if (j == largeur / 2) carte[i][j] = '|'; // Route verticale else carte[i][j] = ' '; } } }

// Fonction pour vérifier si la case devant le véhicule est libre int estLibreDevant(Vehicle v) { if (v->direction == 0) { // Mouvement horizontal return (v->y + 1 < largeur && carte[v->x][v->y + 1] != ''); } else { // Mouvement vertical return (v->x + 1 < hauteur && carte[v->x + 1][v->y] != '*'); } }

void deplacerVehiculesSeq(Vehicle* vehicules, int nb_vehicules) { int moved;

do {
    moved = 0;
    for (int i = 0; i < nb_vehicules; i++) {
        if (vehicules[i].actif) {
            // Effacer l'ancienne position
            carte[vehicules[i].x][vehicules[i].y] = (vehicules[i].direction == 0) ? '-' : '|';

            // Déplacement selon la direction
            if (vehicules[i].direction == 0) {  // Mouvement horizontal
                vehicules[i].y++;
                if (vehicules[i].y < largeur) {
                    carte[vehicules[i].x][vehicules[i].y] = '*';
                } else {
                    // Marquer le véhicule comme inactif s'il atteint la fin de la ligne
                    vehicules[i].actif = 0;
                }
            } else {  // Mouvement vertical
                vehicules[i].x++;
                if (vehicules[i].x < hauteur) {
                    carte[vehicules[i].x][vehicules[i].y] = '*';
                } else {
                    // Marquer le véhicule comme inactif s'il atteint la fin de la colonne
                    vehicules[i].actif = 0;
                }
            }

            afficherCarte(); // Mise à jour visuelle de la carte après chaque déplacement
            moved = 1;
        }
    }
} while (moved);

}

void lireConfig() { FILE* file = fopen("config.txt", "r"); if (file == NULL) { perror("Erreur lors de l'ouverture du fichier de configuration."); exit(EXIT_FAILURE); } fscanf(file, "%d %d", &hauteur, &largeur); fscanf(file, "%d", &nb_vehicules); fclose(file);

if (hauteur > HAUTEUR_MAX || largeur > LARGEUR_MAX) {
    printf("Dimensions dépassent les limites maximales (%d x %d).\n", HAUTEUR_MAX, LARGEUR_MAX);
    exit(EXIT_FAILURE);
}

}

int main() { lireConfig(); initialiserCarte(); afficherCarte();

Vehicle vehicules[nb_vehicules];

for (int i = 0; i < nb_vehicules; i++) {
    vehicules[i].id = i;
    vehicules[i].actif = 1;  // Tous les véhicules sont actifs au début

    // Positionnement initial et direction des véhicules
    if (i % 2 == 0) {  // Véhicule sur la route horizontale
        vehicules[i].x = hauteur / 2;
        vehicules[i].y = i;  // Espacement horizontal
        vehicules[i].direction = 0;  // Mouvement horizontal
    } else {  // Véhicule sur la route verticale
        vehicules[i].x = i;
        vehicules[i].y = largeur / 2;  // Espacement vertical
        vehicules[i].direction = 1;  // Mouvement vertical
    }
    // Placer le véhicule initialement sur la carte
    carte[vehicules[i].x][vehicules[i].y] = '*';
}

// Déplacer les véhicules en séquence
deplacerVehiculesSeq(vehicules, nb_vehicules);

return 0;

}