Partage
  • Partager sur Facebook
  • Partager sur Twitter

début de snake

    13 juin 2006 à 12:03:38

    bonjour, j'ai comme projet de creer un snake.

    Mais voila je blok, je n'arrive pas à coller un carré à mon snake lorsque celui passe dessus pour ainsi former sa queue.

    J'avais penser à:
    if(tete == carre)
    SDL_BlitSurface(carre, NULL, tete, &positionTete + 1)


    Mais bien sur sa ne marche pas, j'ai penser à plein d'autre chose mais rien à y faire.
    Donc si vous pouvez m'aider et me dire comment faire, sa m'aiderez beaucoup.
    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2006 à 13:40:35

      Tu ne peux pas incrementer &positionTete comme ca.
      Il faut que tu fasses :


      if(tete == carre)
      {
      // A modifier en fonction de ton code
      positionTete.x++;
      SDL_BlitSurface(carre, NULL, tete, &positionTete + 1);
      }

      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2006 à 13:53:39

        mets avec tu envoies en argument l'adresse du position tete. tu ne peut pas rajouter un car il s'agit d'une adresse.
        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2006 à 13:59:29

          et oui c la magie des ponteurs on peut pas incrémenyter directement la cible ! bonne chance !
          • Partager sur Facebook
          • Partager sur Twitter
            13 juin 2006 à 14:05:30

            in crémente ton adresse ne menera qu'a des bugs.

            si l'adresse est (je dis au pif) 16C45 tu obtiendras 16C , variable qui t'appartiendras si ce n'est pas un void mais ce ne sera pas le début de ta variable. je ne sais ps si tu m'as compris mais bon.

            j'ai du mal a comprendre ce que tu veux faire, alors je ( on ?) ne peux pas t'aider.
            • Partager sur Facebook
            • Partager sur Twitter
              13 juin 2006 à 14:08:29

              Citation : Niak

              [...] incrémenter directement la cible !


              Je pense qu'il y a confusion. &positionTete n'est pas la cible mais l'adresse de la structure afin de pouvoir le passer en argument à un pointeur.

              Forcément, si on modifie l'adresse de la variable, on ne peut qu'arriver à des bugs et plantages certains.

              [EDIT] Grilled...
              • Partager sur Facebook
              • Partager sur Twitter
                13 juin 2006 à 17:17:13

                voila je dévellope:

                J'ai un carré vert pour la tete du serpent qui avance tout seul et que je dirige dans la fenetre à l'endroit que je veut grace au fleche du clavier.
                J'ai ensuite bliter un autre carré vert fixe sur l'ecran.

                Et je veux faire en sorte que lorsque ma tete de mon serpent passe sur se carré vert, que celui ci se colle à la suite de ma tete pour ainsi former un début de queue.

                Mais je n'y arrive pas.
                • Partager sur Facebook
                • Partager sur Twitter
                  14 juin 2006 à 11:44:38

                  alors personne peux m'aider ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 juin 2006 à 11:48:49

                    essaye de faire ceci

                    if(tete == carre)
                    SDL_BlitSurface(carre, NULL, tete, (positionTete + 1))

                    vut que tu execute un calcule ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 juin 2006 à 12:11:14

                      nn désolé ce n'est pas sa il m'affiche une erreur : invalid operands to binary +

                      Donc si quelqu'un c'est comment coller un carré apres la tete de mon serpent lorsque celui ci passe dessus qu'il me le dise svp
                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 juin 2006 à 22:22:32

                        passe nous ton code complet stp
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 juin 2006 à 11:35:41

                          voici mon code complet:

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

                          int main(int argc, char *argv[])
                          {

                             
                              SDL_Surface *ecran = NULL, *carre = NULL, *suite = NULL;
                              SDL_Rect positionCarre, positionSuite;
                              int continuer = 1, direction = 0, carrePause = 0, tempsPrecedent = 0, tempsActuel = 0;
                              SDL_Event event;
                             
                             
                             
                             
                              SDL_Init(SDL_INIT_VIDEO);
                              ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                              SDL_WM_SetCaption("exe1", NULL);

                             
                              carre = IMG_Load("carre.jpg"); //tete du serpent
                              positionCarre.x = ecran->w / 2 - carre->w / 2;
                              positionCarre.y = ecran->h / 2 - carre->h / 2;
                              SDL_BlitSurface(carre, NULL, ecran, &positionCarre);
                             
                              suite = IMG_Load("carre.jpg"); //carre a prendre afin qu'il soit coller deriere la tete
                              positionSuite.x = 20;
                              positionSuite.y = 20;
                              SDL_BlitSurface(suite, NULL, ecran, &positionSuite);

                              while(continuer)
                              {
                                    SDL_PollEvent(&event);
                                    switch(event.type)
                                    {
                                                case SDL_QUIT:
                                                continuer = 0;
                                                break;
                                               
                                                case SDL_KEYDOWN:
                                                switch(event.key.keysym.sym)
                                                {
                                                     case SDLK_p:
                                                     carrePause = 1;
                                                     break;
                                                     
                                                     case SDLK_r:
                                                     carrePause = 0;
                                                     break;
                                               
                                                    case SDLK_RIGHT:
                                                     direction = DROIT;
                                                     
                                                     break;
                                                     
                                                    case SDLK_LEFT:
                                                     direction = GAUCHE;
                                                     
                                                     break;
                                                     
                                                    case SDLK_UP:
                                                     direction = HAUT;
                                                   
                                                     break;
                                               
                                                    case SDLK_DOWN:
                                                     direction = BAS;
                                                     
                                                     break;
                                                }
                                    }
                                    tempsActuel = SDL_GetTicks();
                                    if (tempsActuel - tempsPrecedent > 120)
                                    {
                                          if(!carrePause)
                                          {
                                          if(direction == DROIT)
                                          positionCarre.x++;
                                          else if(direction == GAUCHE)
                                          positionCarre.x--;
                                          else if(direction == HAUT)
                                          positionCarre.y--;
                                          else if(direction == BAS)
                                          positionCarre.y++;
                                          }
                                    }
                                    else
                                    {
                                        SDL_Delay(120 - (tempsActuel - tempsPrecedent));
                                    }
                                   
                                    if(positionCarre.x + carre->w >= ecran->w)  //cette partie est temporaire
                                    direction = GAUCHE;
                                   
                                    else if(positionCarre.y + carre->h >= ecran->h) //cette partie est temporaire
                                    direction = HAUT;
                                   
                                   
                                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 128, 255));
                                    SDL_BlitSurface(carre, NULL, ecran, &positionCarre);
                                    SDL_BlitSurface(suite, NULL, ecran, &positionSuite);
                                    SDL_Flip(ecran);
                                   
                                    }
                           SDL_FreeSurface(carre);
                           SDL_FreeSurface(suite);
                           SDL_Quit();
                           return EXIT_SUCCESS; 
                          }


                          Il ne me manque plus que le code pour faire coller le carré deriere la tete lorsque celle ci passe dessus
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 juin 2006 à 16:04:49

                            Moi j'en ai fait avant hier et j'ai procédé comme ça :
                            - une structure qui a pour membre x et y (étant la position sur la grille);
                            - un tableau de structure qui représente mon snake ;
                            - une variable int ou long qui contient la longueur du snake.
                            Au moment d'agrandir la taille du serpent, tu prend tableau[i+1] et tu définit ses coordonnés, puis tu incrémente la longueur du snake.
                            Pour le déplacement du serpent après, j'ai fait une boucle for où chaque "bout" prend les coordonnées du précendent.
                            Voilà, j'espère que ça ta aidé ;)
                            • Partager sur Facebook
                            • Partager sur Twitter

                            début de snake

                            × 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