Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme Mario Sokoban

Deplacement caisse et editeur

    26 juillet 2006 à 20:09:11

    Bonjour les zeros :)

    J'ai ici quelques problemes avec mon mario sokoban.
    J'avais du mal a le faire donc j'ai regarde la solution pour la collision et l'editeur :)

    1) Avec le deplacement caisse
    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;
        }
    }


    Voila en le code du deplacement du personnage et des caisses
    il marche parfaitement pour toute les directions sauf la droite.
    Je peux deplacer mon personnage mais pas le faire pousser des caisses vers la droite o_Oo_Oo_O

    J'avoue que je ne comprend pas. C'est exactement le meme code que celui de mateo...


    2) Avec l'editeur

    j'ai mon main qui appel ma fonction editeur(ecran);
    et quand j'appuie sur la touche 2...
    Je constate avec stupeur qu'il ne se passe rien o_O
    Pourtant avec la touche 1 ca charge le niveau je ne peux juste pas deplacer les caisses vers la droite.
    La ca ne charge meme pas le niveau. Ca ne fait rien

    voila le debut de ma fonction:


    #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...



    j'ai tous les includes dans le main et editeur et pourtant rien.
    J'ai essayer de changer la touche et tout dans le main... il n'y a toujours que l'appel de la fonction jouer() qui fonctionne :euh: ...

    /Moi pas comprendre xD

    Merci ;)
    • Partager sur Facebook
    • Partager sur Twitter

    Probleme 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