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 :

Création de jeu de tampon


Sujet :

SDL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Octobre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Togo

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Création de jeu de tampon
    salut, je suis novice dans la programmation avec SDL. j'ai décider après avoir vu une partie des évenements de faire un petit jeu.
    Le but du jeu est de disposé sur un coté de ma fenêtre des petites images que je dois déplacer un à un(avec le clique gauche de la souris) pour former un carré ou un rectangle.
    Maintenant j'ai un problème c'est que je n'arrive pas à faire déplacer mes images une par une.

    Voici mon code( ce n'est pas encore fini). J'aimerais avoir votre aide pour continuer. Excusez moi pour la non clarté du code.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #include<stdio.h>
    #include<stdlib.h>
    #include<SDL/SDL.h>
     
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran=NULL, *photo1=NULL, *photo2=NULL, *photo3=NULL;
        SDL_Rect position1, position2, position3;
        SDL_Event evene;
        int continuer=1, x1, y1;
     
        if(SDL_Init(SDL_INIT_VIDEO)==-1)
        {
               fprintf(stderr,"Erreur Impossible d'ouvrir votre fenetre SDL: %s\n",SDL_GetError());
               exit(EXIT_FAILURE);
        }
     
          SDL_WM_SetIcon(SDL_LoadBMP("icone.bmp"), NULL);
     
         SDL_WM_SetCaption("Photo!!!",NULL);
     
         ecran=SDL_SetVideoMode(710,682,32,SDL_HWSURFACE| SDL_DOUBLEBUF);
     
         SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format, 122, 38, 99));
     
         photo1=SDL_LoadBMP("photo1.bmp");
     
         photo2=SDL_LoadBMP("photo2.bmp");
     
          photo3=SDL_LoadBMP("photo3.bmp");
     
             position1.x=0;
             position1.y=0;
        position2.x=0;
        position2.y=228;
               position3.x=0;
               position3.y=455;
     
         SDL_BlitSurface(photo1,NULL, ecran, &position1);
        SDL_BlitSurface(photo2,NULL, ecran, &position2);
        SDL_BlitSurface(photo3,NULL, ecran, &position3);
     
         SDL_Flip(ecran);
         SDL_EnableKeyRepeat(10,10);
     
         while(continuer)
        {
            SDL_WaitEvent(&evene);
            switch(evene.type)
            {
            case SDL_QUIT:
                continuer=0;break;
     
             case SDL_MOUSEBUTTONUP:
     
                 switch(evene.button.button)
                {
                case SDL_BUTTON_LEFT:
                    position1.x=evene.button.x;
                    position1.y=evene.button.y;
                    x1=evene.button.x;
                    y1=evene.button.y;break;
     
                case SDL_BUTTON_RIGHT:
                    position1.x=x1;
                    position1.y=y1;
                    break;
                }
                break;
            }
            SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format, 122, 38, 99));
            photo1=SDL_LoadBMP("photo1.bmp");
            photo2=SDL_LoadBMP("photo2.bmp");
            photo3=SDL_LoadBMP("photo3.bmp");
     
     
             SDL_BlitSurface(photo1,NULL, ecran, &position1);
            SDL_BlitSurface(photo2,NULL, ecran, &position2);
        SDL_BlitSurface(photo3,NULL, ecran, &position3);
            SDL_Flip(ecran);
        }
     
        SDL_FreeSurface(photo1);
        SDL_FreeSurface(photo2);
        SDL_FreeSurface(photo3);
        SDL_Quit();
        return EXIT_SUCCESS;
    }

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    C'est clair que le code manque de clarté.
    N'oublie pas de mettre la balise code disponible sur le forum.

    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    photo1=SDL_LoadBMP("photo1.bmp");
    photo2=SDL_LoadBMP("photo2.bmp");
    photo3=SDL_LoadBMP("photo3.bmp");
    Ne jamais mettre cala dans une boucle , de plus tu ne le libéra pas pendant la boucle donc tu as une fuite de mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SDL_Surface *ecran=NULL, *photo1=NULL, *photo2=NULL, *photo3=NULL;
    SDL_Rect position1, position2, position3;
    photo et position devrait être dans un tableau.
    photo1=SDL_LoadBMP("photo1.bmp");

    photo2=SDL_LoadBMP("photo2.bmp");

    photo3=SDL_LoadBMP("photo3.bmp");


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    photo1=SDL_LoadBMP("photo1.bmp");
     
    photo2=SDL_LoadBMP("photo2.bmp");
     
    photo3=SDL_LoadBMP("photo3.bmp");
    si toute tes image se suive niveau nombre (dans le genre photo1 , photo2 ect) , peut être qu'utiliser sprintf est plus pratique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     SDL_EnableKeyRepeat(10,10);
    Dans les fait assez inutile (ou alors il ne sert que pour le SDL_WaitEvent

    Pas grand chose a dire a part que le code d’être indenter correctement.
    Bref donc il faut que la prochaine fois tu met la balise code / que tu indente correctement et que tu résout ton probleme de fuite de mémoire.
    Après le C et la SDL reste un langage et une lib bas niveau , tu viens juste de commencer un code qu'il possède deja de grosse lacune(fuite de mémoire) donc le premier conseil c'est d’être extrêmement rigoureux a ceux qu'on fait.

  3. #3
    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
    Bonjour,

    Voici un conseil sur la manière de faire après avoir appliqué les recommandations de Kannagi.

    Pour déplacer tes images une par une il y a plusieurs étapes:

    - Dans le case MOUSEBUTTONDOWN : il faut tester les coordonnées de la souris pour voir quelle image est concernée.
    Et positionner un flag (booléen) relatif à l'image.

    - Dans le case MOUSEMOTION : en fonction du flag positionné on fait suivre les positions concernées sur les coordonnées de la souris.

    - Dans le case MOUSEBUTTONUP : on reset tous les flags

    Bonne continuation ...

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Octobre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Togo

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour l'aide que vous m'aviez apporté. Si le programme réussi je vous ferai signe. A bientôt!!!

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Ce n'est pas au programme de réussir, mais à vous de réaliser correctement pour qu'il fasse ce que vous souhaitez
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Bibliothèque PHP création de jeu online : ça existe?
    Par smirnoff dans le forum Jeux web
    Réponses: 7
    Dernier message: 09/05/2015, 21h43
  2. Création Introduction Jeu
    Par ironzorg dans le forum SDL
    Réponses: 5
    Dernier message: 15/05/2007, 21h14

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