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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 151
    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
    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.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 127
    Billets dans le blog
    149
    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.
    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.

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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