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;
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;
}
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);
}
int main() { lireConfig(); initialiserCarte(); afficherCarte();
}