#1 Le 28/11/2008, à 01:00
- gregoire0
comment gérer plusieurs touches avec la sdl
Salut,
Je suis entrun de coder une futur fonction pour écrire des formulaires avec la sdl en langage c mon probleme est le suivant:
-comment utiliser des combinaisons de touche avec la touche cadena activé
-comment faire la même chose mais quant le shift est apuyé .
.
Ne faite pas attention au faute je suis dyslexique.
«Il était une fois un enfant de trois ans qui n’arrivait pas à apprendre à parler. À huit ans, il ne pouvait toujours pas lire. Ses enseignants pensaient qu’il était déficient. Il ne l’était pas. Albert Einstein avait des troubles d’apprentissage.»
Hors ligne
#2 Le 29/11/2008, à 09:19
- geenux
Re : comment gérer plusieurs touches avec la sdl
La sdl ne gère pas plusieurs touches à la fois, mais tu peut faire ça :
- Quand on appuie sur caps lock, tu met un bool à true
- Quand on appuie sur une touche, tu fais une condition avec ce booléen pour savoir si oui ou non on est en majuscule.
Idem pour shift.
Hors ligne
#3 Le 29/11/2008, à 17:40
- gregoire0
Re : comment gérer plusieurs touches avec la sdl
Pour le boll ou le true je vois pas de quoi ils s'agi et pour la condition je sais pas tros comment la réaliser avez vous un exemple de code?
Voici mon programme (qui deviendra une fonction) suivi du code source
http://www.megaupload.com/fr/?d=HH7OYJ0Q
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <string.h>
int main(int argc, char *argv[])
{
int continuer = 1;
char chaine[1000]= "";
SDL_Surface *ecran = NULL,*fond = NULL,*texte=NULL,*formulaire = NULL,*valider = NULL;
SDL_Rect positionfond, positiontexte,positionformulaire,positionvalider;
SDL_Event event;
FILE* fichier = NULL;
positionfond.x = 0;
positionfond.y = 0;
positiontexte.x = 8;
positiontexte.y = 11;
positionformulaire.x = 5;
positionformulaire.y = 5;
positionvalider.x = 240;
positionvalider.y = 40;
SDL_Init(SDL_INIT_VIDEO);
ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("Gestion des évènements en SDL", NULL);
fond = SDL_LoadBMP("fond.bmp");
texte = SDL_LoadBMP("texte.bmp");
formulaire = SDL_LoadBMP("formulaire.bmp");
valider = SDL_LoadBMP("valider.bmp");
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
SDL_BlitSurface(fond, NULL, ecran, &positionfond);
SDL_BlitSurface(formulaire, NULL, ecran, &positionformulaire);
SDL_EnableKeyRepeat(10, 10); /* Activation de la répétition des touches */
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT: /* Si c'est un évènement QUITTER */
continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
break;
case SDL_MOUSEBUTTONUP:
if ( event.button.y > 40 && event.button.y <=40+37 && event.button.x > 240 && event.button.x <= 240+116)
{
valider = SDL_LoadBMP("validerclique.bmp");
fichier = fopen("test.txt", "r");
if (fichier != NULL)
{
fgets(chaine,1000, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
printf("%s", chaine); // On affiche la chaîne
fclose(fichier);
}
}
break;
case SDL_KEYUP:
switch(event.key.keysym.sym)
{
case SDLK_DOWN:
positiontexte.y++;
break;
case SDLK_RIGHT:
positiontexte.x++;
break;
case SDLK_LEFT:
positiontexte.x--;
break;
case SDLK_BACKSPACE:
texte = SDL_LoadBMP("rien.bmp");
positiontexte.x-=13;
break;
case SDLK_SPACE:
texte = SDL_LoadBMP("rien.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier,1, SEEK_END);
fclose(fichier);
break;
case SDLK_RETURN:
valider = SDL_LoadBMP("validerclique.bmp");
fichier = fopen("test.txt", "r");
if (fichier != NULL)
{
fgets(chaine,1000, fichier);
printf("%s", chaine);
fclose(fichier);
}
break;
case SDLK_EXCLAIM:
texte = SDL_LoadBMP("!.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"!");
fclose(fichier);
break;
case SDLK_LEFTPAREN:
texte = SDL_LoadBMP("(.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"(");
fclose(fichier);
break;
case SDLK_RIGHTPAREN:
texte = SDL_LoadBMP(").bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,")");
fclose(fichier);
break;
case SDLK_COMMA:
texte = SDL_LoadBMP(",.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,",");
fclose(fichier);
break;
case SDLK_MINUS:
texte = SDL_LoadBMP("-.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"-");
fclose(fichier);
break;
case SDLK_a:
texte = SDL_LoadBMP("a.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"a");
fclose(fichier);
break;
case SDLK_b:
texte = SDL_LoadBMP("b.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"b");
fclose(fichier);
break;
case SDLK_c:
texte = SDL_LoadBMP("c.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"c");
fclose(fichier);
break;
case SDLK_d:
texte = SDL_LoadBMP("d.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"d");
fclose(fichier);
break;
case SDLK_e:
texte = SDL_LoadBMP("e.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"e");
fclose(fichier);
break;
case SDLK_f:
texte = SDL_LoadBMP("f.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"f");
fclose(fichier);
break;
case SDLK_g:
texte = SDL_LoadBMP("g.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"g");
fclose(fichier);
break;
case SDLK_h:
texte = SDL_LoadBMP("h.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"h");
fclose(fichier);
break;
case SDLK_i:
texte = SDL_LoadBMP("i.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"i");
fclose(fichier);
break;
case SDLK_j:
texte = SDL_LoadBMP("j.bmp");
positiontexte.x+=12;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"j");
fclose(fichier);
break;
case SDLK_k:
texte = SDL_LoadBMP("k.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"k");
fclose(fichier);
break;
case SDLK_l:
texte = SDL_LoadBMP("l.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"l");
fclose(fichier);
break;
case SDLK_m:
texte = SDL_LoadBMP("m.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"m");
fclose(fichier);
break;
case SDLK_n:
texte = SDL_LoadBMP("n.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"n");
fclose(fichier);
break;
case SDLK_o:
texte = SDL_LoadBMP("o.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"o");
fclose(fichier);
break;
case SDLK_p:
texte = SDL_LoadBMP("p.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"p");
fclose(fichier);
break;
case SDLK_q:
texte = SDL_LoadBMP("q.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"q");
fclose(fichier);
break;
case SDLK_r:
texte = SDL_LoadBMP("r.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"r");
fclose(fichier);
break;
case SDLK_s:
texte = SDL_LoadBMP("s.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"s");
fclose(fichier);
break;
case SDLK_t:
texte = SDL_LoadBMP("t.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"t");
fclose(fichier);
break;
case SDLK_u:
texte = SDL_LoadBMP("u.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"u");
fclose(fichier);
break;
case SDLK_v:
texte = SDL_LoadBMP("v.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"v");
fclose(fichier);
break;
case SDLK_w:
texte = SDL_LoadBMP("w.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"w");
fclose(fichier);
break;
case SDLK_x:
texte = SDL_LoadBMP("x.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"x");
fclose(fichier);
break;
case SDLK_y:
texte = SDL_LoadBMP("y.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"y");
fclose(fichier);
break;
case SDLK_z:
texte = SDL_LoadBMP("z.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"z");
fclose(fichier);
break;
case SDLK_1:
texte = SDL_LoadBMP("a.bmp");
positiontexte.x+=13;
fichier = fopen("test", "r+");
fseek(fichier, 0, SEEK_END);
fprintf(fichier,"z");
fclose(fichier);
break;
default:
break;
}
default:
break;
}
SDL_BlitSurface(texte, NULL, ecran, &positiontexte);
SDL_BlitSurface(valider, NULL, ecran, &positionvalider);
SDL_Flip(ecran);
}
SDL_FreeSurface(fond);
SDL_FreeSurface(texte);
SDL_Quit();
return EXIT_SUCCESS;
}
Dernière modification par gregoire0 (Le 29/11/2008, à 17:41)
Ne faite pas attention au faute je suis dyslexique.
«Il était une fois un enfant de trois ans qui n’arrivait pas à apprendre à parler. À huit ans, il ne pouvait toujours pas lire. Ses enseignants pensaient qu’il était déficient. Il ne l’était pas. Albert Einstein avait des troubles d’apprentissage.»
Hors ligne