Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec mario sokoban

amelioration

    22 janvier 2007 à 21:03:04

    Bonjour tout le monde,
    j'ai un gros problème,
    m@teo21 avais dis à la fin de son cour C/C++ d'essayer d'améloirer le jeu avec un mode d'emploi,
    voici mon code main.c:
    /*le fichier qui contient la fonction main (fonction principale du programme). */



    /*
    main.c
    ------

    Par k@rteur45,
    créer le 21/01/07 à 20:40 dernière modification le 22/01/07 à 18:18

    Rôle : menu du jeu. Permet de choisir entre l'éditeur et le jeu lui-même.
    */


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    #include "constantes.h"
    #include "jeu.h"
    #include "editeur.h"
    #include "mode demploi.c"
    #include "mode demploi.c"



    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *menu = NULL;
        SDL_Rect positionMenu;
        SDL_Event event;

        int continuer = 1;

        SDL_Init(SDL_INIT_VIDEO);

        SDL_WM_SetIcon(IMG_Load("caisse.jpg"), NULL); // L'icône doit être chargée avant SDL_SetVideoMode
        ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Mario Sokoban", NULL);

        menu = IMG_Load("menu2.jpg");
        positionMenu.x = 0;
        positionMenu.y = 0;

        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: // Veut arrêter le jeu
                            continuer = 0;
                            break;
                        case SDLK_KP1: // Demande à jouer
                            jouer(ecran);
                            break;
                        case SDLK_KP2: // Demande l'éditeur de niveaux
                            editeur(ecran);
                            break;
                        case SDLK_KP3: //demande le mode d'emploi
                             mode demploi(ecran);
                             break;
                    }
                    break;
            }

            // Effacement de l'écran
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
            SDL_Flip(ecran);
        }

        SDL_FreeSurface(menu);
        SDL_Quit();

        return EXIT_SUCCESS;
    }



    /*voici zozor qui sais bouger (pour qu'il marche jdoit biensûr fermer les commentaires pas les laisser ouverts!


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h> /* Inclusion du header de SDL_image */
    /*

    void pause();

    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *zozor = NULL,*imageDeFond = NULL;
        SDL_Rect positionZozor;
        SDL_Event event;
        SDL_JOYAXISMOTION;
        SDL_VIDEORESIZE;
        SDL_APPMOUSEFOCUS;
        SDL_APPINPUTFOCUS;
        SDL_APPACTIVE;
        int continuer = 1;
        long i = 0;
        long pause;
        SDL_Joystick *joystick = NULL;

        SDL_Init(SDL_INIT_VIDEO);

        /* Chargement de l'icône AVANT SDL_SetVideoMode */
    /*
        SDL_WM_SetIcon(SDL_LoadBMP("sdl_icone.bmp"), NULL);

        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_INIT_JOYSTICK | SDL_RESIZABLE); /* Double Buffering */
    /*
        SDL_WM_SetCaption("Gestion des evenements en SDL", NULL);
        printf("Il y a %ld joysticks connectés\n", SDL_NumJoysticks());
    for (i = 0 ; i < SDL_NumJoysticks() ; i++ )
    {
        printf("Joystick n°%ld : %s\n", i, SDL_JoystickName(i));
    }
        printf("----> %d boutons\n", SDL_JoystickNumButtons(joystick));
        printf("----> %d axes\n", SDL_JoystickNumAxes(joystick));
        printf("----> %d trackballs\n", SDL_JoystickNumBalls(joystick));
        printf("----> %d chapeaux\n", SDL_JoystickNumHats(joystick));

        SDL_JoystickEventState(SDL_ENABLE);
        joystick = SDL_JoystickOpen(0);
        zozor = SDL_LoadBMP("zozor.bmp");
        SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

        if ((event.active.state & SDL_APPMOUSEFOCUS) == SDL_APPMOUSEFOCUS)
        if ((event.active.state & SDL_APPACTIVE) == SDL_APPACTIVE)
    {
        if (event.active.gain == 0) /* La fenêtre a été réduite en barre des tâches */
    /*
            pause = 1;
        else if (event.active.gain == 1) /* La fenêtre a été restaurée */
    /*
            pause = 0;
    }

        SDL_EnableKeyRepeat(10, 10); /* Activation de la répétition des touches */
    /*

        SDL_ShowCursor(SDL_DISABLE);
        SDL_WarpMouse(ecran->w / 2, ecran->h / 2);


        while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;

                case SDL_VIDEORESIZE:
        positionZozor.x = event.resize.w / 2 - zozor->w / 2;
        positionZozor.y = event.resize.h / 2 - zozor->h / 2;
        break;


                case SDL_JOYBUTTONDOWN:
            if (event.jbutton.button == 0) /* Arrêt du programme si on appuie sur le 1er bouton */
    /*
                continuer = 0;
            break;

            case SDL_JOYAXISMOTION:
        if (event.jaxis.axis == 0 && event.jaxis.value < -3200) /* Vers la gauche */
    /*
            positionZozor.x--;
        else if (event.jaxis.axis == 0 && event.jaxis.value > 3200) /* Vers la droite */
    /*
            positionZozor.x++;
        else if (event.jaxis.axis == 1 && event.jaxis.value < -3200) /* Vers le haut */
    /*
            positionZozor.y--;
        else if (event.jaxis.axis == 1 && event.jaxis.value > 3200) /* Vers le bas */
    /*
            positionZozor.y++;
        break;

            case SDL_MOUSEMOTION:
                positionZozor.x = event.motion.x; /* On change les coordonnées de Zozor */
    /*
                 positionZozor.y = event.motion.y;
                 break;








        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor); /* On place zozor à sa nouvelle position */
    /*
        SDL_Flip(ecran);
    }




        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor); /* On place zozor à sa nouvelle position */
    /*
        SDL_Flip(ecran);
    }







        SDL_FreeSurface(zozor);
        SDL_JoystickClose(joystick);
        SDL_Quit();

        return EXIT_SUCCESS;
    }



    void pause()
    {
        int continuer = 1;
        SDL_Event event;

        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
    }

    */




    voici mon code mode demploi.c:
    //ici le mode d'emploi suivra

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>



    *emploi = NULL;
    emploi = IMG_Load("emploi.jpg");
        positionMenu.x = 0;
        positionMenu.y = 0;

    voici mon code mode demploi.h:
    long mode demploi;

    voici mon code jeu.c:
    /*
    jeu.c
    -----

    Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)

    Rôle : fonctions du jeu.
    */


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    #include "constantes.h"
    #include "jeu.h"

    void jouer(SDL_Surface* ecran)
    {
        SDL_Surface *mario[4] = {NULL}; // 4 surfaces pour chacune des directions de mario
        SDL_Surface *mur = NULL, *caisse = NULL, *caisseOK = NULL, *objectif = NULL, *marioActuel = NULL;
        SDL_Rect position, positionJoueur;
        SDL_Event event;
        long emploi;

        int continuer = 1, objectifsRestants = 0, i = 0, j = 0;
        int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};

        // Chargement des sprites (décors, personnage...)
        mur = IMG_Load("mur.jpg");
        caisse = IMG_Load("caisse.jpg");
        caisseOK = IMG_Load("caisse_ok.jpg");
        objectif = IMG_Load("objectif.png");
        mario[BAS] = IMG_Load("mario_bas.gif");
        mario[GAUCHE] = IMG_Load("mario_gauche.gif");
        mario[HAUT] = IMG_Load("mario_haut.gif");
        mario[DROITE] = IMG_Load("mario_droite.gif");

        marioActuel = mario[BAS]; // Mario sera dirigé vers le bas au départ

        // Chargement du niveau
        if (!chargerNiveau(carte))
            exit(EXIT_FAILURE); // On arrête le jeu si on n'a pas pu charger le niveau

        // Recherche de la position de Mario au départ
        for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
        {
            for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
            {
                if (carte[i][j] == MARIO) // Si Mario se trouve à cette position sur la carte
                {
                    positionJoueur.x = i;
                    positionJoueur.y = j;
                    carte[i][j] = VIDE;
                }
            }
        }

        // Activation de la répétition des touches
        SDL_EnableKeyRepeat(100, 100);

        while (continuer)
        {
            SDL_WaitEvent(&event);
    switch(event.type)
    {
        case SDL_QUIT:
            continuer = 0;
            break;
        case SDL_KEYDOWN:
            switch(event.key.keysym.sym)
            {
                case SDLK_ESCAPE:
                    continuer = 0;
                    break;
                case SDLK_UP:
                    marioActuel = mario[HAUT];
                    deplacerJoueur(carte, &positionJoueur, HAUT);
                    break;
                case SDLK_DOWN:
                    marioActuel = mario[BAS];
                    deplacerJoueur(carte, &positionJoueur, BAS);
                    break;
                case SDLK_RIGHT:
                    marioActuel = mario[DROITE];
                    deplacerJoueur(carte, &positionJoueur, DROITE);
                    break;
                case SDLK_LEFT:
                    marioActuel = mario[GAUCHE];
                    deplacerJoueur(carte, &positionJoueur, GAUCHE);
                    break;
            }
            break;
    }

            // Effacement de l'écran
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

            // Placement des objets à l'écran
            objectifsRestants = 0;

            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 MUR:
                            SDL_BlitSurface(mur, NULL, ecran, &position);
                            break;
                        case CAISSE:
                            SDL_BlitSurface(caisse, NULL, ecran, &position);
                            break;
                        case CAISSE_OK:
                            SDL_BlitSurface(caisseOK, NULL, ecran, &position);
                            break;
                        case OBJECTIF:
                            SDL_BlitSurface(objectif, NULL, ecran, &position);
                            objectifsRestants = 1;
                            break;
                    }
                }
            }

            // Si on n'a trouvé aucun objectif sur la carte, c'est qu'on a gagné
            if (!objectifsRestants)
                continuer = 0;

            // On place le joueur à la bonne position
            position.x = positionJoueur.x * TAILLE_BLOC;
            position.y = positionJoueur.y * TAILLE_BLOC;
            SDL_BlitSurface(marioActuel, NULL, ecran, &position);



            SDL_Flip(ecran);
        }

        // Désactivation de la répétition des touches (remise à 0)
        SDL_EnableKeyRepeat(0, 0);

        // Libération des surfaces chargées
        SDL_FreeSurface(mur);
        SDL_FreeSurface(caisse);
        SDL_FreeSurface(caisseOK);
        SDL_FreeSurface(objectif);
        for (i = 0 ; i < 4 ; i++)
            SDL_FreeSurface(mario[i]);
    }

    void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction)
    {
        switch(direction)
        {
            case HAUT:
                if (pos->y - 1 < 0) // Si le joueur dépasse l'écran, on arrête
                    break;
                if (carte[pos->x][pos->y - 1] == MUR) // S'il y a un mur, on arrête
                    break;
                // Si on veut pousser une caisse, il faut vérifier qu'il n'y a pas de mur derrière (ou une autre caisse, ou la limite du monde)
                if ((carte[pos->x][pos->y - 1] == CAISSE || carte[pos->x][pos->y - 1] == CAISSE_OK) &&
                    (pos->y - 2 < 0 || carte[pos->x][pos->y - 2] == MUR ||
                    carte[pos->x][pos->y - 2] == CAISSE || carte[pos->x][pos->y - 2] == CAISSE_OK))
                    break;

                // Si on arrive là, c'est qu'on peut déplacer le joueur !
                // On vérifie d'abord s'il y a une caisse à déplacer
                deplacerCaisse(&carte[pos->x][pos->y - 1], &carte[pos->x][pos->y - 2]);

                pos->y--; // On peut enfin faire monter le joueur (oufff !)
                break;


            case BAS:
                if (pos->y + 1 >= NB_BLOCS_HAUTEUR)
                    break;
                if (carte[pos->x][pos->y + 1] == MUR)
                    break;

                if ((carte[pos->x][pos->y + 1] == CAISSE || carte[pos->x][pos->y + 1] == CAISSE_OK) &&
                    (pos->y + 2 >= NB_BLOCS_HAUTEUR || carte[pos->x][pos->y + 2] == MUR ||
                    carte[pos->x][pos->y + 2] == CAISSE || carte[pos->x][pos->y + 2] == CAISSE_OK))
                    break;


                deplacerCaisse(&carte[pos->x][pos->y + 1], &carte[pos->x][pos->y + 2]);

                pos->y++;
                break;


            case GAUCHE:
                if (pos->x - 1 < 0)
                    break;
                if (carte[pos->x - 1][pos->y] == MUR)
                    break;

                if ((carte[pos->x - 1][pos->y] == CAISSE || carte[pos->x - 1][pos->y] == CAISSE_OK) &&
                    (pos->x - 2 < 0 || carte[pos->x - 2][pos->y] == MUR ||
                    carte[pos->x - 2][pos->y] == CAISSE || carte[pos->x - 2][pos->y] == CAISSE_OK))
                    break;


                deplacerCaisse(&carte[pos->x - 1][pos->y], &carte[pos->x - 2][pos->y]);

                pos->x--;
                break;


            case DROITE:
                if (pos->x + 1 >= NB_BLOCS_LARGEUR)
                    break;
                if (carte[pos->x + 1][pos->y] == MUR)
                    break;

                if ((carte[pos->x + 1][pos->y] == CAISSE || carte[pos->x + 1][pos->y] == CAISSE_OK) &&
                    (pos->x + 2 >= NB_BLOCS_LARGEUR || carte[pos->x + 2][pos->y] == MUR ||
                    carte[pos->x + 2][pos->y] == CAISSE || carte[pos->x + 2][pos->y] == CAISSE_OK))
                    break;

                deplacerCaisse(&carte[pos->x + 1][pos->y], &carte[pos->x + 2][pos->y]);

                pos->x++;
                break;
        }
    }

    void deplacerCaisse(int *premiereCase, int *secondeCase)
    {
        if (*premiereCase == CAISSE || *premiereCase == CAISSE_OK)
        {
            if (*secondeCase == OBJECTIF)
                *secondeCase = CAISSE_OK;
            else
                *secondeCase = CAISSE;

            if (*premiereCase == CAISSE_OK)
                *premiereCase = OBJECTIF;
            else
                *premiereCase = VIDE;
        }
    }

    voici mon code jeu.h:
    /*
    jeu.h
    -----

    Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)

    Rôle : prototypes des fonctions du jeu.
    */


    #ifndef DEF_JEU
    #define DEF_JEU

        void jouer(SDL_Surface* ecran);
        void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction);
        void deplacerCaisse(int *premiereCase, int *secondeCase);


    #endif

    voici mon code editeur.c:
    /*
    editeur.c
    ---------

    Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)

    Rôle : gestion de l'éditeur de niveaux.
    */


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    #include "constantes.h"
    #include "editeur.h"
    #include "fichiers.h"

    void editeur(SDL_Surface* ecran)
    {
        SDL_Surface *mur = NULL, *caisse = NULL, *objectif = NULL, *mario = NULL;
        SDL_Rect position;
        SDL_Event event;

        int continuer = 1, clicGaucheEnCours = 0, clicDroitEnCours = 0;
        int objetActuel = MUR, i = 0, j = 0;
        int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};

        // Chargement des objets et du niveau
        mur = IMG_Load("mur.jpg");
        caisse = IMG_Load("caisse.jpg");
        objectif = IMG_Load("objectif.png");
        mario = IMG_Load("mario_bas.gif");

        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 = MUR;
                            break;
                        case SDLK_KP2:
                            objetActuel = CAISSE;
                            break;
                        case SDLK_KP3:
                            objetActuel = OBJECTIF;
                            break;
                        case SDLK_KP4:
                            objetActuel = MARIO;
                            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 MUR:
                            SDL_BlitSurface(mur, NULL, ecran, &position);
                            break;
                        case CAISSE:
                            SDL_BlitSurface(caisse, NULL, ecran, &position);
                            break;
                        case OBJECTIF:
                            SDL_BlitSurface(objectif, NULL, ecran, &position);
                            break;
                        case MARIO:
                            SDL_BlitSurface(mario, NULL, ecran, &position);
                            break;
                    }
                }
            }

            // Mise à jour de l'écran
            SDL_Flip(ecran);
        }

        SDL_FreeSurface(mur);
        SDL_FreeSurface(caisse);
        SDL_FreeSurface(objectif);
        SDL_FreeSurface(mario);
    }

    voici mon code editeur.h:
    /*prototypes.*/

    /*
    editeur.h
    ---------

    Par k@rteur45,
    créer le 21/01/07 à 20:40 dernière modification le 21/01/07 à 21:30

    Rôle : prototypes des fonctions de gestion de l'éditeur de niveaux.
    */


    #ifdef DEF_EDITEUR
    #define DEF_EDITEUR

        void editeur(SDL_Surface* ecran);

    #endif



    voici mon code fichiers.c:
    /*
    fichiers.c
    ----------

    Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)

    Rôle : fonctions de lecture / écriture de fichiers de niveau.
    */


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    #include "constantes.h"
    #include "fichiers.h"

    int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR])
    {
        FILE* fichier = NULL;
        char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0};
        int i = 0, j = 0;

        fichier = fopen("niveaux.lvl", "r");
        if (fichier == NULL)
            return 0;

        fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier);

        for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
        {
            for (j = 0 ; j < NB_BLOCS_LARGEUR ; 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;
                }
            }
        }

        fclose(fichier);
        return 1;
    }

    int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR])
    {
        FILE* fichier = NULL;
        int i = 0, j = 0;

        fichier = fopen("niveaux.lvl", "w");
        if (fichier == NULL)
            return 0;

        for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
        {
            for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
            {
                fprintf(fichier, "%d", niveau[j][i]);
            }
        }

        fclose(fichier);
        return 1;
    }
    voici mon code fichiers.h:
    /*
    fichiers.h
    ----------

    Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)

    Rôle : prototypes des fonctions de lecture / écriture de fichiers de niveau.
    */


    #ifndef DEF_FICHIERS
    #define DEF_FICHIERS

        int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR]);
        int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR]);

    #endif


    voici mon code canstantes.h:
    /*
    constantes.h
    ------------

    Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)

    Rôle : définit des constantes communes à tout le programme (taille de la fenêtre...)
    */


    #ifndef DEF_CONSTANTES
    #define DEF_CONSTANTES

        #define TAILLE_BLOC         34 // Taille d'un bloc (carré) en pixels
        #define NB_BLOCS_LARGEUR    12
        #define NB_BLOCS_HAUTEUR    12
        #define LARGEUR_FENETRE     TAILLE_BLOC * NB_BLOCS_LARGEUR
        #define HAUTEUR_FENETRE     TAILLE_BLOC * NB_BLOCS_HAUTEUR


        enum {HAUT, BAS, GAUCHE, DROITE};
        enum {VIDE, MUR, CAISSE, OBJECTIF, MARIO, CAISSE_OK};

    #endif

    voila je croi que j'ai dis tous mes fichiers plus que les erreurs ;) :
    voici les erreurs que codeblocks me dis:
    Project : SDL Application
    Compiler : GNU GCC Compiler (called directly)
    Directory : C:\Documents and Settings\kevin de porre\Mijn documenten\language C\la sdl\sdltests1\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    In file included from main.c:23:
    mode demploi.c:10: warning: data definition has no type or storage class
    mode demploi.c:11: error: conflicting types for 'emploi'
    mode demploi.c:10: error: previous definition of 'emploi' was here
    mode demploi.c:11: warning: initialization makes integer from pointer without a cast
    mode demploi.c:11: error: initializer element is not constant
    mode demploi.c:11: warning: data definition has no type or storage class
    mode demploi.c:12: error: syntax error before '.' token
    In file included from main.c:23:
    mode demploi.c:13:24: warning: no newline at end of file
    In file included from main.c:24:
    mode demploi.c:10: error: conflicting types for 'emploi'
    mode demploi.c:11: error: previous definition of 'emploi' was here
    mode demploi.c:10: error: conflicting types for 'emploi'
    mode demploi.c:11: error: previous definition of 'emploi' was here
    mode demploi.c:10: warning: data definition has no type or storage class
    mode demploi.c:11: error: conflicting types for 'emploi'
    mode demploi.c:10: error: previous definition of 'emploi' was here
    mode demploi.c:11: error: redefinition of 'emploi'
    mode demploi.c:11: error: previous definition of 'emploi' was here
    mode demploi.c:11: warning: initialization makes integer from pointer without a cast
    mode demploi.c:11: error: initializer element is not constant
    mode demploi.c:11: warning: data definition has no type or storage class
    mode demploi.c:12: error: syntax error before '.' token
    In file included from main.c:24:
    mode demploi.c:13:24: warning: no newline at end of file
    main.c: In function `SDL_main':
    main.c:67: error: `mode' undeclared (first use in this function)
    main.c:67: error: (Each undeclared identifier is reported only once
    main.c:67: error: for each function it appears in.)
    main.c:67: error: syntax error before "demploi"
    Process terminated with status 1 (0 minutes, 0 seconds)


    voile c'est enfin fini :-°
    j'aimerai bien que vous modifiez le code au-lieu de me dire que faire vous pouvez bien-sûr aussi me le dire mais faites svp aussi modifier le code sinon ca vas devenir dificille. o_O
    maintenant je vais dormir mais demain je regarderai si j'ai des reponses,
    prenez votre temp (lol).
    merci d'avance,
    k@rteur45
    • Partager sur Facebook
    • Partager sur Twitter
      22 janvier 2007 à 21:13:39

      Faut quand même pas abuser.
      On va pas te modifier ton code, c'est à toi de le faire pour comprendre.
      Il y'a des erreurs/warnings que tu peux très bien résoudre toi même si tu lis 6s. Genre : "mode undeclared"
      • Partager sur Facebook
      • Partager sur Twitter
        22 janvier 2007 à 21:15:12

        Citation : Mercenary

        Faut quand même pas abuser.
        On va pas te modifier ton code, c'est à toi de le faire pour comprendre.
        Il y'a des erreurs/warnings que tu peux très bien résoudre toi même si tu lis 6s. Genre : "mode undeclared"

        sa
        bonjour,
        je sais seulement je ne comprend pas l'englais.
        merci d'avance,
        k@rteur45
        • Partager sur Facebook
        • Partager sur Twitter
          22 janvier 2007 à 21:16:38

          non ça c'est du fénéantisme, ya pas à comprendre l'anglais juste réfléchir 2 milliseconde, ou alors vraiment t'a jamais vu un mot anglais dans ce cas mes excuses
          • Partager sur Facebook
          • Partager sur Twitter
            22 janvier 2007 à 21:39:35

            Kikou.
            C'est en galérant qu'on retient le mieux !

            Il existe plein de traducteur en ligne. google translate par exemple.

            Alors prend ton courage à deux mains et c'est partit.

            Quoi qu'il arrive l'anglais te sera indispensable en prog ne serait-ce que pour lire une doc.
            (OUI lire une doc est indispensable ! :p )
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              22 janvier 2007 à 22:23:05

              mode demploi
              Euh pas d'espace dans le nom d'une fonction ok.
              Et puis elle est où ta fonction mode demploi justement ?
              Relit ton code tu vas sortir la moitié des erreurs car là... bref voilà quoi

              PS : undeclared = pas déclarée banane ;)
              • Partager sur Facebook
              • Partager sur Twitter
                23 janvier 2007 à 18:45:09

                Citation : Nigloo

                mode demploi
                Euh pas d'espace dans le nom d'une fonction ok.
                Et puis elle est où ta fonction mode demploi justement ?
                Relit ton code tu vas sortir la moitié des erreurs car là... bref voilà quoi

                PS : undeclared = pas déclarée banane ;)


                Bonjour,
                il y a encore d'erreurs?
                merci d'avance,
                k@rteur45
                • Partager sur Facebook
                • Partager sur Twitter
                  23 janvier 2007 à 20:53:51

                  a ba la pas mal ! tu nous balances tes 9 fichiers et tu nous demandes de te dire si il y a d'autres erreurs! Dis nous au moins dans quelle partie regarder parceque sinon c'est mission impossible sur un post de forum.
                  a+ rainbow
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 janvier 2007 à 13:12:13

                    Citation : rainbow

                    a ba la pas mal ! tu nous balances tes 9 fichiers et tu nous demandes de te dire si il y a d'autres erreurs! Dis nous au moins dans quelle partie regarder parceque sinon c'est mission impossible sur un post de forum.
                    a+ rainbow


                    bonjour,
                    dans le main.c et mode demploi.c,
                    merci d'avance,
                    k@rteur45
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 janvier 2007 à 14:35:49

                      il arrive à compiller mode demploi.c ? oO
                      parceque ton code n'est même pas dans une fonction !
                      • Partager sur Facebook
                      • Partager sur Twitter

                      problème avec mario sokoban

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown