1

En fait, je voudrais savoir comment on peut mélanger deux boucles, l'une avec des tests de touches, sans qu'elles se ralentissent !

Exemple : un pong de base : la balle bouge à vitesse régulière, mais comment je fais pour que quand j'appuie sur "haut" pour bouger mon curseur, ça gêne pas l'éxécution de la boucle qui contient le mouvement de la balle ?

2

simple, suffit de deplacer le curseur a chaque iteration, ou pas.
avatar
納 豆パワー!
I becamed a natto!!!1!one!

3

chaque itération ???? dsl je vois pas ce que c

4

for (i=0;i<12345;i++) {
 puts("ceci est une itération");
}
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é

5

sans qu'elles se ralentissent

tu veux dire sans que ngetchx() par exemple ne bloque la boucle et empeche la balle de continuer à avancer ?
si c'est ca utilise

if(kbhit())
k=ngetchx();
else
k=0;

(verifie le nom dses fonctions dans l'aide de tigcc, je ne suis pas sur que ca soit le nom exact)
avatar

6

Merci pour l'itération.

Mais pour le bout de script de Nu, je pige pas où je le met justement le bout !

7

c'est le code qui te permet de tester le clavier
apres tu fais monter ou descendre la raquette en fontion de la valeur de k par exemple
le tout dans la boucle principale

par exemple : (pseudo C)
while(k != echap)
{
  if(kbhit()){
    k=ngetchx(); 
  }else{
    k=0;
  }
  deplacer_raquette();
  dessiner_raquelle();
}


(et utilise
if(kbhit())
k=ngetchx();
else
k=0;
le code que j'avais posté avant était buggué)
avatar

8

merci bien, je vais esayer ça tout de suite....

9

if(kbhit()){
k=ngetchx();
}else{
k=0;
}

dans ce code, en fait, tu testes si une touche est pressée, ensuite tu rentres la touche dans k, puis si aucune touche n'est pressée tu donnes la valeur 0 à k.

Moi j'ai donné ça :

void _main(void)
{
static unsigned char sprite[] = {0b01111100,0b11111110,0b11111110,0b11111100,0b01111000,0b00110000,0b00110000,0b00110000};
short a=50, k=40, j=50, echap=0; //a la hauteur de la raquette, k et j les coordonnées de la balle (k abscisse)
clrscr();
Sprite8 (6, 50, 8, sprite, LCD_MEM, SPRT_OR); //affiche une première fois la raquette
ngetchx();
while(k != echap) //tant que la balle est dans l'écran
{
if(kbhit()) //si une touche est pressée
{ k=ngetchx(); } //k est la valeur de la touche
else
{ k=0; } //sinon on retourne 0
switch(k)
{
case 337: // si la touche est "bas"
a += 2;
break;
case 340: // si la touche est "haut"
a -=2;
break;
case 13:
goto Fin; //Si on appuie sur "Enter", ça quitte (histoire de pouvoir quitter)
break;
}
Sprite8 (a, 6, 8, sprite, LCD_MEM, SPRT_OR);
}
Fin :

}

Et ça donne rien. Juste la raquette s'affiche une fois et après la prog s'arrête dès qu'on appuie sur une touche (le ngetchx() ).

10

Gustavitch :
Et ça donne rien. Juste la raquette s'affiche une fois et après la prog s'arrête dès qu'on appuie sur une touche (le ngetchx() ).


while(k != echap) //tant que la balle est dans l'écran

Si k prend la valeur 0 (aucune touche n'est pressée), alors on quitte la boucle, non ?

ps :
En général, on doit éviter les goto, car ça peut rendre rapidement un programme illisible, feu Dijkstra aurait fait une division par zéro s'il avait vu ce code grin

11

merci !

12

Et comment je fais pour effacer un sprite ?
Pasque dans les commandes à la fin du truc du sprite, ya XOR, AND et OR, mais ça fait pas disparaitre

13

une solution pour effacer un sprite est de le réafficher en XOR au même endroit.
cela dit, à partir du moment où on a un nombre conséquent de sprites à l'écran, il est généralement plus rapide de tout effacer, et de tout redessiner
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

14

ouais ok merci. Et au fait, mon code est devenu :

void _main(void)
{
static unsigned char sprite[] = {0b01111100,0b11111110,0b11111110,0b11111100,0b01111000,0b00110000,0b00110000,0b00110000};
short a=50, k=40, j=50, echap=0, l=0 ; //a la hauteur de la raquette, k et j les coordonnées de la balle (k abscisse)
clrscr();
Sprite8 (6, 50, 8, sprite, LCD_MEM, SPRT_OR); //affiche une première fois la raquette
while(k != echap) //tant que la balle est dans l'écran
{
if(kbhit()) //si une touche est pressée
{ l=ngetchx(); } //l est la valeur de la touche
else
{ l=0; } //sinon on retourne 0
switch(l)
{
case 337: // si la touche est "bas"
a -= 2;
break;
case 340: // si la touche est "haut"
a +=2;
break;
case 13:
goto Fin; //Si on appuie sur "Enter", ça quitte (histoire de pouvoir quitter)
break;
}
Sprite8 (6, a, 8, sprite, LCD_MEM, SPRT_OR);
}
Fin :

}

Ya pas moyen de faire aller le dessin de la raquette un peu plus vite ?? ou que il y ait pas besoin d'appuyer 107 ans pour que la rapuette bouge à vitesse constante ?

15

Regarde du côté de _rowread dans la doc de TIGCC smile
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

16

mais je pige pas comment ça s'utilise _rowread.
Je vais pas faire :

a _rowread (1 row); // et il me trouve une touche ?? après je suppose que quand il a la touche il me la met dans a.

17

Regarde du côté de _keytest plutôt. L'utilisation directe de _rowread est compliquée et obsolète.
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é

18

Kevin Kofler :
Regarde du côté de _keytest plutôt. L'utilisation directe de _rowread est compliquée et obsolète.


Compliquée ... Ça dépend toujours du langage ...

RowRead.enable();

... tests ...

if (RowRead.key_A) {

... tests ...

RowRead.enable();

19

RowRead.key_A est l'équivalent de _keytest(RR_A), pas d'un _rowread.
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é

20

j'ai pas bien pigé votre truc mais moi j'ai ça :

void _main(void)
{
static unsigned char sprite[] = {0x30,0x38,0x3C,0x3C,0x3C,0x3C,0x38,0x30};
short a=50, k=40, j=50, echap=0, l=0; //a la hauteur de la raquette, k et j les coordonnées de la balle (k abscisse)
clrscr();
Sprite8 (6, 50, 8, sprite, LCD_MEM, SPRT_OR); //affiche une première fois la raquette

while (k != echap)
{
l=keytest();
if (_keytest (0, 2)) //si "bas" est pressée
{ a -= 2; }
if (_keytest (0, 1)) //si "haut" est pressée
{ a += 2; }
if (_keytest (1, 0)) //si "Enter" est pressée
{ goto Fin; }
l=0;
Sprite8 (6, a, 8, sprite, LCD_MEM, SPRT_OR);
}
Fin :

}


et je vois pas pkoi il réagit pas pareil quand je met "haut" et quand je met "bas" !!
D'autant que quand je veux lancer il me dit "unresolved to keytest" mais je vois pas où est le pb, et le coup d'après il lance sans pb le truc.

21

Lis la doc en entier ! Il est suggéré de détourner certaines interruptions qui scannent le clavier et donc interfèrent avec _rowread (ou _keytest, c'est pareil).
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

22

Kevin Kofler :
RowRead.key_A est l'équivalent de _keytest(RR_A), pas d'un _rowread.

Je ne sais pas si _keytest se développe en ça :

#define RowRead_key_A (_rowread( RowRead_RR_R_A ) & RowRead_RR_C_A)

Mais je vois mal ce qui pourrait être plus rowread ...

--

Elle fait quoi cette fonction ?

l=keytest();

23

en effet elle sert à rien, je l'ai laissée par erreur en changeant mon code.
Et désolé si "j'ai pas lu la doc en entier" mais l'anglais de prog c pas évident au début ! moi j'ai pas lu ça...

Enfin bon je suis pas avancé...pasque Sasume même ta traduction elle me dit pas gd chose : je vois pas en quoi j'ai une interruption qu iinterfère ! Mon interruption qu iscane le clavier c'est _keytest et je vois pas en quoi il interfère ac autre chose !

24

Gustavitch :
en effet elle sert à rien, je l'ai laissée par erreur en changeant mon code.
Et désolé si "j'ai pas lu la doc en entier" mais l'anglais de prog c pas évident au début ! moi j'ai pas lu ça...

Enfin bon je suis pas avancé...pasque Sasume même ta traduction elle me dit pas gd chose : je vois pas en quoi j'ai une interruption qu iinterfère ! Mon interruption qu iscane le clavier c'est _keytest et je vois pas en quoi il interfère ac autre chose !

Note: It is recommended to redirect Auto-Int 1 and 5 while reading the keyboard using _rowread, because keyboard reading routines implemented in these two interrupts may interfere with _rowread if an interrupt occurs just while _rowread is executing. See DUMMY_HANDLER from intr.h for information on how to do this.
Moi, javais réglé ça comme ça :
/**
* Enable RowRead operation. Saves then disable interupt handlers 1 and 5.
*/
public static native void enable() {
  RowRead_save_int_1 = GetIntVec (AUTO_INT_1);
  RowRead_save_int_5 = GetIntVec (AUTO_INT_5);
  SetIntVec (AUTO_INT_1, DUMMY_HANDLER);
  SetIntVec (AUTO_INT_5, DUMMY_HANDLER);
}

/**
* Disable RowRead operation. Restores interupt handlers 1 and 5.
*/
public static native void disable() {
  SetIntVec (AUTO_INT_1, RowRead_save_int_1);
  SetIntVec (AUTO_INT_5, RowRead_save_int_5);
}

25

Gustavitch
: D'autant que quand je veux lancer il me dit "unresolved to keytest" mais je vois pas où est le pb, et le coup d'après il lance sans pb le truc.

Ta ligne l=keytest(); est en trop.
Quesoft
:
Kevin Kofler :
RowRead.key_A est l'équivalent de _keytest(RR_A), pas d'un _rowread.

Je ne sais pas si _keytest se développe en ça :
#define RowRead_key_A (_rowread( RowRead_RR_R_A ) & RowRead_RR_C_A)

Oui, c'est ce que donne _keytest(RR_A).
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é

26

Kevin Kofler :
Oui, c'est ce que donne _keytest(RR_A).

Ça justifie ton commentaire alors ...

-hors sujet-
C'est intéressant de voir que tu as pris le temps d'explorer l'implémentation de l'API. Ça veut dire que lorsque tu critiquais Moka, tu avais au moins une idée de ce dont tu parlais grin

27

Désolé Quesoft mais je pige pas du tout ton code....Je vois pas comment tu utilises _RowRead.

28

Quesoft :
-hors sujet-
C'est intéressant de voir que tu as pris le temps d'explorer l'implémentation de l'API. Ça veut dire que lorsque tu critiquais Moka, tu avais au moins une idée de ce dont tu parlais grin

Euh, pas besoin d'explorer l'API pour voir ce que fait ton code exemple, les noms disent tout...
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é

29

Gustavitch :
Désolé Quesoft mais je pige pas du tout ton code....Je vois pas comment tu utilises _RowRead.


C'est deux méthodes qui sauvent et restaurent les handlers des int 1 et 5. On invoque la première (enable), fait les test (tes rowreads), puis invoque la deuxième (disable).

30

ah ok. Et c koi les handlers................................... ?