SAE12_2021/action.c

157 lines
3.6 KiB
C
Raw Normal View History

2021-12-17 17:59:37 +01:00
#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;
}