Bonjour, je souhaite réaliser un programme de jeu simple directement exécutable sur le terminal, avec donc des graphismes ASCII et une vue 2D de dessus classique.
Un problème sur lequel je bute c'est concernant le déplacement du personnage, je prévois d'utiliser les touches directionnelles ou bien les touches Z-Q-S-D du clavier, seulement pour la saisie de caractères, que ce soit avec getchar ou scanf il est nécessaire d'appuyer sur la touche entrée pour valider chaque saisie. Ce qui gêne bien sûr pas mal la fluidité du déplacement.
Ce que je voudrais c'est qu'en appuyant sur une touche du clavier le programme la reçoit directement, sans devoir passer par la touche entrée, je précise également que si possible j'aimerai me passer de toute bibliothèque externe et à plus forte raison de la bibliothèque SDL.
Merci d'avance.
Tu as essayé avec read ?
sous Linux il faut changer la struct termios et passer en mode non-canonique (tcgetattr/tcsetattr)
sous Windows je sais plus
https://www.google.com/search?sourceid=chrome-psyapi2&ion=1&espv=&es_th=1&ie=UTF-8&q=c%20read%20keypress
http://stackoverflow.com/questions/14973046/how-to-get-keypress-event-in-console
wow
directx11
http://fr.openclassrooms.com/forum/sujet/getch-sous-linux
J'ai lu sur ce site une portion de code comme ça:
"
int main(void)
{
char buffer[100];
struct termios infos;
int size;
if (tcgetattr(STDIN_FILENO, &infos) == -1) // on récupère les infos du terminal
{
fprintf(stderr, "Erreur tcgetattr.\n");
return (EXIT_FAILURE);
}
infos.c_lflag &= ~ECHO; // on le passe en mode non-echo
if (tcsetattr(STDIN_FILENO, TCSANOW, &infos) == -1) // on set les infos du terminal
{
fprintf(stderr, "Erreur tcsetattr.\n");
return (EXIT_FAILURE);
}
if ((size = read(STDIN_FILENO, buffer, sizeof(char) * 100)) == -1) // on lis, les caractères entrés ne sont pas affichés
{
fprintf(stderr, "Erreur durant la lecture.\n");
return (EXIT_FAILURE);
}
buffer[size - 1] = '\0';
printf("le buffer contient [%s]\n", buffer); // on affiche le resultat de la lecture
return (EXIT_SUCCESS);
}"
En l’exécutant la seule chose qui change avec un simple scanf c'est qu'il n'y a pas l'echo lorsqu'on frappe les touches, mais il faut quand même valider avec la touche entrée à la fin, bref ce n'est pas ce que je cherche
Odvie Voir le profil de Odvie
Posté le 26 juillet 2014 à 19:48:04 Avertir un administrateur
https://www.google.com/search?sourceid=chrome-psyapi2&ion=1&espv=&es_th=1&ie=UTF-8&q=c%20read%20keypress
http://stackoverflow.com/questions/14973046/how-to-get-keypress-event-in-console
wow
wow en effet, je suis sous linux et je ne veux pas me taper les 20 pages absconses du manuel d'une bibliothèque servant à faire des programmes vi-like.
Bref, il y a t'il une réponse simple à ma question ou bien faudra-il que je fasse bac+10 en informatique pour résoudre ce problème qui me semble pourtant assez élémentaire ?
je pense qu'utiliser ncurses est la reponse simple a ta question.
normal ton code désactive le mode echo toi c'est le flag CANON que tu veu désactivé
Préviens si tu n'y arrive pas.
je te ferais un exemple
Bon je m’ennuie..
voila un exemple http://pastebin.com/ViHbnetv
Et si tu veux un read non bloquant
http://pastebin.com/N69BnDWy
Oui, ça a l'air de marcher DirectX11, merci beaucoup.