Gérer les touches directionnelle (C/C++) Le sujet est résolu

Une simple question, pas de souci, nous sommes là pour y répondre.
Règles du forum
Pour toute demande d'aide commencez par indiquer :
  • votre matériel complet et votre système d'exploitation.
  • Si ces conditions ne sont pas remplies, où bien incomplètes le sujet ne sera pas traité.
  • Et surtout donnez de vos nouvelles sans laisser traîner pendant des semaines, voire des mois !
Répondre
LexisBass
    unknown unknown

Gérer les touches directionnelle (C/C++)

Message par LexisBass »

Hello la team, voilà mon problème, je dois créer un petit jeu permettant de générer des colonnes, c-à-d, si l'utilisateur décide d'aller a droite, une colonne sera générer. Programmation en mode console bien sûr.

Le problème n'est pas la génération d'une colonne mais la gestion des déplacements. J'aimerai utiliser les flèches directionnelles sur le clavier cependant, je n'arrive pas a gérer les codes ascii des touches. Par exemple, le code ascii de la flèche de droite est 224 77, du coup, je n'arrive pas a gérer le code ascii dans le programme même, j'ai fais quelques recherche qui sont parfois un peu plus poussé pour moi sachant que je n'ai pas encore la POO. J'étais tombé sur un include de ncurses mais je ne comprenais pas bien comment utiliser cette fonction.

Enfin bref, mon seul et unique problème est l'utilisation des flèches directionnelles pour soit se déplacer vers la gauche ou vers la droite.

PS: Pour presser une touche, j'utilise la fonction kbhit() et getch().

Merci pour votre aide.
zexcelator
    unknown unknown

Re: Gérer les touches directionnelle (C/C++)

Message par zexcelator »

Bonjour,


Exemple de code C++ (mais fonctionne en C, en remplaçant "std:: cout" par "printf" et reprendre les bons "include").
La fonction PosCurseur, positionne le curseur à la position passé en paramètre (PosH et PosV).

Fonctionne sur Windows mais n'est pas portable à d'autres systèmes.

Code : Tout sélectionner

#include <iostream>
#include <windows.h>
#include <tchar.h>
#include <cstdio>

void PosCurseur(int PosH,int PosV)
{
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE); 	// Handle de la console.
    COORD Position;								// Position du curseur.
    Position.X=(SHORT)PosH;						// Position horizontale.
    Position.Y=(SHORT)PosV;						// Position Verticale.
    SetConsoleCursorPosition(H, Position);		// Do job !
}

int main(int argc, char** argv)
{
	PosCurseur(35, 6);
	std::cout << "Hello world!" << std::endl;
	return 0;
}
LexisBass
    unknown unknown

Re: Gérer les touches directionnelle (C/C++)

Message par LexisBass »

Hello merci pour ton message mais ça me permettra d'utiliser les touches directionnelle?
zexcelator
    unknown unknown

Re: Gérer les touches directionnelle (C/C++)

Message par zexcelator »

ncurse est une biblliothèque mais pour l'utiliser faut déjà bien connaître le c.

Il te faut deux getch

Le premier pour filtrer le code 224

Code : Tout sélectionner

 if((a=getch())==224)
Le second pour récupérer le code utile

Code : Tout sélectionner

b=getch();
Ensuite tu testes ce code

Code : Tout sélectionner

if(b==77)...
LexisBass
    unknown unknown

Re: Gérer les touches directionnelle (C/C++)

Message par LexisBass »

Ok donc tu utilises 2 variables, faut-il les déclarer en char ou bien en int? J'en ai vu certains qui les déclaraient en int.
zexcelator
    unknown unknown

Re: Gérer les touches directionnelle (C/C++)

Message par zexcelator »

Peu importe, il y a parfaite adéquation entre char et int et ils sont interchangeables.

char c = 'a' ou int i = 97.

Maintenant, tu ne gère pas des touches standard mais des touches spéciales, donc tu travaille avec les codes ASCII et tes variables sont forcément de type int.
LexisBass
    unknown unknown

Re: Gérer les touches directionnelle (C/C++)

Message par LexisBass »

OH MON DIEU CA FONCTIONNE!!!! Je crois que je vais pleurer... bon le truc maintenant c'est qu'en faites, suis obligé d'appuyer sur une lettre avant et ensuite appuyer sur une flèche or, mon but est d'appuyer directe sur une flèche.

EDIT: Ca fonctionne parfaitement, merci beaucoup pour ton aide :D
Répondre