Il faut que tu refasses le boulot de scnaf.. ne t'inquiètes pas, c'est moins, compliqué qu'il n'y parait...
pour la variable, c'est la même chose : char texte[20+1];
ensuite, il te faut une autre variable (un booleen) qui te dit que tu est en train de saisir un texte et pas d'appuyer sur les touche pour déplacer ton bonhome etc...
int saisie = 0;
une troisième variable est aussi nécessaire pour savoir ou tu en est dans ton tableau de char :
int indice = 0;
pour plus de clarté, je te propose de mettre tout ça dans une structure, et de déclaré une variable globale "ma_saisie" de ce nouveau type :
- Code: Tout sélectionner
typedef struct
{
char texte[23+1]; // on autorise un nom de 23 caractère
int saisie;
int indice;
} Saisie;
Saisie ma_saisie;
quand tu commence à saisir, il te faudra initialiser la variable "ma_saisie", voila comment tu vas faire :
- Code: Tout sélectionner
void initSaisie()
{
ma_saisie.saisie = 1; // pour dire que l'on est en train de saisir
ma_saisie.indice = 0; // on en est au premier caractère.
}
voila maintenant comment gerer ta boucle d'evenement :
- Code: Tout sélectionner
while(...)
{
.... // tous des évenements habituels.
// les cas d'appuys sur une touche de clavier :
case SDL_KEYDOWN:
switch ( event.key.keysym.sym ) // on teste quelle touche a été enfoncée
{
case SDLK_a:
case SDLK_b:
... // tu les mets tous jusqu'à SDLK_z
// tu met ensuite les touches spéciales que tu souhaites gerer
case SDLK_SPACE:
...
if (ma_saisie.saisie) // si on est en train de saisir du texte
saisieTexte( (char)event.key.keysym.sym );
break; // le break de tous les case SDLK_*
case SDLK_RETURN: // pour la fin de la saisie
if (ma_saisie.saisie)
finSaisie();
}
break; // le break du case SDL_KEYDOWN
}
enfin, les fonctions saisieTexte et finSaisie, qui ne sont plus très difficiles après cela
- Code: Tout sélectionner
void saisieTexte(char lettre)
{
if (ma_saisie.indice < 23) // s'il reste encore de la place dans le tableau
{
ma_saisie.texte[ma_saisie.indice] = lettre;
ma_saisie.indice++;
}
else // plus de place
printf("blabla, c'est pas bien :(\n");
}
void finSaisie()
{
ma_saisie.texte[ma_saisie.indice] = 0; // le 0 terminal
ma_saisie.saisie = 0; // on ne saisie plus
}
Voila, c'était bien moins compliqué que ça en avait l'air non
bon, c'est une version un peu simplifiée aussi.. tu pourrais aussi gerer les retours en arrière et les effacement, les insertions, ...
Mais pour tout ça, je te laisse t'amuser
Un autre dtail aussi.. moi je l'ai écrit comme ça pour limiter la taille, mais évite toujours de mettre des "nombres magiques" dans ton code, du genre : if (ma_saisie.indice < 23), d'abord, parce que 23 ça ne veut rien dire, et ensuite parce que si tu changes un jour la taille de ton texte, tu devras retrouver tous les 23 et les changer aussi
(sans parler des 23 qui servent à autre chose...)
alors tu mets en début de fichier #define TAILLE_SAISIE 23 et tu remplaces tous les 23 par ça. Ensuite, si tu veux changer la taille, tu n'as qu'à la changer à un seul endroit
Fait ça pour TOUS les nombres que tu as dans le code !!