Jeu motus: affichage du mot tapé

janyoura Messages postés 11 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2012 - 9 avril 2012 à 22:07
janyoura Messages postés 11 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2012 - 10 avril 2012 à 22:02
J'ai besoin de faire l'affichage du mot tapé par l'utilisateur dans les cases correspondantes, chaque lettre dans une case de la matrice. j'ai pris exemple du code mis à notre disposition dans le site, "motus avec SDL" mais je n'ai pas compris cette fonction, pourquoi séparer les mots 'a'+14 des mot > 'a' + 14 ?
// on n'affiche pas les espaces
if ( caract == (' ') )
return;


if ( caract == ('a'+i) )
{
if (i<15) //de 'a' à 'a'+14 on affichee les lettres à partir de
//x=32+i*32 et y=128 dans le fichier pointé par couleur
{
Slock(screen);
DrawIMG(couleur,x*32,y*32,32,32,32+i*32,128);
SDL_Flip(screen);
Sulock(screen);
test=1;
}
else //au dela de 'a'+14 on affichee les lettres à partir de
//x=0 et y=160 dans le fichier pointé par couleur
{
Slock(screen);
DrawIMG(couleur,x*32,y*32,32,32,(i-15)*32,160);
SDL_Flip(screen);
Sulock(screen);
test=1;
}

}
i++;
}
}/code

3 réponses

janyoura Messages postés 11 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2012
9 avril 2012 à 22:08
/*****************************************************************************/
/*****Permet d'afficher un caractere en fonction de x et y vec une couleur****/
/*****************************************************************************/
void affiche_caract (char caract,int x,int y,SDL_Surface *couleur)
{
int i=0,test=0;
while ( test==0 )
{
  // on n'affiche pas les espaces
  if (  caract == (' ') )
        return;


    if (  caract == ('a'+i) )
        {
        if (i<15)  //de 'a' à 'a'+14 on affichee les lettres à partir de
                   //x=32+i*32 et y=128 dans le fichier pointé par couleur
                        {
                        Slock(screen);
                        DrawIMG(couleur,x*32,y*32,32,32,32+i*32,128);
                        SDL_Flip(screen);
                        Sulock(screen);
                        test=1;
                        }
        else       //au dela de 'a'+14 on affichee les lettres à partir de
                   //x=0 et y=160 dans le fichier pointé par couleur
                        {
                        Slock(screen);
                        DrawIMG(couleur,x*32,y*32,32,32,(i-15)*32,160);
                        SDL_Flip(screen);
                        Sulock(screen);
                        test=1;
                        }

        }
    i++;
}
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 avril 2012 à 12:14
Bonjour.

Si tu regardes le fichier d'image utilisé:
http://files.codes-sources.com/fichier.aspx?id=21953&f=bleu.bmp

Tu verras que les 14 premières lettres sont placées sur une ligne, et les 12 autres sur la ligne suivantes. Tout simplement :)
La fonction est tout à fait correcte, bien que peu élégante. N'oublie pas que ce qui est posté sur codes-sources, ce sont souvent des codes de débutants, dont la qualité peut sensiblement varier...

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
janyoura Messages postés 11 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2012
10 avril 2012 à 22:02
#include <stdio.h>
#include <stdlib.h>
#include <SDL/sdl.h>

int main ( int argc, char** argv )
{

   SDL_Surface* screen = NULL;
   SDL_Surface *img= NULL;
   SDL_Event event;
   SDL_Rect dest;
   int continuer=1;

    // create a new window
    SDL_Init(SDL_INIT_VIDEO);

    screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF);

    while(continuer)
 {

        SDL_WaitEvent(&event);

               switch(event.type)
                        {
                            case SDL_KEYDOWN:
                                 switch(event.key.keysym.unicode)
                                 {
                                     case SDLK_a:
                                     dest.x=100;
                                     dest.y=100;
                                 img = SDL_LoadBMP("A.bmp");
                                 SDL_BlitSurface(img, NULL, screen, &dest);
                                 SDL_Flip(screen);
                                 
                                 break;


                                 }
                        }

 }



    return 0;
}

Je veux que lorsque l'utilisateur tape sur le caractère 'a' l'image correspondante (case dans laquelle est écris 'A') se charge et s'affiche dans l'écran. le problème c'est que le code ne fonctionne pas et je ne sais pas pourquoi. merci de m'aider. je travail sur C/SDL
0
Rejoignez-nous