From 8b2d6287903ccfb2c91b74a55496c1122d853c75 Mon Sep 17 00:00:00 2001 From: Henri Montjoie <henri.montjoie@insa-rennes.fr> Date: Mon, 16 May 2016 21:57:07 +0200 Subject: [PATCH] optimisation : la fonction deplacement_unitaire_possible n'est pluas appelee que 900 000 fois et non 655 millions --- src/deplacements.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/deplacements.c b/src/deplacements.c index 8e1fbe5..3b64b81 100644 --- a/src/deplacements.c +++ b/src/deplacements.c @@ -113,9 +113,10 @@ boolean deplacement_unitaire_possible(Case* depart,Case* destination){ boolean deplacement_possible(Personnage* perso, Case* c, Carte_Jeu* carte){ int pts_mvt = perso->points_deplacement; Case* depart=perso->position; + if(depart->coord_x>c->coord_x+pts_mvt||depart->coord_x<c->coord_x-pts_mvt||depart->coord_y>c->coord_y+pts_mvt||depart->coord_y<c->coord_y-pts_mvt) return faux; int x,y; - for(x=0;x<LARG_MAX_CARTE;x++){ - for(y=0;y<HAUT_MAX_CARTE;y++){ + for(x=depart->coord_x-pts_mvt;x<LARG_MAX_CARTE&&x<=depart->coord_x+pts_mvt;x++){ + for(y=depart->coord_y-pts_mvt;y<HAUT_MAX_CARTE&&y<=depart->coord_y+pts_mvt;y++){ if(deplacement_unitaire_possible(depart,&carte->Tab_Cases[x][y])==vrai){ if(deplacement_possible_recursif(&carte->Tab_Cases[x][y],c, carte,pts_mvt-carte->Tab_Cases[x][y].terrain->PD_requis)==vrai){ return vrai; @@ -137,8 +138,8 @@ boolean deplacement_possible_recursif(Case* dep, Case* dest, Carte_Jeu* carte, i int x,y; if(dep==dest) return vrai; if(pts_restants<1) return faux; - for(x=0;x<LARG_MAX_CARTE;x++){ - for(y=0;y<HAUT_MAX_CARTE;y++){ + for(x=dep->coord_x-pts_restants;x<LARG_MAX_CARTE&&x<=dep->coord_x+pts_restants;x++){ + for(y=dep->coord_y-pts_restants;y<HAUT_MAX_CARTE&&y<=dep->coord_y+pts_restants;y++){ if(deplacement_unitaire_possible(dep,&carte->Tab_Cases[x][y])==vrai){ if(deplacement_possible_recursif(&carte->Tab_Cases[x][y],dest, carte,pts_restants-carte->Tab_Cases[x][y].terrain->PD_requis)==vrai){ return vrai; -- GitLab