1

bon bah voila le gros newbie de base qui débarque en C: en fait j'ai un souci au niveau des tests du clavier, j'explique le truc:
donc j'ai une boucle qui répète 20 fois la meme instruction avec un test clavier dedans:
j'affiche un sprite et si l'utilisateur ne presse pas de touche on passe au cycle suivant de la boucle
si l'utilisateur presse une touche et que c'est la bonne bah on affiche un autre sprite et au passe au cycle suivant de la boucle
si l'utilisateur ne presse pas la bonne touche on n'affiche rien et on passe au cycle suivant
jusque la pas de probleme

mais si l'utilisateur presse deux touches au meme cycle bah le truc c'est que mon prog va traiter la premiere touche au premier cycle puis la seconde au deuxieme, ce que je ne veux PAS, car je perd un cycle: faudrait donc que les autress touches pressées soient ignorées avant de passer au cycle suivant de la boucle. j'ai essayé avec ngetchx mais c'est nul parce que le prog attend la pression d'une touche, et j'ai essayé avec le système de queue mais ca marche toujours pas (ca fait pareil).
je sais pas si c'est très clair...
c'est mon premier prog en C, donc chuis nul, donc si qqn pouvait m'aider ce serait le pied.
merci d'avance.

edit: je peux filer la source si qqn veut voir vraiment pourquoi ca marche pas... pour ceux qu'ont du temps a perdre quoi smile
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

2

Je sais pas, mets ta source, pour voir comment tu t'es organisé...
Sinon, mets un truc du genre :
if(touche==gauche)....;
else if(touche==droite)....;
else if(touche==bas)....;
else if...

3

//définitiondes variables int randnum=0; int i=0; int points=0,level=0; int time=0; unsigned short int key=0; //fonction d'attente avec variable "time" void wait(int attente) { OSFreeTimer(USER_TIMER); OSRegisterTimer(USER_TIMER,attente); while(!OSTimerExpired(USER_TIMER) && !kbhit()); } //fonction principale void _main(void) { void *kbq = kbd_queue(); clrscr(); for(i=0;i<20;i++) {      randnum = random(4);      clrscr();      printf("Points: %d",points);      wait(15);      key=0;            switch(randnum)      {           case 0: //luquet en haut                     Sprite32(62,10,32,lulu,LCD_MEM,SPRT_XOR);                     wait(time);                     if (kbhit())                          OSdequeue(&key, kbq);                     if (key==KEY_UP){                          points++;                          Sprite32(62,10,32,lulu,LCD_MEM,SPRT_XOR);                          Sprite32(62,10,32,boom,LCD_MEM,SPRT_XOR);                          wait(time+2);}                                                              break;                                case 1: //luquet en bas                     Sprite32(62,58,32,lulu,LCD_MEM,SPRT_XOR);                     wait(time);                     if (kbhit())                          OSdequeue(&key, kbq);                                               if (key==KEY_DOWN){                          points++;                          Sprite32(62,58,32,lulu,LCD_MEM,SPRT_XOR);                          Sprite32(62,58,32,boom,LCD_MEM,SPRT_XOR);                          wait(time+2);}                     break;                           case 2: //luquet a gauche                     Sprite32(10,34,32,lulu,LCD_MEM,SPRT_XOR);                     wait(time);                     if (kbhit())                          OSdequeue(&key, kbq);                                               if (key==KEY_LEFT){                          points++;                          Sprite32(10,34,32,lulu,LCD_MEM,SPRT_XOR);                          Sprite32(10,34,32,boom,LCD_MEM,SPRT_XOR);                          wait(time+2);}                     break;                                case 3: //luquet a droite                     Sprite32(118,34,32,lulu,LCD_MEM,SPRT_XOR);                     wait(time);                     if (kbhit())                          OSdequeue(&key, kbq);                                               if (key==KEY_RIGHT){                          points++;                          Sprite32(118,34,32,lulu,LCD_MEM,SPRT_XOR);                          Sprite32(118,34,32,boom,LCD_MEM,SPRT_XOR);                          wait(time+2);}                     break;      } }
Voila c'est juste la partie qui me pose probleme dans la boucle for.
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

4

Ben il faut utiliser row_read. Si tu as une beta récente de TIGCC, il y a des fonctions interessantes pour ça, qui simplifient l'utilisation de row_read : "_keytest" et "_keytest_optimized".
Au moins, ça n'attend pas la pression sur une touche smile
Mon site perso : http://www.xwing.info

5

_rowread rullllezzzz !!

6

oué, rien a dire, rowread te fera tout ce que tu veux ...

(janjan2 a fait un header avec toutes les touches en genre: _89_KEY_UP)

7

j'arrive pas a utiliser ca, je sais pas ce que ca fait exactement. j'ai regardé dans la doc mais c'est pas assez explicite (ou c'est ptete que chuis con aussi)
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

8

télécharge le header sur le site de la j2t

puis tu fait par exemple: #define USE_89 #define SAVE_SCREEN #include <tigcclib.h> #include "rowkeys.h" // header de janjan2 void _main(void) {   ClrScr();   while(!_89_KEY_ESC)   {     if (_89_KEY_RIGHT) x++;     if (_89_KEY_LEFT)    x--;     if (_89_KEY_UP)      y--;     if (_89_KEY_DOWN) y++;     if (_89_KEY_2ND)     tirer(x,y);     // ...     dShip(x,y);    }   ClrScr(); } 

voilà wink c unsuper shoot-them-up mais tout est caché dans la fonction dShip() wink sans compter l'oubli de déclaration des variables wink

9

Il y a des constantes commes celles-là d'office avec les dernières bêtas de TIGCC.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

j'ai la 0.94 beta13 et j'ai pas trouvé enfin bon, ce header existe depuis pas mal de tps quand mm puis il est bien pratique quand mm car toutes les touches sont définies

11

Chez nous aussi. Va faire un tour dans la documentation de compat.h.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

en plus, j'ai donné le nom de la fonction qui utilise les constantes prédéfinies : c'est _keytest
Mon site perso : http://www.xwing.info

13

bon bah j'ai trouvé une bonne technique: fallait vider la queue avec un ptit GKeyFlush() en fin de boucle comme ca le cycle repart et ca évite de gérer la seconde pression de touche malencontreuse. oui
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

14

vi, mais c'est plus lent, et c'est po bien ça ! _rowread est le plus adapté à ce genre de trucs grin
Mon site perso : http://www.xwing.info

15

bah ouais mais j'ai l'impression que _rowread place les appuis supplémentaires en queue, ou que quand on appuie sur une touche flêchée bah c'est comme si on appuyait plusieurs fois dessus, donc ca va pas, donc je pense qu'il faut que je fasse un GKeyFlush a moins que qqn ait une autre idée...
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

16

au fait j'ai tigcc 0.94 beta 7 et je trouve pas au dessus... kevin tu peux me dire ou je peux trouver la derniere beta ?
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

17

Il faut que tu ailles sur le site de la TIGCC TEAM, et que, dans la rubrique Download, tu télécharges 'the latest tigcc beta'.

18

bah justement c'est la 7...
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

19

au fait y'a un moyen de tester l'appuie d'une et une SEULE touche ? c'est a dire que la condition est vérifiée uniquement si on appuie sur la bonne touche, et n'est pas vérifiée si on appuie sur la bonne touche+une autre touche ou des autres touches
merci d'avance.
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

20

Retourne voir le site de tigcc.

21

Non non, c'est pas la 7, c'est la 13 je crois. Ils postent pas de news pour toutes les betas... Il suffit de télécharger "the lastet TIGCC beta" comme l'a dis jackiechan, et tu verras, c'est pas la 7 grin
Mon site perso : http://www.xwing.info

22

C'est la 14 maintenant.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

23

en effet, j'avais jamais fait attention a ces constantes, depuis quand elles sont dans les beta ?

24

Je ne sais plus. Bêta 9 ou 10, je pense.

Et maintenant, la bêta la plus récente est la bêta 15.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

25

stylobil a écrit :
au fait y'a un moyen de tester l'appuie d'une et une SEULE touche ? c'est a dire que la condition est vérifiée uniquement si on appuie sur la bonne touche, et n'est pas vérifiée si on appuie sur la bonne touche+une autre touche ou des autres touches merci d'avance.

Oui tu testes qu'aucune autre touche n'est appuye smile

26

bah ouais mais avec quelle fonction de _rowread ? y'a une fonction _rowread pour n'importe quelle touche ?
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

27

oui, _rowread lit la matrice clavier, donc chaque touche a son emplacement. Faut juste regarder à quel bit elle correspond en ligne et colonne et convertir en hexa pour l'utiliser.

regarde ds le tuto de squale !!!
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

28

ouais ca j'ai compris
je veux juste la fonction pour une touche quelconque.... grin
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

29

bon bah c'est bon je me suis débrouillé.
une derniere question: je veux faire en sorte d'afficher un text a la fin pis de quitter le prog si l'utilisateur appuie sur ESC donc je fais:

while (!_keytest(RR_ESC));
}

mais ca marche pas c'est a dire que ca quitte pour n'importe quelle touche pressée... qqn sait ?
"La violence est le dernier refuge de l'incompétence." Isaac Asimov

30

bah tu peux tjs faire

void waitesc(void)
{
long x=0;

while(!(_rowread(ESC))
{
  x++;
}

}


car je crois bien que le compilo vire ta ligne si elle est vide

ex :

for(x=0 ; x<15000; x++)
{
}


sera viré car elle n'a pas d'interet en prog.
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^