Affichage jeu mémory en sdl!!!

snakers07 Messages postés 15 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 24 octobre 2009 - 30 déc. 2008 à 15:31
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011 - 31 déc. 2008 à 13:34
bonjour, on m'a conseillé de mettre un nouveau post pour avoir de l'aide!!!
 voila mon probleme,
je viens de programmer le jeu du mémory, mais en langage c, donc l'affichage se fait sur la console de windows, maintenant j'aurai voulu y apporter quelques améliorations... c'est a dire de creer un nouvelle affichage pour rendre le jeu plus attrayant, pour cela je veux utiliser la SDL, j'ai déja creer mon fond de départ, avec une grille de 6X6 de cartes retournées, aisnsi que la gestion du curseur par le clavier, mais aprés je bloque, je ne sais pas comment faire le lien entre le programme en langage c qui représente le jeu, et  la  sdl qui repérsente l'aficchage? quelquun pourrait-il m'aider? merci d'avance pour vos réponse!!! je post mes codes

/*code affichage par la SDL!!!!!*/

/* declaration des bibliothéques*/

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

/* declaration des variables*/

SDL_Rect dest;
SDL_Surface *ecran;
SDL_Surface *fond;
SDL_Surface *curseur;
SDL_Rect positioncurseur;
SDL_Event event;
int continuer = 1;
int x,y;

/* ddebut prog*/


/* affichage grille*/

void affichage_cartes_dos()
{
for(y=0;y<6;y++){
for(x=0;x<6;x++){
       dest.x=152*x;
       dest.y=112*y;
         SDL_BlitSurface(fond,NULL,ecran,&dest);
                    }
               }    
SDL_UpdateRect(ecran,0,0,0,0);
}


/* initialisation SDL*/
void initSDL()
{
///////////////////intialisation//////////////////////

if (SDL_Init(SDL_INIT_VIDEO)<0)
{

printf("erreur initiallisation SDL: %s",SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
ecran = SDL_SetVideoMode (900,800,24,SDL_SWSURFACE |SDL_DOUBLEBUF);
if (ecran==NULL)
{
printf("erreur initiallisation ecran: %s",SDL_GetError());
exit(2);
}
}

/* chargement images*/

void chargementimages()
{
fond=SDL_LoadBMP("carte_dos.bmp");
curseur=SDL_LoadBMP("curseur.bmp");
}
/* gestion deplacement curseur*/

int curseurdep()
{

 int i,j;

  
positioncurseur.x = 112;
positioncurseur.y = 72;

SDL_SetColorKey(curseur, SDL_SRCCOLORKEY, SDL_MapRGB(curseur->format, 0, 0, 0));
/* Transparence Alpha moyenne (128) : */
SDL_SetAlpha(curseur, SDL_SRCALPHA, 255);
 while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_UP: // Flèche haut
                        positioncurseur.y=positioncurseur.y-112;
                        break;
                    case SDLK_DOWN: // Flèche bas
                        positioncurseur.y=positioncurseur.y+112;
                        break;
                    case SDLK_RIGHT: // Flèche droite
                        positioncurseur.x=positioncurseur.x+152;
                        break;
                    case SDLK_LEFT: // Flèche gauche
                        positioncurseur.x=positioncurseur.x-152;
                        break;
                 case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
                 continuer = 0;
                 break; 
                }
        }

       if (positioncurseur.x==0)
       {
             positioncurseur.x=872;
       }

        if (positioncurseur.x>=880)
       {
             positioncurseur.x=112;
       }
         if (positioncurseur.y==0)
       {
             positioncurseur.y=632;
       }
         if (positioncurseur.y>=672)
       {
                  positioncurseur.y=72;
       }
  
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        affichage_cartes_dos();
       SDL_BlitSurface(curseur, NULL, ecran, &positioncurseur);
       SDL_Flip(ecran);
        SDL_UpdateRect(ecran,0,0,0,0);

    }
   return (positioncurseur.x,positioncurseur.y);
}

/* là normalement j'aurai du implanter une fonction qui représenterai le fonctionnement du jeu, que j'ai fait grâce à mon programe en langage C, mai je ne vois pas comment faire!!! d'ou mon post :) */

int main(int argc, char *argv[])

    initSDL();
    chargementimages();
    curseurdep();
    return 0;
}

1 réponse

cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
31 déc. 2008 à 13:34
Si j'ai bien compris il n'y aucune erreur dans ton programme ...
Tout d'abord je te conseille vivement de lire le tutorial du SDZ (de M@teo) ici :
http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html#part_14186
Il est tres complet et tres facile a comprendre.

Mais si j'ai bien compris ton probleme tu veux savoir ou mettre ton code C dans tous ce code SDL : tu dois le mettre dasn ta boucle d'attente (celle qui commence par while(continuer).
Cette boucle scrupte les evenements, comme tu le sais surement, comme appui d'une touche etc etc ...
Imaginons que lorsque tu appui sur entrée tu montre une carte, tu la garde en mémoire, puis une deuxieme fois alors a la deuxieme fois tu lance le programme qui va vérifier les deux cartes. C'est a l'evenement "appui sur la touche entree" que tu met ce programme.

J'ai l'empression de m'embrouiller ^^', j'espere t'avoir aider.
0
Rejoignez-nous