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 :

problème inconnu avec SDL


Sujet :

SDL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut problème inconnu avec SDL
    Salut à tous
    J'essaye de créer un moteur de jeu 2D de stratégie mais rien que pour afficher une map , j'ai pein de bug ... Et je ne comprend pas du tout pourquoi ... voici mon code :

    main.c
    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL.h>
    #include <SDL_image.h>
     
    //***************************************MOTEUR*********************************************************************
    #define     VRAI            1
    #define     FAUX            0
    #define    TAILLECASE       45
     
    typedef struct carre carre;
    struct carre
    {
        char accessible;
        char idsprite;
    };
    //*******************************************************************************************************************
     
    void InitSDL_Gerror(void);
     
    int main ( int argc, char** argv )
    {
     
        //************************************VARIABLES MOTEUR*************************************************************
        long compteurcase = 0;
        long totalCases = 0;
        long i , j ;
        char taillemaplarge = 0;
        char taillemaplong = 0;
     
        carre *map = NULL;
        FILE *fichierMap = NULL;
        SDL_Rect posSpriteMap;
        SDL_Surface *herbe = NULL;
     
        //************************************VARIABLES BAC A SABLE********************************************************
        SDL_Surface *ecran = NULL;
        SDL_Event evenement;
        long continuer = 1;
     
        //************************************MAIN*************************************************************************
     
        InitSDL_Gerror();
        SDL_WM_SetCaption ("Moteur jeux de strategie - Bac num1" , NULL);//Titre de la fenêtre
     
        fichierMap = fopen("testmap.txt", "r");
        if (fichierMap == NULL)
        {
            fprintf(stderr , "Erreur : Fichier map introuvable \n" ); // Enregistrer l'erreur dans stderr
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
        fscanf(fichierMap, "%d_%d", &taillemaplong , &taillemaplarge);
     
        totalCases = taillemaplarge*taillemaplong;
        map = malloc( totalCases * sizeof(carre));
     
        if(map == NULL)
            exit(EXIT_FAILURE);
     
        compteurcase = 0;
        while ( compteurcase < totalCases )
        {
            fscanf( fichierMap, "%dS%d", &map[compteurcase].accessible , &map[compteurcase].idsprite );
            compteurcase ++;
        }
     
        ecran = SDL_SetVideoMode( TAILLECASE , TAILLECASE , 32 , SDL_HWSURFACE | SDL_DOUBLEBUF );//Création de l'écran dans la surface écran en 800*600 32 bit avec la mémoire vidéo et le doublebuffering
        herbe = IMG_Load("texture_herbe.png");
     
        SDL_FillRect(ecran , NULL , SDL_MapRGB ( ecran->format , 0 , 0 , 0)); //Remplissage de la surface écran
     
        for (i = 0 ; i < taillemaplarge ; i++)
        {
            for (j = 0 ; j < taillemaplong ; j++)
            {
                posSpriteMap.x = i * TAILLECASE;
                posSpriteMap.y = j * TAILLECASE;
     
                SDL_BlitSurface(herbe, NULL, ecran, &posSpriteMap);
            }
        }
     
        SDL_Flip(ecran);
     
        while(continuer == 1)
        {
     
            SDL_WaitEvent(&evenement); // Attendre un évenement et le stoker dans la variable "evenement"
     
            switch(evenement.type)
            {
                case SDL_QUIT :
                continuer = 0;
                break;
     
                default :
                break;
            }
     
            SDL_FillRect(ecran , NULL , SDL_MapRGB ( ecran->format , 0 , 0 , 0)); //Remplissage de la surface écran
     
            for (i = 0 ; i < taillemaplarge ; i++)
            {
                for (j = 0 ; j < taillemaplong ; j++)
                {
                    posSpriteMap.x = i * TAILLECASE;
                    posSpriteMap.y = j * TAILLECASE;
     
                    //SDL_BlitSurface(herbe, NULL, ecran, &posSpriteMap);
                }
            }
            SDL_Flip(ecran);//Actualisation
        }
     
        free(map);
        fclose(fichierMap);
        SDL_FreeSurface(herbe);
        SDL_Quit();
        exit(EXIT_SUCCESS);
    }
     
    void InitSDL_Gerror(void) // Fonction d'initiation avec gestion d'erreur pour la SDL
    {
        if(SDL_Init(SDL_INIT_VIDEO) == -1) // Si l'initiation renvoie une erreur
        {
            fprintf(stderr , "Erreur d'initialisation de la SDL : %s\n" , SDL_GetError() ); // Enregistrer l'erreur dans stderr
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
    }
    Dans ma recherche de l'erreur qui tue , je suis passer par tous message ( -1 , -3 , et dautres plus exotiques ...)
    Je n'arrive pas à comprendre ce qui va pas et je suis à deux doigts de la crise de nerf ...

    contenu du fichier map :
    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
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
     
    14_14
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1
    1S1

    Help, I need somebody
    Help, not just anybody
    Help, you know I need someone (who know what is my fkin error) , Heeeeeeeelp

    Sur cette fin beatlesesque , je vous laisse

    Merci d'avance ,
    @+

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je ne sais pas si je suis un peu trop fatigué, mais quel est le problème.

    Vous dites avoir un problème, mais vous ne le décrivez pas ...
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Ami du soir , bonsoir .
    Justement , je ne sais pas ... le programme se lance mais soit aucune fenêtre ne s'affiche , soit une fenêtre remplie de noir . Quand j'essaye de fermer la fenêtre remplie de noir , ça plante et dans tous les cas je me retrouve a faire CTRL+ALT+SUPR pour arrêter le processus . Et je n'ai absolument aucune idée de ce qui peu bien provoquer ça

    edit : ... Euhh bah oui , c'est vrai que j'avais complètement oublier de dire ça dans le premier post , sans doute étais-je trop absorbé par la recherche de mon erreur ... Pour retomber sur mes pattes je pourrais dire que je n'ai rien décris ... et que c'est exactement ce qui ce passe ... rien

    En attendant , j'ai beau lire et relire ce code , je ne vois toujours pas de problème

    peut-être cela viens-t-il de codeblocks ... mais ça m'étonnerais beaucoup...

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Je suis en train de regarder ton code, mais j'ai une remarque a faire : c'est bien de quitter le programme si quelque chose ne va pas, mais ce serai encore mieux de savoir pourquoi et où, non ?

    En l'occurence, ton programme quitte sur un 1, cela vient probablement du fait que je n'ai pas le fichier d'entre.
    Pour les message d'erreur des librairie standart, utilise perror, pour la sdl, utilise SDL_GetError().

    EDIT : Chez moi, le code marche. C'est un peu bizarre. Je vais corriger ton code pour le faire le plus simpli possible, on verra ce que ca donnera.

    La structure carre a quelle role ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Okay
    Voici mon nouveau 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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL.h>
    #include <SDL_image.h>
     
    //***************************************MOTEUR*********************************************************************
    #define     VRAI            1
    #define     FAUX            0
    #define    TAILLECASE       45
     
    typedef struct carre carre;
    struct carre
    {
        char accessible;
        char idsprite;
    };
    //*******************************************************************************************************************
     
    void InitSDL_Gerror(void);
     
    int main ( int argc, char** argv )
    {
     
        //************************************VARIABLES MOTEUR*************************************************************
        long compteurcase = 0;
        long totalCases = 0;
        long i , j ;
        char taillemaplarge = 0;
        char taillemaplong = 0;
     
        carre *map = NULL;
        FILE *fichierMap = NULL;
        SDL_Rect posSpriteMap;
        SDL_Surface *herbe = NULL;
        char erreur[501];
     
        //************************************VARIABLES BAC A SABLE********************************************************
        SDL_Surface *ecran = NULL;
        SDL_Event evenement;
        long continuer = 1;
     
        //************************************MAIN*************************************************************************
     
        InitSDL_Gerror();
        SDL_WM_SetCaption ("Moteur jeux de strategie - Bac num1" , NULL);//Titre de la fenêtre
     
        fichierMap = fopen("testmap.txt", "r");
        if (fichierMap == NULL)
        {
            perror(erreur);
            fprintf(stderr , "Erreur fichier map introuvable : %s\n" , erreur ); // Enregistrer l'erreur dans stderr
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
        fscanf(fichierMap, "%d_%d", &taillemaplong , &taillemaplarge);
     
        totalCases = taillemaplarge*taillemaplong;
        map = malloc( totalCases * sizeof(carre));
     
        if(map == NULL)
        {
            perror(erreur);
            fprintf(stderr , "Erreur d'allocation de map : %s\n" , erreur );
            exit(EXIT_FAILURE);
        }
     
        compteurcase = 0;
        while ( compteurcase < totalCases )
        {
            fscanf( fichierMap, "%dS%d", &map[compteurcase].accessible , &map[compteurcase].idsprite );
            compteurcase ++;
        }
     
        ecran = SDL_SetVideoMode( TAILLECASE , TAILLECASE , 32 , SDL_HWSURFACE | SDL_DOUBLEBUF );//Création de l'écran dans la surface écran en // 32 bit avec la mémoire vidéo et le doublebuffering
        herbe = IMG_Load("texture_herbe.png");
     
        SDL_FillRect(ecran , NULL , SDL_MapRGB ( ecran->format , 0 , 0 , 0)); //Remplissage de la surface écran
     
        for (i = 0 ; i < taillemaplarge ; i++)
        {
            for (j = 0 ; j < taillemaplong ; j++)
            {
                posSpriteMap.x = i * TAILLECASE;
                posSpriteMap.y = j * TAILLECASE;
     
                SDL_BlitSurface(herbe, NULL, ecran, &posSpriteMap);
            }
        }
     
        SDL_Flip(ecran);
     
        while(continuer == 1)
        {
     
            SDL_WaitEvent(&evenement); // Attendre un évenement et le stoker dans la variable "evenement"
     
            switch(evenement.type)
            {
                case SDL_QUIT :
                continuer = 0;
                break;
     
                default :
                break;
            }
     
            SDL_FillRect(ecran , NULL , SDL_MapRGB ( ecran->format , 0 , 0 , 0)); //Remplissage de la surface écran
     
            for (i = 0 ; i < taillemaplarge ; i++)
            {
                for (j = 0 ; j < taillemaplong ; j++)
                {
                    posSpriteMap.x = i * TAILLECASE;
                    posSpriteMap.y = j * TAILLECASE;
     
                    SDL_BlitSurface(herbe, NULL, ecran, &posSpriteMap);
                }
            }
            SDL_Flip(ecran);//Actualisation
        }
     
        free(map);
        fclose(fichierMap);
        SDL_FreeSurface(herbe);
        SDL_Quit();
        exit(EXIT_SUCCESS);
    }
     
    void InitSDL_Gerror(void) // Fonction d'initiation avec gestion d'erreur pour la SDL
    {
        if(SDL_Init(SDL_INIT_VIDEO) == -1) // Si l'initiation renvoie une erreur
        {
            fprintf(stderr , "Erreur d'initialisation de la SDL : %s\n" , SDL_GetError() ); // Enregistrer l'erreur dans stderr
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
    }
    Quand j'essaye de compiler ça me retourne 1
    Build messages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    C:\Users\Antoine\Desktop\Moteur jeu strategie - Bac renderer 1\main.c||In function `SDL_main':|
    C:\Users\Antoine\Desktop\Moteur jeu strategie - Bac renderer 1\main.c|54|warning: int format, different type arg (arg 3)|
    C:\Users\Antoine\Desktop\Moteur jeu strategie - Bac renderer 1\main.c|54|warning: int format, different type arg (arg 4)|
    C:\Users\Antoine\Desktop\Moteur jeu strategie - Bac renderer 1\main.c|69|warning: int format, different type arg (arg 3)|
    C:\Users\Antoine\Desktop\Moteur jeu strategie - Bac renderer 1\main.c|69|warning: int format, different type arg (arg 4)|
    ||=== Build finished: 0 errors, 4 warnings ===|
    Il n'y a rien dans le fichier stderr

    ...

    EDIT : Ahh ok ... C'est bizzare ...
    Le role de la structure carré est de contenir dans une variable l'id du sprite et l'accessibilité d'une case de la grille .
    Mon but est donc de créer un tableau de carre alloué dynamiquement de façon a ce qu'il y ait une variable carre par case du plateau , et c'est après au moment de blit que j'utilise l'id du sprite et encore après , quand l'utilisateur souhaite se déplacé que j'utiliserais l'accessibilité .

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fscanf(fichierMap, "%d_%d", &taillemaplong , &taillemaplarge);
    taillemaplong et taillemaplarge sont de type char alors que %d signifie qu'on attend un int.

    Je te laisse la suite ...



    Pourquoi retenir l'Id d'un sprite et non son pointeur ?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL.h>
    #include <SDL_image.h>
     
    //***************************************MOTEUR*********************************************************************
    #define     VRAI            1
    #define     FAUX            0
    #define    TAILLECASE       45
     
    typedef struct carre carre;
    struct carre
    {
        int accessible;
        int idsprite;
    };
    //*******************************************************************************************************************
     
    void InitSDL_Gerror(void);
     
    int main ( int argc, char** argv )
    {
     
        //************************************VARIABLES MOTEUR*************************************************************
        long compteurcase = 0;
        long totalCases = 0;
        long i , j ;
        int taillemaplarge = 0;
        int taillemaplong = 0;
     
        carre *map = NULL;
        FILE *fichierMap = NULL;
        SDL_Rect posSpriteMap;
        SDL_Surface *herbe = NULL;
        char erreur[501];
     
        //************************************VARIABLES BAC A SABLE********************************************************
        SDL_Surface *ecran = NULL;
        SDL_Event evenement;
        long continuer = 1;
     
        //************************************MAIN*************************************************************************
     
        InitSDL_Gerror();
        SDL_WM_SetCaption ("Moteur jeux de strategie - Bac num1" , NULL);//Titre de la fenêtre
     
        fichierMap = fopen("testmap.txt", "r");
        if (fichierMap == NULL)
        {
            perror(erreur);
            fprintf(stderr , "Erreur fichier map introuvable : %s\n" , erreur ); // Enregistrer l'erreur dans stderr
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
        fscanf(fichierMap, "%d_%d", &taillemaplong , &taillemaplarge);
     
        totalCases = taillemaplarge*taillemaplong;
        map = malloc( totalCases * sizeof(carre));
     
        if(map == NULL)
        {
            perror(erreur);
            fprintf(stderr , "Erreur d'allocation de map : %s\n" , erreur );
            exit(EXIT_FAILURE);
        }
     
        compteurcase = 0;
        while ( compteurcase < totalCases )
        {
            fscanf( fichierMap, "%dS%d", &map[compteurcase].accessible , &map[compteurcase].idsprite );
            compteurcase ++;
        }
     
        ecran = SDL_SetVideoMode( TAILLECASE , TAILLECASE , 32 , SDL_HWSURFACE | SDL_DOUBLEBUF );//Création de l'écran dans la surface écran en // 32 bit avec la mémoire vidéo et le doublebuffering
        herbe = IMG_Load("texture_herbe.png");
     
        SDL_FillRect(ecran , NULL , SDL_MapRGB ( ecran->format , 0 , 0 , 0)); //Remplissage de la surface écran
     
        for (i = 0 ; i < taillemaplarge ; i++)
        {
            for (j = 0 ; j < taillemaplong ; j++)
            {
                posSpriteMap.x = i * TAILLECASE;
                posSpriteMap.y = j * TAILLECASE;
     
                SDL_BlitSurface(herbe, NULL, ecran, &posSpriteMap);
            }
        }
     
        SDL_Flip(ecran);
     
        while(continuer == 1)
        {
     
            SDL_WaitEvent(&evenement); // Attendre un évenement et le stoker dans la variable "evenement"
     
            switch(evenement.type)
            {
                case SDL_QUIT :
                continuer = 0;
                break;
     
                default :
                break;
            }
     
            SDL_FillRect(ecran , NULL , SDL_MapRGB ( ecran->format , 0 , 0 , 0)); //Remplissage de la surface écran
     
            for (i = 0 ; i < taillemaplarge ; i++)
            {
                for (j = 0 ; j < taillemaplong ; j++)
                {
                    posSpriteMap.x = i * TAILLECASE;
                    posSpriteMap.y = j * TAILLECASE;
     
                    SDL_BlitSurface(herbe, NULL, ecran, &posSpriteMap);
                }
            }
            SDL_Flip(ecran);//Actualisation
        }
     
        free(map);
        fclose(fichierMap);
        SDL_FreeSurface(herbe);
        SDL_Quit();
        exit(EXIT_SUCCESS);
    }
     
    void InitSDL_Gerror(void) // Fonction d'initiation avec gestion d'erreur pour la SDL
    {
        if(SDL_Init(SDL_INIT_VIDEO) == -1) // Si l'initiation renvoie une erreur
        {
            fprintf(stderr , "Erreur d'initialisation de la SDL : %s\n" , SDL_GetError() ); // Enregistrer l'erreur dans stderr
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
    }
    A pu warnings , mais toujours une erreur 1 et rien qui se passe
    Pourquoi retenir l'Id d'un sprite et non son pointeur ?
    A vrai dire , je n'en sais rien j'étais en train de codé tranquillement quand cette erreur m'a arrêter sur ma lancé ... Au début je voulais juste faire des test pour réfléchir à la meilleur façon de faire mais la , ça a été le drame ... d'ailleurs sa l'est toujours


    EDIT : PIIIITINNN LE GLANNNDU ...
    Excusez-moi , j'ai eu une révélation , j'ai mis a jour ma version de la SDL mais le projet datais d'avant ça ... et j'ai ... oublié de mettre a jour mon linker settings .... on ne se moque pas , ça peut arriver a tout le monde
    Désolé pour le dérangement ...
    Sur ce , je pars me fouetter ...

  8. #8
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       map = malloc( totalCases * sizeof(carre));
       if(map == NULL)
        {
            perror(erreur);
            fprintf(stderr , "Erreur d'allocation de map : %s\n" , erreur );
            exit(EXIT_FAILURE);
        }
    perror ne marche pas comm cela. De plus, il faut caster le retour de malloc, c'est peut etre la source de tes ennuies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       map = (carre*) malloc( totalCases * sizeof(carre));
       if(map == NULL)
        {
            perror("Erreur d'allocation de map ");
            exit(EXIT_FAILURE);
        }

    Il y a plein de petite chose a ameliorer, je te posterai ton code sous un autre angle de vue bientot.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Voir édit
    Sinon , je suis intéressé par t'es idée d'amélio
    je n'ai jamais utilisé perror et je ne suis pas trés doué en anglais (non frappe pas , frappe pas )

  10. #10
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    non, je ne frappe pas ^^

    Sinon, j'ai corrigé un probleme et la, un autre probleme s'est declenché.
    Pour la structure, je verrai bien une petit modification.
    Je continue.

  11. #11
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    C'est bon, j'ai trouvé le probleme ....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct carre
    {
        char accessible;
        char idsprite;
    };
    
    ...
    
    fscanf(fichierMap, "%dS%d", &map[compteurcase].accessible ,&map[compteurcase].idsprite);
    Je me pose encore la question, pourquoi un caractere pour retenir un nombre ?

    Tout roule maintenant.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    oui oui , j'ai changé ça en int

    merci beaucoup pour ton aide .

    en fait c'est parce que je sais qu'un char prend moi de place qu'un int , du coup j'essaye de prendre le moins de place possible , c'est complètement con mais c'est plus fort que moi ... je dois avoir un petit côté psychorigide
    Sa m'apprendra a vouloir mettre des char partout ...

    ... maintenant je pourrais me dire "arrête ton char , tu va encore avoir des problème "

    mouahahahaha ... ok ok , elle est pourrie mais bon

  13. #13
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Honnetement, avec la memoire d'aujourd'hui, vouloir gagner de la place en remplacant les int par des char .....

    Je pense que tu l'as compris.
    Pour la petite histoire, aujourd'hui, il n'existe quasiment aucune difference entre int et long, alors pourquoi le type long existe ? C'est parce qu'au debut, on etait tres limité par la memoire et les deux type ce differencier sur ce point.

    Voila.

  14. #14
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Voici donc le code qie j'ai fait. Etant donné que je ne savais pas ce que tu voulais, je suis rester dans le vague.

    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/sdl.h>
    #include <SDL/sdl_image.h>
     
    #define    TAILLECASE       45
     
    typedef struct carre carre;
    struct carre
    {
        int accessible;
        SDL_Surface *image;
    };
     
    enum TypeTerrain
    {
        HERBE,
        BITUME,
        TERRE,
        EAU
    };
     
    int main (int argc, char *argv[])
    {
     
        //************************************VARIABLES MOTEUR*************************************************************
        int compteurcase = 0;
        int i, j;
        SDL_Rect tailleMap;
     
        carre *map = NULL;
        FILE *fichierMap = NULL;
        SDL_Rect posSpriteMap;
        SDL_Surface *herbe = NULL;
     
     
        //************************************MAIN*************************************************************************
        if(SDL_Init(SDL_INIT_VIDEO) == -1)
        {
            fprintf(stderr ,"Erreur d'initialisation de la SDL : %s\n" , SDL_GetError() );
            exit(EXIT_FAILURE);
        }
     
     
        fichierMap = fopen("testmap.txt", "r");
        if (fichierMap == NULL)
        {
            perror("Erreur lors de fopen sur le fichier \"testmap\" ");
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
     
        fscanf(fichierMap, "%d_%d", &tailleMap.w , &tailleMap.h);
     
     
     
        SDL_Surface *ecran = SDL_SetVideoMode(TAILLECASE*tailleMap.w, TAILLECASE*tailleMap.h, 32, SDL_HWSURFACE | SDL_DOUBLEBUF );
        if(ecran == NULL)
        {
            fprintf(stderr, "Erreur lors de la creation de la fenetre avec SDL_SetVideoMode : %s\n", SDL_GetError() );
            exit(EXIT_FAILURE);
        }
        SDL_WM_SetCaption ("Moteur jeux de strategie - Bac num1" , NULL);
     
     
        herbe = IMG_Load("texture_herbe.jpg");
        if (herbe == NULL)
        {
            fprintf(stderr, "Erreur lors du chargement via IMG_Load de \"texture_herbe.png\" : %s\n", SDL_GetError());
            exit(EXIT_FAILURE);
        }
     
     
     
     
        map = (carre*) malloc(tailleMap.w*tailleMap.h * sizeof(carre));
        if(map == NULL)
        {
            perror ("Probleme lors de l'allocation memoire de \"map\" ");
            exit(EXIT_FAILURE);
        }
     
        for (compteurcase=0 ; compteurcase<tailleMap.w*tailleMap.h ; compteurcase++)
        {
            int natureTerrain;
            fscanf(fichierMap, "%dS%d", &map[compteurcase].accessible ,&natureTerrain);
     
            switch(natureTerrain)
            {
                case HERBE:
                    map[compteurcase].image = herbe;
            }
        }
     
     
     
     
     
     
        int continuer = 1;
        while(continuer)
        {
            SDL_Event event;
            while(SDL_PollEvent(&event))
                switch(event.type)
                {
                    case SDL_QUIT :
                        continuer = 0;
                        break;
     
                    default :
                        break;
                }
     
     
            for (i=0 ; i<tailleMap.w ; i++)
                for (j=0 ; j<tailleMap.h ; j++)
                {
                    posSpriteMap.x = i * TAILLECASE;
                    posSpriteMap.y = j * TAILLECASE;
     
                    SDL_BlitSurface(map[i+j*tailleMap.h].image, NULL, ecran, &posSpriteMap);
                }
     
            SDL_Flip(ecran);//Actualisation
        }
     
        free(map);
        fclose(fichierMap);
        SDL_FreeSurface(herbe);
        SDL_Quit();
        return EXIT_SUCCESS;
    }
    Maintenant, la forme du fichier texte :

    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
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
     
    14_14
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    1S0
    Ici, le deuxieme chiffre (celui apres 1S) designe le type de terrain. Ce code est en rapport avec l'enum :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    enum TypeTerrain
    {
        HERBE,
        BITUME,
        TERRE,
        EAU
    };
    Si le deuxieme chiffre vaut 0, terrain type "herbe" et SDL_Surface de la structure mis a jour.
    Pareil apres, si le deuxieme chiffre vaut 1; terrain de type "bitume" et ainsi de suite.

    A noté que dans le switch je n'ai pas mis de default, a toi de combler ici.

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci à toi , cependant , ce n'est pas comme ça que je compte géré le type de terrain . J'ai pas mal avancé cet aprem , j'en suis maintenant au scrolling ... et je galère comme un malade :

    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
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL.h>
    #include <SDL_image.h>
     
    //***************************************MOTEUR*********************************************************************
    #define     VRAI            1
    #define     FAUX            0
    #define     TAILLECASE      45
    #define     DROITE          0
    #define     GAUCHE          1
    #define     HAUT            2
    #define     BAS             3
     
    typedef struct carre carre;
    struct carre
    {
        int accessible;
        int idsprite;
    };
     
    //*******************************************************************************************************************
     
    void InitSDL_Gerror(void);
     
    int main ( int argc, char** argv )
    {
     
        //************************************VARIABLES MOTEUR*************************************************************
        long totalCases = 0;
        long i , j ;
        int taillemaplarge = 0;
        int taillemaplong = 0;
     
        FILE *fichierMap = NULL;
        SDL_Rect posSpriteMap;
        SDL_Surface *sprite = NULL;
        char adressesprite[201];
        int scroll[4] = {0};
        int compteur = 0;
        //************************************VARIABLES BAC A SABLE********************************************************
        SDL_Surface *ecran = NULL;
        SDL_Event evenement;
        long continuer = 1;
     
        //************************************MAIN*************************************************************************
     
        InitSDL_Gerror();
        SDL_WM_SetCaption ("Moteur jeux de strategie - Bac num1" , NULL);//Titre de la fenêtre
     
        fichierMap = fopen("testmap.txt", "r");
        if (fichierMap == NULL)
        {
            fprintf(stderr , "Erreur fichier map introuvable \n"); // Enregistrer l'erreur dans stderr
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
        fscanf(fichierMap, "%d_%d", &taillemaplong , &taillemaplarge);
     
        totalCases = taillemaplarge*taillemaplong;
        carre map[taillemaplarge][taillemaplong];
     
        if(map == NULL)
        {
            fprintf(stderr , "Erreur d'allocation de map\n");
            exit(EXIT_FAILURE);
        }
     
     
        for (i = 0 ; i < taillemaplarge ; i++)
        {
            for (j = 0 ; j < taillemaplong ; j++)
            {
                fscanf( fichierMap, "%dS%d", &map[i][j].accessible , &map[i][j].idsprite );
            }
        }
     
        ecran = SDL_SetVideoMode( 800 , 600 , 32 , SDL_HWSURFACE | SDL_DOUBLEBUF );//Création de l'écran dans la surface écran en // 32 bit avec la mémoire vidéo et le doublebuffering
     
        SDL_FillRect(ecran , NULL , SDL_MapRGB ( ecran->format , 0 , 0 , 0)); //Remplissage de la surface écran
     
        for (i = 0 ; i < taillemaplarge ; i++)
        {
            for (j = 0 ; j < taillemaplong ; j++)
            {
                posSpriteMap.x = i * TAILLECASE;
                posSpriteMap.y = j * TAILLECASE;
     
                if ( map[i][j].idsprite != map[i][j-1].idsprite)
                {
                    sprintf(adressesprite , "sprites\\%d.png" , map[i][j].idsprite);
                    sprite = IMG_Load(adressesprite);
                }
                SDL_BlitSurface(sprite, NULL, ecran, &posSpriteMap);
            }
        }
     
        SDL_Flip(ecran);
     
        while(continuer == 1)
        {
     
            SDL_WaitEvent(&evenement); // Attendre un évenement et le stoker dans la variable "evenement"
     
            switch(evenement.type)
            {
                case SDL_QUIT :
                    continuer=0;
                break;
     
                case SDLK_LEFT :
                    compteur+=5;
                    scroll[DROITE] = 1;
                break;
     
                default :
                break;
            }
     
            SDL_FillRect(ecran , NULL , SDL_MapRGB ( ecran->format , 0 , 0 , 0)); //Remplissage de la surface écran
     
            for (i = 0 ; i < taillemaplarge ; i++)
            {
                for (j = 0 ; j < taillemaplong ; j++)
                {
     
     
                    posSpriteMap.x = i * TAILLECASE - 55/2  ;
                    posSpriteMap.y = j * TAILLECASE - (855 - 600) / 2;
                    if(scroll[DROITE])
                        posSpriteMap.x-=compteur ;
                    if(scroll[GAUCHE])
                        posSpriteMap.x+=5 ;
                    if(scroll[HAUT])
                        posSpriteMap.y+=5 ;
                    if(scroll[BAS])
                        posSpriteMap.y-=5 ;
     
                    if ( map[i][j].idsprite != map[i][j-1].idsprite)
                    {
                        sprintf(adressesprite , "sprites\\%d.png" , map[i][j].idsprite);
                        sprite = IMG_Load(adressesprite);
                    }
                    SDL_BlitSurface(sprite, NULL, ecran, &posSpriteMap);
                }
            }
            SDL_Flip(ecran);//Actualisation
        }
     
        free(map);
        fclose(fichierMap);
        SDL_FreeSurface(sprite);
        SDL_Quit();
        exit(EXIT_SUCCESS);
    }
     
    void InitSDL_Gerror(void) // Fonction d'initiation avec gestion d'erreur pour la SDL
    {
        if(SDL_Init(SDL_INIT_VIDEO) == -1) // Si l'initiation renvoie une erreur
        {
            fprintf(stderr , "Erreur d'initialisation de la SDL : %s\n" , SDL_GetError() ); // Enregistrer l'erreur dans stderr
            exit(EXIT_FAILURE); // Quitte le logiciel avec une erreur
        }
    }
    Je vais voir ce que je peut utiliser des amélioration que tu a faite sur la base du code .

    Sinon , pour le scrolling , je crois que j'ai l'iddée mais il me manque les détail pour que ça marche XD... Ou alors je me plante complètement ...

    Pour les sprites , je vais fonctionner de la façon suivante :

    CODETYPE + ID (+MORCEAU)
    Sachant que le code type est déterminer de la façon suivante:
    1)TERRAIN
    2)BATIMENTS
    3)PERSO

    Par exemple l'id de l'herbe est 1 donc pour l'herbe je charge 11.png
    si jeu veux une maison (id 1 des bâtiments) j'utilise les sprites 211.png, 212.png , 213.png et 214.png , puisque je dois découper les bâtiments qui sont trop gros en cases de 45*45 ...

    ça me parait être une bonne idée ... non ?

  16. #16
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    J'ai du mal a saisir ton probleme ...

    Ton idée depend de ce que tu veux faire. Apparemment, tu veux coder une map qui se comporte comme une grille et dont on ne peut voir la moitier d'une case, d'ou l'idee de decouper tes image trop grosse en carre.
    Pourquoi pas. Apres, il va peut etre falloir aborder differemment la map, je n'en sais rien. Avec le peu d'element que tu me donne, je serai plutot enclin a sortir la grosse artillerie et de faire quelque chose qui marche a tout les coup.

    Pour revenir au scrolling, je te conseille de prendre un feuille, de dessiner le rectangle de ta map, le rectangle representant ton ecran et d'essayer d'imaginer le comportement.

    Si tu veux que je t'aide plus, tu as mon adresse msn sur mon profil, on pourra discuter un peu de temps en temps.

    Bon courage.

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    pourquoi découper tes images?? si c'est pour pouvoir afficher des moitié d'image il suffit d'utiliser tous les parametres du blit, il y a une fonction qui fait ça ici!

    pour le scrolling tu dois avoir la position de ta 'camera' et tu blit ton image à sa position moins la position de la camera.

    sinon l'idée de la feuille et du crayon est pas mal.

  18. #18
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    En realité, sa map est un tableau de Case, structure possedant une SDL_Surface. Un de ses dessins correspond a 4 case, d'où la decoupe ...
    Cependant, la conversation s'est deroulé via msn, le code actuel a été remanier en profondeur et n'as plus grand chose a voir avec l'ebauche ici presente.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec SDL rect
    Par juju116 dans le forum Débuter
    Réponses: 4
    Dernier message: 01/02/2010, 14h29
  2. Problème avec SDL et OCaml
    Par Rippalka dans le forum Caml
    Réponses: 2
    Dernier message: 15/10/2009, 11h21
  3. Problème de compilation avec sdl en c++
    Par Jean_guy dans le forum SDL
    Réponses: 6
    Dernier message: 05/02/2008, 15h51
  4. Réponses: 4
    Dernier message: 04/10/2007, 14h42
  5. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 09h10

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