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 :

mon premier jeu avec C et SDL


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut mon premier jeu avec C et SDL
    salut a tous,
    je suis débutant dans le langage C
    et je suis entrain de construire le jeux de tank si vous le savez
    mais ce pendant le programme se plante aprés quelque secondes
    le programme est a propos d'un deplacement aleatoire et rectiligne d'un char
    si vous voulez bien m'aidez et merci bien
    voici mon bout de 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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #define hauteur 640
    #define largeur 480
    #ifdef __cplusplus
        #include <cstdlib>
    #else
        #include <stdlib.h>
    #endif
    #ifdef __APPLE__
    #include <SDL/SDL.h>
    #else
    #include <SDL.h>
    #include<time.h>
    #include<windows.h>
    #include<conio.h>
    #endif
     
    int Random (int Min, int Max)
    {
    return (Min + (rand () % (Max-Min+1)));
    }
     
     
     
    int main(int argc, char *argv[])
    {
    SDL_Surface *ecran = NULL, *tank = NULL;
    SDL_Rect positiontank;
     
    int choix,continuer=1;
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); /* Double Buffering */
        SDL_WM_SetCaption("Gestion des évènements en SDL", NULL);
     
        tank = SDL_LoadBMP("tank.bmp");
     
        SDL_SetColorKey(tank, SDL_SRCCOLORKEY, SDL_MapRGB(tank->format, 0, 0, 255));
     
        positiontank.x = ecran->w / 2 - tank->w / 2;
        positiontank.y = ecran->h / 2 - tank->h / 2;
     
     
     
     
    while (continuer)
     
    {
    srand(time(NULL));
    choix=Random(1,4);
     
     
     switch(choix)
     {
     
     
            case 1://HAUT
                positiontank.y--;
                Sleep(3);
                break;
     
     
            case 2://BAS
                   if((positiontank.y + tank->h)<(ecran->h))
                   {
                   positiontank.y++;
                   Sleep(3);
     
                   }
            break;
     
     
            case 3://DROITE
                    if((positiontank.x + tank->w)<(ecran->w))
                        {positiontank.x++;
                          Sleep(3);
                        }
            break;
     
            case 4://GAUCHE
                positiontank.x--;
                Sleep(3);
                break;
     
         }
     
     
     
     
         SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255,255, 255));
         SDL_BlitSurface(tank, NULL, ecran, &positiontank);
         SDL_Flip(ecran);
     
    }
     
       SDL_FreeSurface(tank);
     
     
    return EXIT_SUCCESS;
    }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Utilise déjà des printf pour savoir à quelle ligne ça plante.

    Ensuite, tu as oublié de mettre un srand donc ton rand() renverra toujours les même chiffre à chaque exécution.

    Je pense donc que c'est une valeur retournée par ta fonction Random qui ne doit pas convenir, tu as donc dû te trompé sur une de tes formules.

  3. #3
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 057
    Points
    33 057
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    @Neckara> il y a bien un srand(time(NULL)) caché dans le while ^-^'

    Je ne vois aucune raison évidente de plantage, donc je note juste quelques trucs :
    - les sleep(3) ne sont pas forcément utiles, à la limite un sleep(1) à la fin du while
    - tu check bien que le char ne déborde pas par la droite ou le bas de l'écran, mais tu ne vérifies pas pour le haut et la gauche
    - pour utiliser le double buffering, il faut spécifier le flag SDL_DOUBLEBUF à la création de la surface écran

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 902
    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 902
    Points : 220 064
    Points
    220 064
    Billets dans le blog
    126
    Par défaut
    Bonjour,

    Lorsque vous avez un crash, votre meilleur ami est le debogueur (qui est bien souvent integre a l'editeur.

    Donc, lancez votre programme dans le debogueur est cherchez a trouver la source du bogue ainsi que sa raison. Une fois cela fait, vous aurez surement la solution.

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Autant pour moi, je ne l'avais pas vu

    Il est vrai que d'utiliser le débogueur ou de mettre des printf pour voir à quel ligne le programme plante, c'est la base.

    Tu dis que ton programme plante, mais pourrait-on avoir plus de précision?

    Quelle est la valeur retournée?
    A quelle ligne plante-t-il?

Discussions similaires

  1. [AJAX] Mon premier test avec Ajax : échec
    Par Nasky dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/05/2007, 01h24
  2. Mon premier document avec Latex
    Par noussaENSI dans le forum Erreurs - Avertissements
    Réponses: 2
    Dernier message: 29/07/2006, 12h56
  3. Mon premier jeu!
    Par ArHacKnIdE dans le forum Web
    Réponses: 59
    Dernier message: 05/06/2006, 20h01
  4. Mon premier soucis avec wxWidgets (wxComboBox)
    Par mister3957 dans le forum wxWidgets
    Réponses: 3
    Dernier message: 23/02/2006, 10h58

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