SDL - Mettre une image sur plusieurs cases

Messages postés
6
Date d'inscription
mercredi 29 octobre 2014
Statut
Membre
Dernière intervention
29 novembre 2014
-
Bonjour, je vous explique mon problème :

Alors voilà j'ai crée un editeur de map dans lequel je charge des maps présentes dans des fichiers textes avec une taille de case égale à 25 (TAILLE_BLOC dans mon code) . Seulement imaginons j' ai une image qui fait 150 x 150 sur mon fichier texte il y a seulement une case pour représenter cette image seulement j'aimerais que le nombre qui correspond à mon image imaginons 1 s'écrit sur toute les cases qui correspondent au nombre de cases que prend l'image.

Voici mon code :

SDL_Surface *herbe = NULL, *chemin= NULL, *regeneration = NULL, *arene = NULL, *dresseur = NULL;
    SDL_Rect position;
    SDL_Event event;
     
 
    int CONTINUER = 1, clicGaucheEnCours = 0, clicDroitEnCours = 0;
    int objetActuel = HERBE, i = 0,  j = 0;
    int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
 
    // Chargement des objets et du niveau
    herbe = SDL_LoadBMP("images/bmp/herbe.bmp");
    chemin = SDL_LoadBMP("images/bmp/chemin.bmp");
    regeneration = SDL_LoadBMP("images/bmp/ipcentre.bmp");
    arene = SDL_LoadBMP("images/bmp/arene.bmp");
    dresseur = SDL_LoadBMP("images/bmp/WATER.bmp");
 
    if (!chargerNiveau(CARTE))
        exit(EXIT_FAILURE);
 
    // Boucle infinie de l'éditeur
    while (CONTINUER)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            CASE SDL_QUIT:
                CONTINUER = 0;
                break;
            CASE SDL_MOUSEBUTTONDOWN:
                if (event.button.button == SDL_BUTTON_LEFT )
                {
                    // On met l'objet actuellement choisi (mur, caisse...) à l'endroit du clic
                    carte[event.button.x / TAILLE_BLOC][event.button.y / TAILLE_BLOC] = objetActuel;
                    clicGaucheEnCours = 1; // On active un booléen pour retenir qu'un bouton est enfoncé
                }
                else if (event.button.button == SDL_BUTTON_RIGHT) // Le clic droit sert à effacer
                {
                    carte[event.button.x / TAILLE_BLOC][event.button.y /TAILLE_BLOC] = VIDE;
                    clicDroitEnCours = 1;
                }
                break;
            case SDL_MOUSEBUTTONUP: // On désactive le booléen qui disait qu'un bouton était enfoncé
                if (event.button.button == SDL_BUTTON_LEFT)
                    clicGaucheEnCours = 0;
                else if (event.button.button == SDL_BUTTON_RIGHT)
                    clicDroitEnCours = 0;
                break;
            case SDL_MOUSEMOTION:
                if (clicGaucheEnCours) // Si on déplace la souris et que le bouton gauche de la souris est enfoncé
                {
                    carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = objetActuel;
                }
                else if (clicDroitEnCours) // Pareil pour le bouton droit de la souris
                {
                    carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = VIDE;
                }
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        continuer = 0;
                        break;
                    case SDLK_s:
                        sauvegarderNiveau(CARTE);
                        break;
                    CASE SDLK_c:
                        chargerNiveau(carte);
                        break;
                    CASE SDLK_KP1:
                        objetActuel = HERBE;
                        break;
                    CASE SDLK_KP2:
                        objetActuel = CHEMIN;
                        break;
                    CASE SDLK_KP3:
                        objetActuel = REGENERATION ;
                        break;
                    case SDLK_KP4:
                        objetActuel = ARENE;
                        break;
             case SDLK_KP5:
                        objetActuel = DRESSEUR;
                        break;
                }
                break;
        }
 
        // Effacement de l'écran
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->FORMAT, 255, 255, 255));
 
        // Placement des objets à l'écran
        for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
        {
            for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
            {
                position.x = i * TAILLE_BLOC;
                position.y = j * TAILLE_BLOC;
 
                switch(carte[i][j])
                {
                    case HERBE:
             
                        SDL_BlitSurface(herbe, NULL, ecran, &position);
                        break;
                    case CHEMIN:
             
                        SDL_BlitSurface(chemin, NULL, ecran, &position);
                        break;
                    case REGENERATION:
             
                        SDL_BlitSurface(regeneration, NULL, ecran, &position);
                        break;
 
             case ARENE:
             
                        SDL_BlitSurface(arene, NULL, ecran, &position);
                        break;
 
                    CASE DRESSEUR:
                        SDL_BlitSurface(dresseur, NULL, ecran, &position);
                        break;
                }
            }
        }
 
        // Mise à jour DE l'écran
        SDL_Flip(ecran);
    }
 
    SDL_FreeSurface(herbe);
    SDL_FreeSurface(chemin);
    SDL_FreeSurface(regeneration);
    SDL_FreeSurface(ARENE);
    SDL_FreeSurface(dresseur);
}



int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR])
{
    FILE* fichier = NULL;
    CHAR ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 3] = {0};
    int i = 0, j = 0;
 
    fichier = fopen("zone/5", "r");
    if (fichier == NULL)
        return 0;
 
    fgets(ligneFichier, sizeof(ligneFichier), fichier);
 
    for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
    {
        for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
        {
            switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j])
            {
                CASE '0':
                    niveau[j][i] = 0;
                    break;
                CASE '1':
                    niveau[j][i] = 1;
                    break;
                case '2':
                    niveau[j][i] = 2;
                    break;
                case '3':
                    niveau[j][i] = 3;
                    break;
                case '4':
                    niveau[j][i] = 4;
                    break;
        CASE '5':
            niveau[j][i] = 5;
                    break;
            }
        }
    }
 
    fclose(fichier);
    RETURN 1;
}
 
int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR])
{
    FILE* fichier = NULL;
    int i = 0, j = 0;
 
    fichier = fopen("zone/5.txt", "w");
    if (fichier == NULL)
        RETURN 0;
 
    for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
    {
        for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
        {
            fprintf(fichier, "%d", niveau[j][i]);
        }
    }
 
    fclose(fichier);
    RETURN 1;
}


merci de votre aide
Afficher la suite