Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aider moi ca fait tris que je cherche la soluce ;(

20 juin 2017 à 22:55:07

Bonjour actuelllemnt j'essaye de resoudre  un probleme

quand je compile mon programme il m'affiche aucune erreure donc la ok mais quand je le lance mon programme la fenetre s'ouvre et se ferme en 0,985 seconde (oui j'ai regarder) et elleme met un return 3 pouvais vous m'aider svp sa fais trois jour que je cherche une soluce :(

main.c =

#include <stdlib.h>

#include <stdio.h>

#include <SDL/SDL.h>

#include <SDL/SDL_ttf.h>

#include <SDL/SDL_image.h>

#include "Hider.h"


typedef int bool;

#define true 1

#define false 0

int Money;

int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL;
    SDL_Surface *Curseur = NULL;
    SDL_Surface *Fond = NULL;
    SDL_Surface *Menu = NULL;
    SDL_Surface *OpenMenu = NULL;
    SDL_Surface *Ennemy = NULL;
    SDL_Surface *Argent = NULL;
    SDL_Surface *AffLife = NULL;
    SDL_Surface *Nameaff = NULL;
    SDL_Surface *End = NULL;

    FILE *fic = NULL;
    FILE *Name =NULL;

    TTF_Font *police = NULL;
    SDL_Color CouleurArgent = {248 , 253, 30};
    SDL_Color CouleurVie = {255 , 10, 10};

    int i = 0;
    char MonPf[20] = "";
    char *ficMoney = NULL;
    int Live = 4;
    char Life[20] = "";
    char RetName[20] = "";
    int Y = 200;

    SDL_Rect positionFond;
    SDL_Rect PosMenu;
    SDL_Rect PosOpen;
    SDL_Rect Curs;
    int boucle = 1;

    SDL_Event event;

    SDL_Rect EnnemyPod;
    SDL_Rect ArgentPos;
    SDL_Rect Lifepos;
    SDL_Rect NamePos;


    Curs.x = 0;
    Curs.y = 0;

    positionFond.x = 0;
    positionFond.y = 0;

    PosMenu.x = 700;
    PosMenu.y = 0;

    PosOpen.x = 400;
    PosOpen.y = 5;

    EnnemyPod.x = 0;
    EnnemyPod.y = 300;

    ArgentPos.x = 500;
    ArgentPos.y = 10;

    Lifepos.x = 500;
    Lifepos.y = 50;

    NamePos.x = 300;
    NamePos.y = 10;

    SDL_Init(SDL_INIT_VIDEO);

    TTF_Init();
    police = TTF_OpenFont("AlphaWood.ttf", 22);

    ecran = SDL_SetVideoMode(1000 , 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    Fond = SDL_LoadBMP("Fond.bmp");
    Menu = SDL_LoadBMP("Menu.bmp");
    OpenMenu = SDL_LoadBMP("MenuClic.bmp");
    Curseur = SDL_LoadBMP("Curseur.bmp");
    End = SDL_LoadBMP("Game Over.bmp");

    fic = fopen("Money.txt", "r+");
    Name = fopen("Name.txt", "r+");


    Ennemy = SDL_LoadBMP("Ennemy.bmp");
    SDL_SetColorKey(Ennemy, SDL_SRCCOLORKEY, SDL_MapRGB(Ennemy -> format, 255, 255, 255));



    SDL_WM_SetCaption("Gun Army", NULL);
    SDL_WM_SetIcon(SDL_LoadBMP("Sprite Soldier.bmp"), NULL);
    SDL_SetColorKey(Curseur, SDL_SRCCOLORKEY, SDL_MapRGB(Curseur -> format , 255, 255, 255));
    SDL_SetAlpha(Menu , SDL_SRCALPHA, 0);
    SDL_BlitSurface(Menu , NULL, ecran, &PosMenu);
    SDL_ShowCursor(SDL_DISABLE);

    fgets(RetName, 20, Name);

    SDL_Flip(ecran);

    //Début

    while(boucle)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
        case SDL_QUIT:
            boucle = 0;
            break;

        case SDL_MOUSEMOTION:
            Curs.x = event.motion.x - (Curseur -> w / 2);
            Curs.y = event.motion.y - (Curseur -> h / 2);
            SDL_Delay(5);
            break;

        case SDL_MOUSEBUTTONDOWN:
            switch(event.button.button)
            {
            case SDL_BUTTON_RIGHT:
                CollisionMenu(event.motion.x , event.motion.y, PosOpen, Menu);
                break;
            case SDL_BUTTON_LEFT:
                CollisionEnnemy(event.motion.x, event.motion.y, EnnemyPod, Ennemy, &Y, &Money);
                break;
            }
            break;
        }
        sprintf(MonPf , "Money : %d", Money);
        sprintf(Life , "Life = %d", Live);
        Argent = TTF_RenderText_Solid(police , MonPf, CouleurArgent);
        AffLife = TTF_RenderText_Solid(police, Life, CouleurVie);
        Nameaff = TTF_RenderText_Blended(police, RetName, CouleurVie);

        SDL_BlitSurface(Fond , NULL, ecran, &positionFond);

        SDL_BlitSurface(Ennemy, NULL, ecran, &EnnemyPod);
        SDL_BlitSurface(Menu , NULL, ecran, &PosMenu);
        SDL_BlitSurface(OpenMenu, NULL, ecran, &PosOpen);
        SDL_BlitSurface(Argent , NULL, ecran, &ArgentPos);
        SDL_BlitSurface(AffLife , NULL, ecran, &Lifepos);
        SDL_BlitSurface(Nameaff, NULL, ecran, &NamePos);
        SDL_BlitSurface(Curseur, NULL, ecran, &Curs);
        i++;

        EnnemyMoove(Ennemy , EnnemyPod, Y);

        Damage(&Live , &Y);

        EndTest(Live , &boucle, ecran, Argent, End, positionFond, ArgentPos);

        SDL_Flip(ecran);

    }

    //Fin

    fgets(ficMoney , 1, fic);
    ficMoney = NULL;
    fprintf(fic ,"%d | %s", Money, MonPf);


    SDL_FreeSurface(Ennemy);
    SDL_FreeSurface(OpenMenu);
    SDL_FreeSurface(Argent);
    SDL_FreeSurface(Menu);
    SDL_FreeSurface(Curseur);
    SDL_FreeSurface(Fond);
    SDL_FreeSurface(Nameaff);
    SDL_FreeSurface(End);
    TTF_CloseFont(police);
    fclose(fic);
    fclose(Name);
    SDL_Quit();
    TTF_Quit();
    return EXIT_SUCCESS;
}

Moove.c =

#include <stdlib.h>

#include <stdio.h>

#include <SDL/SDL.h>

#include <SDL/SDL_ttf.h>

#include <SDL/SDL_image.h>


typedef int bool;

#define true 1

#define false 0

bool CollisionMenu(int curseur_x,int curseur_y,SDL_Rect box , SDL_Surface *Menue)

{

   if (curseur_x >= box.x&& curseur_x < box.x + box.w&& curseur_y >= box.y&& curseur_y < box.y + box.h)
   {
        SDL_SetAlpha(Menue , SDL_SRCALPHA, 255);
   }
   else
   {
       SDL_SetAlpha(Menue , SDL_SRCALPHA, 0);
   }
   return 0;
}

bool CollisionEnnemy(int curseur_x,int curseur_y,SDL_Rect box , SDL_Surface *Ennemy, int *Y, int *Money)
{

   if (curseur_x >= box.x&& curseur_x < box.x + box.w&& curseur_y >= box.y&& curseur_y < box.y + box.h)
   {
        SDL_SetAlpha(Ennemy , SDL_SRCALPHA, 0);
        Money++;
        *Y = *Y - 200;
   }
   return 0;
}

int EnnemyMoove(SDL_Surface *FEnnemy, SDL_Rect EnnemyPod2, int YEnnemy)
{
    if(EnnemyPod2.x < 1000)
        {
            EnnemyPod2.x  = EnnemyPod2.x + 10;
            EnnemyPod2.y = YEnnemy;
        }
        else
        {
            SDL_SetAlpha(FEnnemy , SDL_SRCALPHA, 0);
            EnnemyPod2.x = -10;
            SDL_SetAlpha(FEnnemy , SDL_SRCALPHA, 255);
        }
        return 0;
}

int EndTest(int liFVe, int *Continue, SDL_Surface *screen, SDL_Surface *ArgentAff, SDL_Surface *EndAff, SDL_Rect PosFond, SDL_Rect PosMoney)
{
    SDL_Event eventinevent;
    if(liFVe < 1)
        {
            while(Continue)
            {
            SDL_WaitEvent(&eventinevent);
            switch(eventinevent.type)
            {
            case SDL_QUIT:
                *Continue = 0;
                break;
            }
            SDL_BlitSurface(EndAff , NULL, screen, &PosFond);
            SDL_BlitSurface(ArgentAff, NULL, screen, &PosMoney);
            SDL_ShowCursor(SDL_ENABLE);
            SDL_Flip(screen);
            }

        }
        return 0;
}

int Damage(int *Lifhe, int *YEnnemyS)
{
    if(YEnnemyS > 600)
    {
        *YEnnemyS = 200;
        *Lifhe--;
    }
}

Hider.h :

#ifndef Hider

#define Hider

#endif

typedef int bool;

bool CollisionMenu(int curseur_x,int curseur_y,SDL_Rect box , SDL_Surface *Menue);

bool CollisionEnnemy(int curseur_x,int curseur_y,SDL_Rect box , SDL_Surface *Ennemy, int *Y, int *Money);

int EnnemyMoove(SDL_Surface *FEnnemy, SDL_Rect EnnemyPod2, int YEnnemy);

int EndTest(int liFVe, int *Continue, SDL_Surface *screen, SDL_Surface *ArgentAff, SDL_Surface *EndAff, SDL_Rect PosFond, SDL_Rect PosMoney);

int Damage(int *Lifhe, int *YEnnemyS);






Mr de m'aider :(

-
Edité par ManaikiLaut 21 juin 2017 à 7:03:24

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2017 à 1:40:11

Salut,

J’ai pas lu le code attentivement, mais

  1. Fais des fonctions.
  2. Vérifie le retour des fonctions à risques.
  3. Utilise un débogueur.
  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
21 juin 2017 à 3:34:40

Mr mais tu m'aide pas la car y'a 4 jour avant j'avais testé le programme il marché ensuite j'ai modifié un truc mais je sais plus c'est quoi du coup il marche plus :(

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2017 à 4:08:16

En gros, ton programme ne fonctionnait sûrement pas, il « tombait en marche » par chance. Le débogueur est ce qui pourra t’aider le plus ici. Sinon un gros soucis est que tu alloues tes surfaces AffLife, Argent et NameAff à chaque tour de boucle, mais tu ne les libères qu’à la fin, il faudrait aussi les libérer à chaque tour de boucle ; pour le moment ça crée une grosse fuite de mémoire.

PS : choisis le français ou l’anglais (l’anglais de préférence), mais ne mélange pas les deux.

  • Partager sur Facebook
  • Partager sur Twitter
Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
21 juin 2017 à 4:20:01

Ok je veut bien mais sa change pas le return 3. :\

ps je parle anglais francais car je sais pas quelle nom donné a mes variable et mes fonction

-
Edité par ManaikiLaut 21 juin 2017 à 4:24:59

  • Partager sur Facebook
  • Partager sur Twitter