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 :

Puzzle Bobble en C avec SDL


Sujet :

SDL

  1. #21
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    Cela permet de faire des fonctions génériques et la balle sur laquelle on travaille est choisi par l'indice.
    Au départ toutes les balles sont dans le statut "OFF" donc on ne les affiche pas.
    On prend l'indice 1 et on passe ON , on réalise le tir puis la position de la balle (qui est figée lorsque elle atteint le haut).
    On passe alors à l'indice 2 , nouveau tir etc...

  2. #22
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2018
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Je viens d'avoir une illumination ! En effet tu veux dire qu'on établit un tableau de boules initialisé avec [8][11] et je mets toutes à zéro, et dès que je lance une boule je détecte quel emplacement est le plus proche, je l'envoie dessus et je change la variable de l'affichage de la boule qui était à 0, je le mets au chiffre de la couleur (1 ici pour le bleu) et comme ça cela "allume" la boule dans le tableau avec la couleur correspondante, et en réalité quand je rappuie sur espace je ramène la même boule qu'à l'étape 1 mais nous serons dupés et penserons qu'il s'agit d'une autre puisque j'aurai allumé une boule du tableau !

    J'essaie cela demain...

  3. #23
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2018
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'ai réussi à faire se placer mes boules selon des positions précises:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	double doubleX = (BPosX - 200) / 40.;
    	int entierX = (int)doubleX;
    	if (doubleX - entierX >= 0.5)
    	{
    	  entierX += 1;
    	}
    	bub_array[entierX][1] = 1;
    En revanche j'essaie ensuite de dessiner une nouvelle boule à cet emplacement mais sans réussite...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	BPosX = ((entierX) * 40.) + 200;
    	SDL_Surface *bubtemp = NULL;
    	SDL_Rect bubpostemp;
    	bubpostemp.x = (int)BPosX;
    	bubpostemp.y = (int)BPosY;
    	bubtemp = SDL_LoadBMP("bub_blue.bmp");
    	SDL_SetColorKey(bubtemp, SDL_SRCCOLORKEY | SDL_RLEACCEL, colorkey);
    	SDL_BlitSurface(bubtemp, NULL, screen, &bubpostemp);
    	SDL_FreeSurface(bubtemp);
    Par avance merci

  4. #24
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    As tu bien figée la valeur de BPosY ?
    Car si tu la décrémentes toujours : tu blits dans les nuages !

  5. #25
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2018
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Nous sommes dans la condition si la boule touche le BOARD TOP, donc elle à l'arrêt et BPosY n'est plus incrémenté.

    Mon problème est que quand je rappuie sur espace la boule revient en bas mais celle que j'ai dessiné n'apparaît pas...

  6. #26
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    Il faut faire une routine qui blit toutes les balles en correspondance avec les 1 de ton tableau [8][11].
    Mais moi à ta place j'aurais fait un tableau de la structure Balle (avec les positions, état ...).

  7. #27
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2018
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    En effet mais malgré une double boucle for, du style for (i=0;i<BUB_NX;i++){ for (j=0;j<BUB_NY;j++){}} mais je pense que ce qui ne fonctionne pas est ce que je mets dedans pour "dessiner les boules", j'ai du mal à me familiariser avec SDL...

  8. #28
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    Il faudrait voir le code pour pouvoir aider.
    Pour se familiariser avec SDL : faire des fonctions de base puis les tester.
    Une fois que l'on sait que l'on a quelque chose qui fait ce que l'on veut : c'est plus facile de construire et surtout de debugger le code (moins de lignes à relire).

  9. #29
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2018
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Merci de ton temps. J'ai finalement trouvé comment dessiner une boule à chaque valeur 1 de mon tableau, je l'avais placé juste avant le background, du coup il me dessinait le background par dessus... c'est donc pour ça que la boule n'était pas visible lol, en placant la boucle juste après le background ça marche bien mieux !

    A présent je dois gérer la collision et importer les boules de différentes couleurs mais cela prend forme !

  10. #30
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2018
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'ai bien avancé, désormais je peux lancer autant de boules que je le souhaite et les couleurs changent à chaque nouvelle boule, désormais j'aimerai ne plus afficher les boules lorsqu'elles sont associées par 3, toutes mes boules sont dans mon tableau bub_array[ligne][colonne] et possède la valeur de la couleur de la boule (1 à 6) ou 0 si pas de boule.

    Des idées ??

  11. #31
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par zolkovic Voir le message
    Des idées ??
    Ecrire un algo qui itère sur les boules et les retire quand il en trouve 3 alignés
    Quant à l'algo en soit, bien que sûrement assez simple, il ne te sera pas fourni entièrement ici.
    Ensuite il faut sûrement aussi remonter les boules en-dessous, puisque ce ne sont pas forcément les dernières et plus basses qui disparaitront.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  12. #32
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2018
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Ecrire un algo qui itère sur les boules et les retire quand il en trouve 3 alignés
    Oui en effet c'est ce que j'essaie de faire mais ça m'a l'air assez complexe, j'ai l'impression de ne pas m'orienter vers un bon algorithme,

    Je pensais faire à chaque boule déposée, regarder dans les cases au tour si on en trouve une de la même valeur (couleur) et si oui on regarde autour de cette autre boule s'il y en a une troisième... Je vois bien une fonction récursive pour faire cela, mais je t'avouerai que je piétine un peu aujourd'hui...

  13. #33
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Ca ressemble effectivement à une possibilité. Récursivement pourquoi pas, du moment que tu passes pas dans une boucle infinie à faire des aller-retours entre 2 boules.
    Quant aux difficultés rencontrées, on peut aider à les surmonter, encore faut-il présenter quelque chose.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  14. #34
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2018
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Finalement je tourne avec un autre tableau, et puisque tu veux voir du code, voici la fonction que j'appelle:

    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
    int propagate(int bub_array[BUB_NY][BUB_NX], int visited[BUB_NY][BUB_NX], int col)
    {
      int new = 0;
      for (int r = 0; r < BUB_NY; ++r) 
      {
        for (int c = 0; c < BUB_NX; ++c) 
        {
          if (col ? bub_array[r][c] != col : !bub_array[r][c])
            continue;
          //printf("for %d %d:\n", r, c);
          for (int dr = -1; dr <= 1 && !visited[r][c]; ++dr) 
          {
            if (r+dr < 0 || r+dr >= BUB_NY)
              continue;
            for (int dc = -1; dc <= 1 && !visited[r][c]; ++dc) 
    	{
              if ((!dr && !dc) || (dr && dc == 1-2*(r%2)))
                continue;
              if (c+dc < 0 || c+dc >= BUB_NX-((r+dr)%2))
                continue;
              //printf("  testing %d %d\n", r+dr, c+dc);
              if (visited[r+dr][c+dc]) 
    	  {
                visited[r][c] = 1;
                ++new;
              }
            }
          }
        }
      }
      return new;
    }
    et voici la partie dans le main qui l'appelle:
    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
    	for (int r = 0; r < BUB_NY; ++r)
              for (int c = 0; c < BUB_NX; ++c)
                visited[r][c] = 0;
            int cnt = visited[entierY][entierX] = 1, new = 1;
            while ((new == propagate(bub_array, visited, entierX)))
              cnt += new;
     
            if (cnt >= 3) 
    	{
              for (int r = 0; r < BUB_NY; ++r)
                for (int c = 0; c < BUB_NX; ++c)
                  if (visited[r][c])
                    bub_array[r][c] = 0;
              for (int r = 0; r < BUB_NY; ++r)
                for (int c = 0; c < BUB_NX; ++c)
                  visited[r][c] = !r && bub_array[r][c];
              while ((new == propagate(bub_array, visited, 0)));
              for (int r = 0; r < BUB_NY; ++r)
                for (int c = 0; c < BUB_NX; ++c)
                  if (!visited[r][c])
                    bub_array[r][c] = 0;
    	}

Discussions similaires

  1. Probleme audio avec SDL
    Par fab101 dans le forum SDL
    Réponses: 5
    Dernier message: 17/03/2006, 18h31
  2. Problème d'affichage d'un sprite avec SDL
    Par youp_db dans le forum SDL
    Réponses: 1
    Dernier message: 11/02/2006, 19h08
  3. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 10h10
  4. [debutant]opengl avec sdl sous visual c++
    Par bourinator dans le forum OpenGL
    Réponses: 1
    Dernier message: 13/06/2005, 12h24
  5. Zone de texte avec SDL
    Par bobtux dans le forum OpenGL
    Réponses: 2
    Dernier message: 08/03/2005, 19h47

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