Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mon programme crash :(

19 novembre 2017 à 3:59:48

Bonjour j'ai un probleme avec mon programme a chaque fois que je le lance tout va bien et ensuite quand j'appuie sur 1 pour le lancé il ne repond pas :( vous pouvez m'aidé svp voici mon programme:

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

int main(int argc, char *argv[])
{
    SDL_Surface *ecran;
    SDL_Init(SDL_INIT_VIDEO);
    ecran = SDL_SetVideoMode(700, 700, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);


    Menu(ecran);

    Game(ecran);
    SDL_Quit();
    return 0;
}

struct.h:

#ifndef DEFSTRUCT
#define DEFSTRUCT

typedef struct Screen Screen;
struct Screen
{
    SDL_Surface *ecran;
};
typedef struct Objet Objet;
struct Objet
{
    SDL_Surface *Fond;
    SDL_Surface *SpaceShip;
};

void Menu(SDL_Surface *screen);
int Game(SDL_Surface *ecran);



#endif // DEFSTRUCT

menu.c:

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>

void Menu(SDL_Surface *screen)
{
    int i = 1;
    SDL_Event event;

    while(i)
    {
        SDL_PollEvent(&event);
        switch(event.type)
        {
        case SDL_KEYDOWN:
            switch(event.key.keysym.sym)
            {
            case SDLK_1:
                i = 0;
                break;
            }
            }
    }

}

Game.c: le probleme est surement ici a oui est les image s'affiche une fois

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


int Game(SDL_Surface *ecran)
{
    Objet Pontin;
    SDL_Rect Pos;
    SDL_Rect PosSpaceShip;
    Pos.x = 0;
    Pos.y = 0;

    PosSpaceShip.x = 350;
    PosSpaceShip.y = 600;

    Pontin.SpaceShip = SDL_LoadBMP("SpaceShip.bmp");
    Pontin.Fond = SDL_LoadBMP("FondGame.bmp");

    int i = 1;
    SDL_Event evente;

    SDL_EnableKeyRepeat(10, 10);
    while(i)
    {
        switch(evente.type)
        {
        case SDL_QUIT:
            i = 0;
            break;
        case SDL_KEYDOWN:
            switch(evente.key.keysym.sym)
            {
            case SDLK_RIGHT:
                PosSpaceShip.x++;
            case SDLK_LEFT:
                PosSpaceShip.x--;
            }
        }
        SDL_BlitSurface(Pontin.Fond, NULL, ecran, &Pos);
        SDL_BlitSurface(Pontin.SpaceShip, NULL, ecran, &PosSpaceShip);
        SDL_Flip(ecran);
    }

    SDL_FreeSurface(Pontin.SpaceShip);

    return 0;
}






  • Partager sur Facebook
  • Partager sur Twitter
19 novembre 2017 à 11:40:47

Salut,

  • Vérifie le retour des fonctions à risques.
  • Tu ne libères pas la surface Pontin.fond.
  • À quoi te sert ta fonction Menu ?
  • À quoi te sert ta structure Screen ?
  • Anglais ou français, mais pas les deux, il faut choisir.
  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
Anonyme
22 novembre 2017 à 9:03:27

Donc, tu as suivi toutes les recommandation de yo@n97one, et tu as toujours le même problème ?

Repost ton code.
  • Partager sur Facebook
  • Partager sur Twitter
22 novembre 2017 à 13:47:54

manque les break dans le switch ligne 38

  • Partager sur Facebook
  • Partager sur Twitter
** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
22 novembre 2017 à 14:05:25

La fonction menu ne sert qu'à faire une pause ( assez curieux...)

Le problème est dans la fonction "game"

 Pontin.SpaceShip = SDL_LoadBMP("SpaceShip.bmp");
 Pontin.Fond = SDL_LoadBMP("FondGame.bmp");

//juste après, je devrais avoir un test pour vérfier que les images ont été chargé sans soucis.

les images s'affichent une fois : donc tu as au moins fait un tour de boucle de Game().


Mais... je ne vois pas de code qui modifie ou initialise ta variable "evente" -> du coup tu ne peux pas bouger ton vaisseau et tu ne peux pas fermer la fenêtre avec la croix -> ton OS va te dire qu'il ne répond pas.

  • Partager sur Facebook
  • Partager sur Twitter
22 novembre 2017 à 14:43:19

ah oui manque sdl_waitevent...
  • Partager sur Facebook
  • Partager sur Twitter
** La doc, c'est comme le PQ: ça sert à se démerder tout seul **