1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| void scrolling(SDL_Surface *ecran,
int carte[][NB_BLOCS_HAUTEUR],
Position *position,
int deplacement)
{
int y=0,x=0;
int startx, starty, stopx, stopy;
SDL_Rect _position;
SDL_Surface *mur=NULL,*chemin=NULL,*joueur=NULL;
static int test=RIEN, marqueur=RIEN; /*Static pour permettre de garder en mémoire leur valeur*/
mur=gestion_chercheRessource(MUR); /*Utilisation de gestion_chercheRessource pour ne pas a avoir recharger l'image*/
chemin=gestion_chercheRessource(CHEMIN);
if(test!=deplacement) /*si le joueur a bougé*/
{
switch(deplacement)
{
/*Si le joueur a bougé, on donne une valeur à marqueur*/
case BAS :
marqueur=BAS;
break;
case HAUT:
marqueur=HAUT;
break;
case DROITE:
marqueur=DROITE;
break;
case GAUCHE:
marqueur=GAUCHE;
break;
default:
break;
}
}
test=deplacement; /*On donne la valeur de déplacement a test pour que test garde en mémoire le dernier déplacement*/
switch(marqueur)
{
/*Suivant la valeur de marqueur, on lui donne une image particulière*/
case RIEN :
joueur=gestion_chercheRessource(JOUEUR_BAS);
break;
case BAS :
joueur=gestion_chercheRessource(JOUEUR_BAS);
break;
case HAUT:
joueur=gestion_chercheRessource(JOUEUR_HAUT);
break;
case DROITE:
joueur=gestion_chercheRessource(JOUEUR_DROITE);
break;
case GAUCHE:
joueur=gestion_chercheRessource(JOUEUR_GAUCHE);
break;
default:
break;
}
/* On prend les anciennes valeurs */
startx = position->startx;
starty = position->starty;
stopx = position->stopx;
stopy = position->stopy;
for(x=startx; x < stopx; x++)
{
for(y=starty; y < stopy; y++)
{
/*Lorsque x et y sont soustraient par startx et starty puis multipliées
par TAILLE_BLOC, cela permet d'indiquer la position des terrains */
_position.x=(x-startx)*TAILLE_BLOC;
_position.y=(y-starty)*TAILLE_BLOC;
switch(carte[x][y])
{
/*Blittage du terrain qu'il y a dans carte[x][y]*/
case CHEMIN:
SDL_BlitSurface(chemin,NULL,ecran, &_position);
break;
case MUR:
SDL_BlitSurface(mur,NULL,ecran, &_position);
break;
default:
break;
}
}
}
/*Soustraient par startx et starty puis multipliées par TAILLE_BLOC
infos->jx et infos->jy permettent d'indiquer la position du joueur*/
_position.x=(position->jx-startx)*TAILLE_BLOC;
_position.y=(position->jy-starty)*TAILLE_BLOC;
/*Blittage du joueur*/
SDL_BlitSurface(joueur,NULL,ecran,&_position);
} |
Partager