IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Mettre une image sur plusieurs cases


Sujet :

SDL

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 96
    Points : 51
    Points
    51
    Par défaut Mettre une image sur plusieurs cases
    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

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    J'ai envie de vous dire : ne faites pas ainsi (c'est se compliquer la vie). Mais bon, disons que j'ai une solution pour votre cas.
    Pour le format de la carte, vous pouvez dire, que si vous avez une image de 150x150 et donc, qu'elle recouvre plusieurs tuiles, alors les autres tuiles sont à -1, sur la carte afin que, dans la bouche de rendu, lorsque vous trouvez -1, vous n'affichez rien.
    En effet, seul la tuile en haut à gauche devra comporter le bon code permettant de faire afficher l'image et le reste ne devra être que ignoré, vu que les tuiles sont déjà dessinées.

    Note : d'après moi, vous avez toujours les mêmes bogues au chargement, signalés dans les êtres discussions.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 96
    Points : 51
    Points
    51
    Par défaut
    Mon chargement fonctionne j'ai en fait ce que je veux . Il faudrait donc que je crée une variable taille image dans ce cas là

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Moi, je n'ai pas besoin de la taille image, tant que les autres cas où l'image sera, seront bien mis avec une valeur spéciale pour savoir que l'on doit rien afficher de plus.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 10
    Dernier message: 23/02/2008, 19h01
  2. Mettre une image sur une autre image et tableau
    Par Michaël dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 19/06/2005, 18h31
  3. [wxpython][wx.frame] mettre une image sur un bouton
    Par Kyti dans le forum wxPython
    Réponses: 7
    Dernier message: 02/05/2005, 12h13
  4. [JBouton] Comment mettre une image sur un bouton ?
    Par Kyti dans le forum Composants
    Réponses: 6
    Dernier message: 11/03/2005, 16h08
  5. [VB6] mettre une image sur un boutton
    Par dim dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/02/2004, 01h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo