157 lines
3.6 KiB
C
157 lines
3.6 KiB
C
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <time.h>
|
||
|
#include <math.h>
|
||
|
#include <graph.h>
|
||
|
#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<7500){
|
||
|
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[32m \n egalité aucun virus n'a gagner \033[0m \n");
|
||
|
|
||
|
fclose(virus);
|
||
|
|
||
|
return EXIT_SUCCESS;
|
||
|
|
||
|
}
|