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

C++ Discussion :

Casse brique SDL


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Casse brique SDL
    Bonjour je crée le jeu casse-brique avec C++ et SDL , mais jai un problème : lorsque il ya une collision entre les briques et la balle, les briques ne disparaissent pas

    voici la méthode :

    /****************************/
    void Brique::placebrique() // depose les briques en fonction de int placement
    {
    int i;
    char placement[10][10]= { 0,1,4,2,3,3,2,4,1,0,
    2,1,3,0,0,0,0,3,2,2,
    0,0,0,3,4,4,3,0,0,0,
    0,4,3,2,1,1,2,3,4,0,
    2,1,3,0,0,0,0,3,2,2,
    0,2,0,3,4,4,3,0,0,0,
    1,0,0,3,4,4,3,0,0,1,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0
    };

    for (y=0;y<10;y++)
    {
    for(x=0;x<10;x++)
    {
    rbrique.x=x*51;
    rbrique.y=y*21;

    i=placement[y][x];

    if(i>0) /* si ya une brique,une collison avec la balle peux avoir lieu*/
    {
    if((bl.rballe.x + bl.rballe.w) >= rbrique.x && (bl.rballe.x) <= (rbrique.x + rbrique.w)
    && (bl.rballe.y + bl.rballe.h) >= rbrique.y && (bl.rballe.y) <= (rbrique.y + rbrique.h ))
    {
    sens2=1;
    placement [y][x]=0; /* efface les briques */

    //SDL_UpdateRect(brique[i], 0, 0, 0,0);
    }
    }
    if(i>0)

    SDL_BlitSurface(brique[i],NULL,sc,&rbrique);

    }
    }
    }
    /*************************************/

    merciii d'avance

  2. #2
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    Hello,
    Sans avoir trop regarder, il me semble que la variable 'placement' contenant la position des briques n'est jamais utilisée pour l'affichage (en dehors de se mise à jour lors d'une collision). Il manque sans doute le rapatriement des résultats, genre copier placement dans brique.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    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
    /****************************/
    void Brique::placebrique() // depose les briques en fonction de int placement
    {
      int i;
      char placement[10][10]=  // PROBLEME 1
        { 
          0,1,4,2,3,3,2,4,1,0,
          2,1,3,0,0,0,0,3,2,2,
          0,0,0,3,4,4,3,0,0,0,
          0,4,3,2,1,1,2,3,4,0,
          2,1,3,0,0,0,0,3,2,2,
          0,2,0,3,4,4,3,0,0,0,
          1,0,0,3,4,4,3,0,0,1,
          0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0 
        }; 
    
      for (y=0;y<10;y++)
      {
        for(x=0;x<10;x++)
        {
          rbrique.x=x*51;
          rbrique.y=y*21; 
    
          i=placement[y][x];
    
          if(i>0) /* si ya une brique,une collison avec la balle peux avoir lieu*/
          {
            if((bl.rballe.x + bl.rballe.w) >= rbrique.x && (bl.rballe.x) <= (rbrique.x + rbrique.w)
              && (bl.rballe.y + bl.rballe.h) >= rbrique.y && (bl.rballe.y) <= (rbrique.y + rbrique.h ))
            {
              sens2=1; 
              placement [y][x]=0; /* efface les briques */
              //SDL_UpdateRect(brique[i], 0, 0, 0,0);
            }
          }
    
          if(i>0) // PROBLEME 2
            SDL_BlitSurface(brique[i],NULL,sc,&rbrique);
        }
      } 
    }
    /*************************************/
    J'ai mis des balises code pour plus de lisibilité. Maintenant, les problèmes.

    PROBLEME 1/ A chaque fois que tu rentres dans la fonction, le tableau est initialisé avec les même valeurs. Du coup, si une brique avait disparu, elle réapparait. Pour rendre l'initialisation unique, il faut change le type du tableau, qui doit devenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    static char placement[10][10]
    PROBLEME 2/ i est censé être la valeur qui préside à l'affichage de la brique. Si i > 0, alors il y a une brique. Lorsque tu souhaite effacer celle-ci, tu met bien placement [y][x] = 0 - mais i garde sa valeur. Du coup, si avant effacement la brique était présente, elle l'est toujours après effacement, et tu te retrouves à l'afficher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    placement [y][x] = 0;
    i = 0;
    Devrait résoudre le PROBLEME 2. Une autre possibilité est de faire de i une référence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for ...
      for ...
        int& i = placement [y][x];
        // toute future modification de placement[y][x] va aussi modifier i 
        // en même temps.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii Emmanuel bcp bcp
    tu m'as vraiment aider a resoudre mon probleme
    You made my day thanks a lot

    merci a toi aussi vikki

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

Discussions similaires

  1. [C][SDL][Jeu 2D] Casse-briques
    Par c1702 dans le forum Contribuez
    Réponses: 2
    Dernier message: 28/01/2013, 19h09
  2. Casse brique avec sdl
    Par Chris Redfield dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 17/08/2007, 10h21
  3. [Source] [SDL] Commencement d'un casse brique
    Par grincheux01 dans le forum Contribuez
    Réponses: 8
    Dernier message: 29/06/2006, 12h27
  4. Button "Start" dans un jeu de casse brique
    Par tex78 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 24/01/2006, 15h47
  5. [Tkinter] casse brique
    Par mamatt77 dans le forum Tkinter
    Réponses: 6
    Dernier message: 18/04/2005, 09h43

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