CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [C] Saisir touche sans retour-chariot

DébutPage précedente
1
Page suivantePage suivante
[Ratalosdu93] [Ratalosdu93]
MP
Niveau 7
26 juillet 2014 à 15:56:42

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.

Somnides Somnides
MP
Niveau 6
26 juillet 2014 à 16:04:06

Tu as essayé avec read ?

DirectX11 DirectX11
MP
Niveau 6
26 juillet 2014 à 18:41:42

sous Linux il faut changer la struct termios et passer en mode non-canonique (tcgetattr/tcsetattr)

sous Windows je sais plus

Odvie Odvie
MP
Niveau 10
26 juillet 2014 à 19:48:04

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 :ouch: :hap:

Nidorasme Nidorasme
MP
Niveau 5
28 juillet 2014 à 14:38:09

directx11

:d) http://fr.openclassrooms.com/forum/sujet/getch-sous-linux
J'ai lu sur ce site une portion de code comme ça:

"

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <unistd.h>
  4. include <termios.h>

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

Nidorasme Nidorasme
MP
Niveau 5
28 juillet 2014 à 14:44:34

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&amp;ion=1&amp;espv=&amp;es_th=1&amp;ie=UTF-8&amp;q=c%20read%20keypress

http://stackoverflow.com/questions/14973046/how-to-get-keypress-event-in-console

wow :ouch: :hap:

:d) 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 ?

godrik godrik
MP
Niveau 22
28 juillet 2014 à 18:26:53

je pense qu'utiliser ncurses est la reponse simple a ta question.

DirectX11 DirectX11
MP
Niveau 6
28 juillet 2014 à 21:41:22

normal ton code désactive le mode echo toi c'est le flag CANON que tu veu désactivé

DirectX11 DirectX11
MP
Niveau 6
28 juillet 2014 à 22:15:33

Préviens si tu n'y arrive pas.
je te ferais un exemple :ok:

DirectX11 DirectX11
MP
Niveau 6
29 juillet 2014 à 05:26:51

Bon je m’ennuie..
voila un exemple http://pastebin.com/ViHbnetv

DirectX11 DirectX11
MP
Niveau 6
29 juillet 2014 à 05:53:36

Et si tu veux un read non bloquant
http://pastebin.com/N69BnDWy

[Ratalosdu93] [Ratalosdu93]
MP
Niveau 7
08 août 2014 à 11:04:44

Oui, ça a l'air de marcher DirectX11, merci beaucoup.

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment