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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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);
}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
nt 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