Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/05/2008, à 16:10

madmax02

Probleme d'execution(language c)

Bonjour a tous,
Je suis nouveau dans le monde de linux et je souhaiterai avoir quelque renseignements.
Je programmer avant sous vista avec code block,j'ai donc installer code block pour linux.Lors de la compilation aucun probleme,le jeu se lance mais je doit appuyer sur 1 pour demarrer mais quoi que je fasse sa ne demarre pas.
Merci pour votre aide et vos reponse.
Coordialement Madmax02

Hors ligne

#2 Le 08/05/2008, à 16:52

geenux

Re : Probleme d'execution(language c)

J'ai pas trop compris le problème...

mais je doit appuyer sur 1 pour demarrer mais quoi que je fasse sa ne demarre pas.

Ça doit être un problème dans ton code. Si tu veut de l'aide, il faudra que tu le poste.

Hors ligne

#3 Le 08/05/2008, à 17:39

madmax02

Re : Probleme d'execution(language c)

je poste juste la ou je suppose que sa pose probleme.

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

#include "constantes.h"
#include "editeur.h"
#include "jeu.h"



int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL, *menu = NULL;
    SDL_Rect positionMenu;
    SDL_Event event;

    int continuer = 1;

    SDL_Init(SDL_INIT_VIDEO);

    SDL_WM_SetIcon(IMG_Load("data//images//mario.jpg"), NULL); // L'icône doit être chargée avant SDL_SetVideoMode
    ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Super Mario,By Madmax", NULL);

    menu = IMG_Load("data//images//menu//menu.jpg");
    positionMenu.x = 0;
    positionMenu.y = 0;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE: // Veut arrêter le jeu
                        continuer = 0;
                        break;
                    case SDLK_1://commence a jouer
                        jouer(ecran);
                        break;
                    case SDLK_2: // Demande l'éditeur de niveaux
                        editeur(ecran);
                        break;
                default:
                break;
                }
                break;
        }

        // Effacement de l'écran
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
        SDL_Flip(ecran);
    }

    SDL_FreeSurface(menu);
    SDL_Quit();

    return EXIT_SUCCESS;
}

Pourtant sous windows je n'avez aucun probleme

Hors ligne

#4 Le 08/05/2008, à 21:29

nicolas.sitbon

Re : Probleme d'execution(language c)

Pourquoi doubles tu les slashs dans les chemins de tes ressources ?
Autrement, ce code ne compile pas!

Hors ligne

#5 Le 09/05/2008, à 12:19

madmax02

Re : Probleme d'execution(language c)

je double le slashs car ce code a été fait sous windows mais la pourtant la compilation se fait et image se charge bien donc  sa doit venir d'autre chose

Hors ligne

#6 Le 09/05/2008, à 13:19

nicolas.sitbon

Re : Probleme d'execution(language c)

pourquoi, il y a une règle qui dit que sous windows il faut doubler les slashs dans les chemins?
dans tous les cas, ce code ne compile pas!!!

Hors ligne

#7 Le 09/05/2008, à 15:56

geenux

Re : Probleme d'execution(language c)

Sous windows tu n'as pas besoin de doubler les slash... Par contre les antislash doivent être doublé car il s'agit d'un caractère d'échappement, donc pour qu'il soit pris en compte il faut l'échapper ( \\ ).

Hors ligne

#8 Le 09/05/2008, à 16:12

madmax02

Re : Probleme d'execution(language c)

Je vous donne le code source complet c'est surment pour sa que vous pouvez pas compiler
http://membres.lycos.fr/m4dm4x02/mario/

Hors ligne

#9 Le 09/05/2008, à 16:47

NicoA380

Re : Probleme d'execution(language c)

J'ai pas code block, mais j'ai compilé ainsi :
~/Mario-SDL/sources$ cc *.c -o ../mario -lSDL -lSDL_image -lSDL_ttf

et je lance ainsi :
~/Mario-SDL$ ./mario

J'ai une fenetre noire qui s'ouvre avec "Super Mario version 0.1 alpha" "Joueur 1" "by Madmax", mais j'arrive pas à aller plus loin.

Hors ligne

#10 Le 09/05/2008, à 17:02

madmax02

Re : Probleme d'execution(language c)

Jai exactement le meme probleme arriver ici en apuyant sur 1 le jeut devrai se lancer enfin le debut de jeux mais impossible donc peut etre que sous linux il y a un petit truc a changer

Hors ligne

#11 Le 09/05/2008, à 17:07

NicoA380

Re : Probleme d'execution(language c)

Il va falloir débuguer wink

Sinon j'ai appelé la fonction "jouer(ecran);" avant le switch et ça plante direct (segfault). Ça vient peut-être du 64 bit et de pointeur pas forcement en void* tongue (pas vérifié)

Hors ligne

#12 Le 09/05/2008, à 18:46

nicolas.sitbon

Re : Probleme d'execution(language c)

void editeur(SDL_Surface* ecran)

{

    SDL_Surface *sol = NULL, *block = NULL, *blockB = NULL, *hhh = NULL, *piece = NULL, *mario = NULL;

    SDL_Rect position, posMap, positionSurMap, positionO;

    SDL_Event event;

positionSurMap est utilisé sans être initialisé, (cf la suite du code), du coup, tout peut arriver!

Dernière modification par nicolas.sitbon (Le 09/05/2008, à 19:30)

Hors ligne

#13 Le 09/05/2008, à 19:58

madmax02

Re : Probleme d'execution(language c)

meme en initialisant positionSurMap a 0 se ne marche toujours pas.

Hors ligne

#14 Le 09/05/2008, à 20:29

nicolas.sitbon

Re : Probleme d'execution(language c)

initialiser une structure à 0 ne veut pas dire grand chose!
montre le code!

Hors ligne

#15 Le 09/05/2008, à 20:32

madmax02

Re : Probleme d'execution(language c)

void editeur(SDL_Surface* ecran)
{
    SDL_Surface *sol = NULL, *block = NULL, *blockB = NULL, *hhh = NULL, *piece = NULL, *mario = NULL;
    SDL_Rect position, posMap, positionSurMap, positionO;
    SDL_Event event;

    int continuer = 1, clicGaucheEnCours = 0, clicDroitEnCours = 0;
    int objetActuel = SOL, i = 0, j = 0;
    int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
    SDL_Rect cam = { 0, 0, 800, 600 };


    // Chargement des objets et du niveau
    hhh = IMG_Load("data//images//others//hhh.JPG");
    sol = IMG_Load("data//images//textures//herbe.BMP");
    block = IMG_Load("data//images//textures//Bricks.GIF");
    piece = IMG_Load("data//images//textures//piece.png");
    blockB = IMG_Load("data//images//textures//bonus2-1.png");
    mario = IMG_Load("data//images//jeu//mario_droite.gif");
    positionSurMap.x=0;



    if (!chargerNiveau(carte))
        exit(EXIT_FAILURE);

    SDL_EnableKeyRepeat(100, 100);

    // Boucle infinie de l'éditeur
    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_MOUSEBUTTONDOWN:
                if (event.button.button == SDL_BUTTON_LEFT)
                {
                    event.button.x = event.button.x + cam.x;
                    // On met l'objet actuellement choisi (mur, caisse...) à l'endroit du clic
                    carte[event.button.x / TAILLE_BLOC][event.button.y / TAILLE_BLOC] = objetActuel;
                    clicGaucheEnCours = 1; // On active un booléen pour retenir qu'un bouton est enfoncé
                }
                else if (event.button.button == SDL_BUTTON_RIGHT) // Le clic droit sert à effacer
                {
                    event.button.x = event.button.x + cam.x;
                    carte[event.button.x / TAILLE_BLOC][event.button.y /TAILLE_BLOC] = VIDE;
                    clicDroitEnCours = 1;
                }
                break;
            case SDL_MOUSEBUTTONUP: // On désactive le booléen qui disait qu'un bouton était enfoncé
                if (event.button.button == SDL_BUTTON_LEFT)
                    clicGaucheEnCours = 0;
                else if (event.button.button == SDL_BUTTON_RIGHT)
                    clicDroitEnCours = 0;
                break;
            case SDL_MOUSEMOTION:
                if (clicGaucheEnCours) // Si on déplace la souris et que le bouton gauche de la souris est enfoncé
                {
                    event.motion.x = event.motion.x + cam.x;
                    carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = objetActuel;
                }
                else if (clicDroitEnCours) // Pareil pour le bouton droit de la souris
                {
                    event.motion.x = event.motion.x - cam.x;
                    carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = VIDE;
                }
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        continuer = 0;
                        break;
                    case SDLK_RIGHT:
                        positionSurMap.x++;
                        break;
                    case SDLK_LEFT:
                        positionSurMap.x--;
                        break;
                    case SDLK_s:
                        sauvegarderNiveau(carte);
                        break;
                    case SDLK_c:
                        chargerNiveau(carte);
                        break;
                    case SDLK_1:
                        objetActuel = SOL;
                        break;
                    case SDLK_2:
                        objetActuel = BLOCK;
                        break;
                    case SDLK_3:
                        objetActuel = BLOCKB;
                        break;
                    case SDLK_4:
                        objetActuel = MARIO;
                        break;
                    case SDLK_5:
                        objetActuel = PIECE;
                        break;
                    default:
                    break;
                }
                break;
        }

cam.x = positionSurMap.x * TAILLE_BLOC - 800 / 2 ;
    if(cam.x < 0) cam.x = 0;
if(cam.x + cam.w > TAILLE_BLOC * NB_BLOCS_LARGEUR)
cam.x = TAILLE_BLOC * NB_BLOCS_LARGEUR - cam.x;

        // Effacement de l'écran
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        posMap.x = positionSurMap.x - cam.x;
        posMap.y = positionSurMap.y;
        SDL_BlitSurface(hhh, NULL, ecran, &posMap);

        // Placement des objets à l'écran
        for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
        {
            for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
            {
                position.x = i * TAILLE_BLOC;
                position.y = j * TAILLE_BLOC;
                positionO.x = position.x - cam.x;
                positionO.y = position.y;

                switch(carte[i][j])
                {
                    case SOL:
                        SDL_BlitSurface(sol, NULL, ecran, &positionO);
                        break;
                    case BLOCK:
                        SDL_BlitSurface(block, NULL, ecran, &positionO);
                        break;
                    case BLOCKB:
                        SDL_BlitSurface(blockB, NULL, ecran, &positionO);
                        break;
                    case MARIO:
                        SDL_BlitSurface(mario, NULL, ecran, &positionO);
                        break;
                    case PIECE:
                        SDL_BlitSurface(piece, NULL, ecran, &positionO);
                        break;

                }
            }
        }

        // Mise à jour de l'écran
        SDL_Flip(ecran);
    }
    SDL_EnableKeyRepeat(0, 0);
    SDL_FreeSurface(sol);
    SDL_FreeSurface(block);
    SDL_FreeSurface(piece);
    SDL_FreeSurface(blockB);
    SDL_FreeSurface(hhh);
    SDL_FreeSurface(mario);
}

Hors ligne

#16 Le 09/05/2008, à 20:41

nicolas.sitbon

Re : Probleme d'execution(language c)

c'est bien ce que je pensais :

posMap.y = positionSurMap.y;

pas initialisé!!!

Hors ligne

#17 Le 09/05/2008, à 21:24

madmax02

Re : Probleme d'execution(language c)

maintenant il me marque accolade manquante autour de linitialisation ligne 19(editeur.c)

int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};

C'est vraiment compliquer sous linux

Hors ligne

#18 Le 09/05/2008, à 21:26

nicolas.sitbon

Re : Probleme d'execution(language c)

ça n'as rien à voir avec linux!

int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = { {0} };

Hors ligne

#19 Le 09/05/2008, à 22:02

madmax02

Re : Probleme d'execution(language c)

toujours bloquer au demarrage:(

Hors ligne

#20 Le 09/05/2008, à 22:12

nicolas.sitbon

Re : Probleme d'execution(language c)

postes le code corrigé!

Hors ligne

#21 Le 09/05/2008, à 22:17

madmax02

Re : Probleme d'execution(language c)

C'est quand meme etrange d'avoir autant de probleme porter un code sous linux

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

#include "constantes.h"
#include "editeur.h"
#include "fichiers.h"

void editeur(SDL_Surface* ecran)
{
    SDL_Surface *sol = NULL, *block = NULL, *blockB = NULL, *hhh = NULL, *piece = NULL, *mario = NULL;
    SDL_Rect position, posMap, positionSurMap, positionO;
    SDL_Event event;

    int continuer = 1, clicGaucheEnCours = 0, clicDroitEnCours = 0;
    int objetActuel = SOL, i = 0, j = 0;
    int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {{0}};
    SDL_Rect cam = { 0, 0, 800, 600 };


    // Chargement des objets et du niveau
    hhh = IMG_Load("data//images//others//hhh.JPG");
    sol = IMG_Load("data//images//textures//herbe.BMP");
    block = IMG_Load("data//images//textures//Bricks.GIF");
    piece = IMG_Load("data//images//textures//piece.png");
    blockB = IMG_Load("data//images//textures//bonus2-1.png");
    mario = IMG_Load("data//images//jeu//mario_droite.gif");
    positionSurMap.x=0;
    positionSurMap.y=0;



    if (!chargerNiveau(carte))
        exit(EXIT_FAILURE);

    SDL_EnableKeyRepeat(100, 100);

    // Boucle infinie de l'éditeur
    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_MOUSEBUTTONDOWN:
                if (event.button.button == SDL_BUTTON_LEFT)
                {
                    event.button.x = event.button.x + cam.x;
                    // On met l'objet actuellement choisi (mur, caisse...) à l'endroit du clic
                    carte[event.button.x / TAILLE_BLOC][event.button.y / TAILLE_BLOC] = objetActuel;
                    clicGaucheEnCours = 1; // On active un booléen pour retenir qu'un bouton est enfoncé
                }
                else if (event.button.button == SDL_BUTTON_RIGHT) // Le clic droit sert à effacer
                {
                    event.button.x = event.button.x + cam.x;
                    carte[event.button.x / TAILLE_BLOC][event.button.y /TAILLE_BLOC] = VIDE;
                    clicDroitEnCours = 1;
                }
                break;
            case SDL_MOUSEBUTTONUP: // On désactive le booléen qui disait qu'un bouton était enfoncé
                if (event.button.button == SDL_BUTTON_LEFT)
                    clicGaucheEnCours = 0;
                else if (event.button.button == SDL_BUTTON_RIGHT)
                    clicDroitEnCours = 0;
                break;
            case SDL_MOUSEMOTION:
                if (clicGaucheEnCours) // Si on déplace la souris et que le bouton gauche de la souris est enfoncé
                {
                    event.motion.x = event.motion.x + cam.x;
                    carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = objetActuel;
                }
                else if (clicDroitEnCours) // Pareil pour le bouton droit de la souris
                {
                    event.motion.x = event.motion.x - cam.x;
                    carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = VIDE;
                }
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        continuer = 0;
                        break;
                    case SDLK_RIGHT:
                        positionSurMap.x++;
                        break;
                    case SDLK_LEFT:
                        positionSurMap.x--;
                        break;
                    case SDLK_s:
                        sauvegarderNiveau(carte);
                        break;
                    case SDLK_c:
                        chargerNiveau(carte);
                        break;
                    case SDLK_1:
                        objetActuel = SOL;
                        break;
                    case SDLK_2:
                        objetActuel = BLOCK;
                        break;
                    case SDLK_3:
                        objetActuel = BLOCKB;
                        break;
                    case SDLK_4:
                        objetActuel = MARIO;
                        break;
                    case SDLK_5:
                        objetActuel = PIECE;
                        break;
                    default:
                    break;
                }
                break;
        }

cam.x = positionSurMap.x * TAILLE_BLOC - 800 / 2 ;
    if(cam.x < 0) cam.x = 0;
if(cam.x + cam.w > TAILLE_BLOC * NB_BLOCS_LARGEUR)
cam.x = TAILLE_BLOC * NB_BLOCS_LARGEUR - cam.x;

        // Effacement de l'écran
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        posMap.x = positionSurMap.x - cam.x;
        posMap.y = positionSurMap.y;
        SDL_BlitSurface(hhh, NULL, ecran, &posMap);

        // Placement des objets à l'écran
        for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
        {
            for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
            {
                position.x = i * TAILLE_BLOC;
                position.y = j * TAILLE_BLOC;
                positionO.x = position.x - cam.x;
                positionO.y = position.y;

                switch(carte[i][j])
                {
                    case SOL:
                        SDL_BlitSurface(sol, NULL, ecran, &positionO);
                        break;
                    case BLOCK:
                        SDL_BlitSurface(block, NULL, ecran, &positionO);
                        break;
                    case BLOCKB:
                        SDL_BlitSurface(blockB, NULL, ecran, &positionO);
                        break;
                    case MARIO:
                        SDL_BlitSurface(mario, NULL, ecran, &positionO);
                        break;
                    case PIECE:
                        SDL_BlitSurface(piece, NULL, ecran, &positionO);
                        break;

                }
            }
        }

        // Mise à jour de l'écran
        SDL_Flip(ecran);
    }
    SDL_EnableKeyRepeat(0, 0);
    SDL_FreeSurface(sol);
    SDL_FreeSurface(block);
    SDL_FreeSurface(piece);
    SDL_FreeSurface(blockB);
    SDL_FreeSurface(hhh);
    SDL_FreeSurface(mario);
}

Hors ligne

#22 Le 09/05/2008, à 22:18

mateo89

Re : Probleme d'execution(language c)

salut
tu peux me dire comment ta fait pour installer code block .


Les sales Blagues de l'echo.

Hors ligne

#23 Le 09/05/2008, à 22:22

nicolas.sitbon

Re : Probleme d'execution(language c)

jeu.c: In function «jouer":
jeu.c:70: erreur: implicit declaration of function «chargerNiveau"
jeu.c:70: attention : nested extern declaration of «chargerNiveau"

Hors ligne

#24 Le 09/05/2008, à 22:22

madmax02

Re : Probleme d'execution(language c)

il suffi de telecharger larchive sur le site officiel et ensuite installer les fichier .deb en commencent par libcodeblocks0_8.02-0ubuntu1_i386.deb

Hors ligne

#25 Le 09/05/2008, à 22:28

madmax02

Re : Probleme d'execution(language c)

lerreur a disparu en incluant fichier.h mais toujours le meme probleme dailleur je comprend pas pourquoi CB me donne les erreurs au fur et a mesure

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

#include "constantes.h"
#include "jeu.h"
[b]#include "fichiers.h"[/b]
#define SPEED 1.5f
#define HSPEED 0.2f
#define GRAVITY 0.002f

void jouer(SDL_Surface* ecran)
{
    SDL_Surface *marioB = NULL, *marioG = NULL, *marioH = NULL, *piece = NULL, *marioD = NULL, *fond = NULL; // 4 surfaces pour chacune des directions de mario
    SDL_Surface *sol = NULL, *block = NULL, *blockB = NULL, *mario = NULL, * texte = NULL, *blockV = NULL, * vies = NULL, *score = NULL;
    SDL_Rect position, positionJoueur, positionFond, positionSurEcran, positionO, positionTexte, positionMario;
    SDL_Rect positionVie, positionScore;
    SDL_Event event;
    TTF_Font *police = NULL;
    SDL_Color couleurNoire = {0, 0, 0};
    char Nbpieces[20] = "";
    char Nbvies[20] = "";
    char Score[20] = "";
    Uint32 last_time,current_time,ellapsed_time;
    float vy;
    int en_l_air = 0;
    int jumping = 0;

    int continuer = 1, i = 0, j = 0;
    int nbpieces = 0;
    int nbvies = 3;
    int Scores = 0;
    long touche[50]={0};
    int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {{0}};
    SDL_Rect cam = { 0, 0, 800, 600 };
    TTF_Init();

    fond=IMG_Load("data//images//backgrounds//1.GIF");
    positionFond.x = (ecran->w - fond->w) / 2;
    positionFond.y = (ecran->h - fond->h) / 2;

    // Chargement des sprites (décors, personnage...)
    sol = IMG_Load("data//images//textures//herbe.BMP");
    block = IMG_Load("data//images//textures//Bricks.GIF");
    blockV = IMG_Load("data//images//textures//blockV.GIF");
    piece = IMG_Load("data//images//textures//piece.png");
    blockB = IMG_Load("data//images//textures//bonus2-1.png");
    marioB = IMG_Load("data//images//player//mario_bas.gif");
    marioG = IMG_Load("data//images//player//mario_gauche.gif");
    marioH = IMG_Load("data//images//player//mario_haut.gif");
    marioD = IMG_Load("data//images//player//mario_droite.gif");
    mario = marioD; // Mario sera dirigé vers la droite au départ
        vy = 0;


        /* Chargement de la police */
    police = TTF_OpenFont("data//blood.ttf", 20);

    /* Initialisation du temps et du texte */
    sprintf(Nbpieces, "Pieces : %d", nbpieces);
    texte = TTF_RenderText_Solid(police, Nbpieces, couleurNoire);
    sprintf(Nbvies, "Vies : %d", nbvies);
    vies = TTF_RenderText_Solid(police, Nbvies, couleurNoire);
    sprintf(Score, "%d", Scores);
    score = TTF_RenderText_Solid(police, Score, couleurNoire);


        // Chargement du niveau
    if (!chargerNiveau(carte))
        exit(EXIT_FAILURE); // On arrête le jeu si on n'a pas pu charger le niveau

// Recherche de la position de Mario au départ
for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
{
    for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
    {
        if (carte[j][i] == MARIO) // Si Mario se trouve à cette position sur la carte
        {
            positionJoueur.x = j;
            positionJoueur.y = i;
            carte[i][j] = VIDE;
        }
    }
}
positionJoueur.x = positionJoueur.x * TAILLE_BLOC;
positionJoueur.y = positionJoueur.y * TAILLE_BLOC;
positionMario.x = positionJoueur.x / TAILLE_BLOC;
positionMario.y = positionJoueur.y / TAILLE_BLOC;
    last_time = SDL_GetTicks();

    while (continuer)
    {
               SDL_PollEvent(&event);
        switch(event.type)
        {

                case SDL_KEYDOWN:
                        touche[event.key.keysym.sym]=1;
                break;


                case SDL_KEYUP:
                        touche[event.key.keysym.sym]=0;
                break;
                    }

            if(touche[SDLK_ESCAPE]==1)
                continuer = 0;

            if((touche[SDLK_UP]==1)&&(jumping == 0)&&(en_l_air < 2)&& ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y +2) / TAILLE_BLOC)] != BLOCK)&&
            ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y +2) / TAILLE_BLOC)] != BLOCKV))
             {
                mario = marioH;
                jumping = 1;
                        en_l_air++;
                        vy = -SPEED;
                //positionJoueur.y-=2;
    }
            if(touche[SDLK_UP]==0)
            jumping = 0;
            if((touche[SDLK_DOWN]==1)&& ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y+32) / TAILLE_BLOC)] != SOL)&&
             ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y +32) / TAILLE_BLOC)] != BLOCK)&&
             ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y +32) / TAILLE_BLOC)] != BLOCKB)&&
             ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y +32) / TAILLE_BLOC)] != BLOCKV))
              {
                mario = marioB;
                positionJoueur.y+=2;
    }
            if((touche[SDLK_RIGHT]==1)&& ( carte[((positionJoueur.x+25) / TAILLE_BLOC)][((positionJoueur.y +16) / TAILLE_BLOC)] != BLOCK)&&
            ( carte[((positionJoueur.x+25) / TAILLE_BLOC)][((positionJoueur.y +16) / TAILLE_BLOC)] != BLOCKB)&&
            ( carte[((positionJoueur.x+25) / TAILLE_BLOC)][((positionJoueur.y +16) / TAILLE_BLOC)] != BLOCKV))
                {
                mario = marioD;
                positionJoueur.x+=2;
    }
            if((touche[SDLK_LEFT]==1)&& ( carte[((positionJoueur.x) / TAILLE_BLOC)][((positionJoueur.y +16) / TAILLE_BLOC)] != BLOCK)&&
            ( carte[((positionJoueur.x) / TAILLE_BLOC)][((positionJoueur.y +16) / TAILLE_BLOC)] != BLOCKB)&&
            ( carte[((positionJoueur.x) / TAILLE_BLOC)][((positionJoueur.y +16) / TAILLE_BLOC)] != BLOCKV))
             {
                mario = marioG;
                positionJoueur.x-=2;
             }

        current_time = SDL_GetTicks();
        ellapsed_time = current_time - last_time;
        last_time = current_time;
        if ((en_l_air)&&( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y+32) / TAILLE_BLOC)] != BLOCKB)&&
        ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y+32) / TAILLE_BLOC)] != BLOCK)&&
        ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y+32) / TAILLE_BLOC)] != BLOCKV)&&
        ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y-2) / TAILLE_BLOC)] != SOL))
        {
            vy += GRAVITY*ellapsed_time;

            if (vy > SPEED)
                vy = SPEED;

            positionJoueur.y += vy*ellapsed_time;

            if (positionJoueur.y > (600-32))
            {
                positionJoueur.y = 600-32;
                if (jumping)
                {
                    vy = -SPEED;
                    en_l_air = 1;
                }
                else
                    en_l_air = 0;
            }
        }



if ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y+16) / TAILLE_BLOC)] == PIECE)
   {
       nbpieces++;
       Scores+=100;
       sprintf(Nbpieces, "Pieces : %d", nbpieces);
       SDL_FreeSurface(texte); /* On supprime la surface précédente de la mémoire avant d'en charger une nouvelle (IMPORTANT) */
        texte = TTF_RenderText_Solid(police, Nbpieces, couleurNoire);
         sprintf(Score, "%d", Scores);
        SDL_FreeSurface(score);
    score = TTF_RenderText_Solid(police, Score, couleurNoire);
   carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y+16) / TAILLE_BLOC)] = VIDE;

   }
if (nbpieces == 100)
{
        nbpieces = 0;
        nbvies++;
        sprintf(Nbvies, " Vies : %d", nbvies);
        SDL_FreeSurface(vies);
        vies = TTF_RenderText_Solid(police, Nbvies, couleurNoire);
}


if ( carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y +16) / TAILLE_BLOC)-1] == BLOCKB)
    {
        carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y +16) / TAILLE_BLOC)-2] = PIECE;
    }
if (carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y+16) / TAILLE_BLOC)] == BLOCKB)
    {
        carte[((positionJoueur.x+16) / TAILLE_BLOC)][((positionJoueur.y+16) / TAILLE_BLOC)] = BLOCKV;
    }


    cam.x = positionJoueur.x - 800 / 2 ;
    if(cam.x < 0) cam.x = 0;
if(cam.x + cam.w > TAILLE_BLOC * NB_BLOCS_LARGEUR)
cam.x = TAILLE_BLOC * NB_BLOCS_LARGEUR - cam.x;
        // Effacement de l'écran
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
    position.x = positionJoueur.x;
    position.y = positionJoueur.y;
      positionSurEcran.x = position.x - cam.x;
      positionSurEcran.y = position.y;
      SDL_BlitSurface(mario, NULL, ecran, &positionSurEcran);
        positionTexte.x = 500;
        positionTexte.y = 25;
        SDL_BlitSurface(texte, NULL, ecran, &positionTexte); /* Blit du texte contenant le nb de pieces */
        positionVie.x = 400;
        positionVie.y = 25;
        SDL_BlitSurface(vies, NULL, ecran, &positionVie);
        positionScore.x = 300;
        positionScore.y = 25;
        SDL_BlitSurface(score, NULL, ecran, &positionScore);

        // Placement des objets à l'écran

        for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
        {
            for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
            {
                position.x = i * TAILLE_BLOC;
                position.y = j * TAILLE_BLOC;
                positionO.x = position.x - cam.x;
                positionO.y = position.y;


                switch(carte[i][j])
                {
                    case SOL:
                        SDL_BlitSurface(sol, NULL, ecran, &positionO);
                        break;
                    case BLOCK:
                        SDL_BlitSurface(block, NULL, ecran, &positionO);
                        break;
                    case BLOCKB:
                        SDL_BlitSurface(blockB, NULL, ecran, &positionO);
                        break;
                    case PIECE:
                        SDL_BlitSurface(piece, NULL, ecran, &positionO);
                        break;
                    case BLOCKV:
                        SDL_BlitSurface(blockV, NULL, ecran, & positionO);
                        break;
                    case VIDE:
                        break;
                }
            }
        }




        SDL_Flip(ecran);
    }



    // Libération des surfaces chargées
    TTF_CloseFont(police);
    TTF_Quit();
    SDL_FreeSurface(sol);
    SDL_FreeSurface(block);
    SDL_FreeSurface(piece);
    SDL_FreeSurface(fond);
    SDL_FreeSrface(blockB);
        SDL_FreeSurface(mario);
}]

Dernière modification par madmax02 (Le 09/05/2008, à 22:29)

Hors ligne