#include #include #include #include #include #include #include "decod_instruction.h" #include "graphique.h" int main(void){ InitialiserGraphique(); FILE* virus; virus=fopen("./vir1.mars", "r"); srand(time(NULL)); CreerFenetre(0, 0, 1600, 900); PremiereImage(); /* Ouverture des fichiers contenant les entiers des instruction. */ int adresse_aleatoire; adresse_aleatoire=rand()%8000; unsigned long int tableau[8000]; /* Le tableau de 8000 cases represente la memoire. */ int retenue1=adresse_aleatoire; int verif=feof(virus); int tableau_binaire[64]; while(verif!=1){ unsigned long int valeur_instruction; fscanf(virus, "%lu", &valeur_instruction); tableau[adresse_aleatoire]=valeur_instruction; adresse_aleatoire++; if(adresse_aleatoire==8000){ adresse_aleatoire=0; } verif=feof(virus); } fclose(virus); /* Fonction permettant de savoir si on est sur une fin de fichier. */ virus=fopen("./vir2.mars", "r"); /* lecture entier stocker. */ for(;adresse_aleatoire!=retenue1; adresse_aleatoire--){ if(adresse_aleatoire==-1){ adresse_aleatoire=7999; } } do{ adresse_aleatoire=rand()%8000; }while((((adresse_aleatoire-1000)<=retenue1)&&(retenue1<=adresse_aleatoire))||((adresse_aleatoire<=retenue1)&&(retenue1<=(adresse_aleatoire+1000)))); int retenue2=adresse_aleatoire; verif=feof(virus); while(verif!=1){ /* Positionne les virus aléatoirement dans la mémoire de 8000 cases. */ unsigned long int valeur_instruction; fscanf(virus, "%lu", &valeur_instruction); tableau[adresse_aleatoire]=valeur_instruction; adresse_aleatoire++; if(adresse_aleatoire==8000){ adresse_aleatoire=0; } verif=feof(virus); } virus=fopen("./vir2.mars", "r"); for(;adresse_aleatoire!=retenue1; adresse_aleatoire--){ if(adresse_aleatoire==-1){ adresse_aleatoire=7999; } } clock_t retenue_temps; retenue_temps=clock(); clock_t temps; temps=clock(); temps=difftime(temps, retenue_temps)/1000000; int nb_virus=1; int nombre_execution=0; int init_1=retenue1; int init_2=retenue2; while(nombre_execution<10000){ int perdant=0; if(temps>5){ /* toute les 0,2 seconde pour pouvoir mieux suivre l'affichage a l'ecran */ if(nb_virus==1){ if(retenue1==8000){ retenue1=0; } DessinerVirus(retenue1, "blue"); convertion(tableau_binaire, tableau[retenue1]); /*decodeur_instruction(tableau, retenue1);*/ nb_virus=2; nombre_execution++; perdant=decodeur_instruction(tableau_binaire, tableau, &retenue1); if(perdant!=0){ printf("\n\033[34m virus 1 a perdu \033[0m\n"); ImageFin(nb_virus); return EXIT_SUCCESS; } } else{ if(retenue2==8000){ retenue2=0; } DessinerVirus(retenue2, "green"); convertion(tableau_binaire, tableau[retenue2]); /*decodeur_instruction(tableau, retenue2);*/ nb_virus=1; nombre_execution++; perdant=decodeur_instruction(tableau_binaire, tableau, &retenue2); if(perdant!=0){ printf("\n\033[32m virus 2 a perdu \033[0m\n"); ImageFin(nb_virus); return EXIT_SUCCESS; } } retenue_temps=clock(); temps=clock(); temps=difftime(temps, retenue_temps)/1000; } temps=clock(); temps=difftime(temps, retenue_temps)/1000; } /* On fais switch exécution pour qu'elle s'exécute à tour de rôle et on a mis un temps entre chaque execution pour pouvoir mieux suivre l'évolution des virus. si il ne se passe rien avant un nombre maximal d'instruction. on marque que les virus sont à égalité. */ printf("\033[31m \n egalité aucun virus n'a gagner \033[0m \n"); ImageFin(3); fclose(virus); return EXIT_SUCCESS; }