/* On redéfinie la position à l'écran de toutes les cases */ BCaseVector cases = map->Cases(); /* Hauteur de la case (et pas de l'image)*/ const int h = 100; /* Hauteur de l'image (car il y a un petit espace blanc en haut de la case) */ const int H = 120; /* Largeur de l'image */ const int w = 100; /* Nombre de cases en abscisse */ int tW = map->Width(); /* Nombre de cases en ordonnée */ int tH = map->Height(); /* Coordonnées de départ (on est tout à gauche, et au milieu à peu près. */ int x = 0; int y = (tW-1) * h/2; /* Sauvegarde des coordonnées du début de la ligne en cours */ int bx = x; int by = y; Debug(W_DEBUG, "Start: TW=%d, tH=%d, x=%d, y=%d", tW, tH, x, y); /* On commence la première ligne tout à gauche au milieu, et on vas vers la droite et on remonte progressivement vers le haut. */ for(BCaseVector::iterator casi = cases.begin(); casi != cases.end(); ++casi) if(*casi) { /* On attribue la position x, y à la case). * X() et Y() sont utile juste par rapport à l'affichage à l'écran * (ne pas s'en soucier). */ dynamic_cast(*casi)->Image()->set(X() + x, Y() + y); Debug(W_DEBUG, "x=%d, y=%d", x, y); /* Si est pas à la fin de la ligne */ if((*casi)->X() < (map->Width()-1)) { /* On avance vers la droite de la moitier de la largeur de la case */ x = x + w/2; /* On avance vers le haut de la moitier de la hauteur de la case */ y = y - h/2; } else { /* On prends les coordonnées de début de ligne précédente, et on ajoute * en abscisse la moitié de la largeur, et en ordonnée la moitié de la * hauteur de la case. */ x = bx + w/2; y = by + h/2; /* On sauvegarde l'etat */ bx = x; by = y; } }