1

Je vais me faire foutre de ma gueule, mais tant pis je pose quand même la question :

#define SAVE_SCREEN
#define USE_GRAY_PATCH 
#define OPTIMIZE_ROM_CALLS     
 
#include <tigcclib.h>

 
short _ti89;
static unsigned int rand_seed=0; // seed for random numbers

int randomnum(int x)             // returns a random number between 0 and x-1
{
  return (rand_seed=(75*rand_seed+1))%x;
}
void da(void)
{
	GrayMode (GRAY_ON);
      SetPlane (0);     
      ClrScr ( );
      BitmapPut (0, 0, &arena_C0, &zone_clip, A_NORMAL); 
 
      SetPlane (1);     
      ClrScr ( );
      BitmapPut (0, 0, &arena_C1, &zone_clip, A_NORMAL); 
 
      ngetchx ( );      
 
      GrayMode (GRAY_OFF);
clrscr();
}
void end(void)
{
clrscr();
DrawStr(0,0,"Score :",A_REPLACE);
ngetchx();
}
	
void _main(void)
{
short timing=32000;
short yesno=0;
short rep=18;
short sc=0;
short i=0;

GrayMode (GRAY_ON);
 
      SetPlane (0);     
      ClrScr ( );
      BitmapPut (0, 0, &titre_C0, &zone_clip, A_NORMAL); 
 
      SetPlane (1);     
      ClrScr ( );
      BitmapPut (0, 0, &titre_C1, &zone_clip, A_NORMAL); 
 
      ngetchx ( );      

      GrayMode (GRAY_OFF);
clrscr();

da();


i=0;
clrscr();
yesno=randomnum(2);

	
if (yesno == 0) DrawStr(0,0,"Yes it is !   ",A_REPLACE);

if (yesno == 1) DrawStr(0,0,"No, it isn't !",A_REPLACE);


	if (_rowread(0x7E)&0x2)
	{
		DrawStr(0,50,"Yes it is !   ",A_REPLACE);
		rep=0;
		i=32001;
	}
	if (_rowread(0x7E)&0x8)
	{
		DrawStr(0,50,"No, it isn't !",A_REPLACE);
		rep=1;
		i=32001;
	}
	
}


Voilà, ce prog affiche deux images en 4 NVG (je vous ai soulagés des codes) et ensuite passe au "jeu" (qui ne sera pas ainsi, rassurez-vous). Je voudrais savoir comment on fait une boucle qui :

- Suivant la valeur de yesno, affiche "Yes, it is", ou "No, it isn't".
- Le prog attende qu'on appuie sur gauche ou droite, et augmente le score si on contredit ce qui est écrit,
- si on ne réagit pas, la calto affiche "Thank you !", puis le score.

Merci d'avance. smile

2

Si tu veux qu'on t'aide il faudrait que tu explique ce que tu veux faire parce que
- Suivant la valeur de yesno, affiche "Yes, it is", ou "No, it isn't".
- Le prog attende qu'on appuie sur gauche ou droite, - si on ne réagit pas, la calto affiche "Thank you !"
ça ne veut rien dire
[prévention]Et ensuite, si tu ne sais pas comment on fait une boucle, achète toi un bouquin de C. Pour le reste, ce n'est que de la logique, alors...[/prévention]
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

3

Bon, je réxplique :

1°) Le prog choisit au pif une valeur entre 0 et 1
2°) Suivant cette valeur la calto affiche ("Yes it is" ou "No it isn't")
3°) C'est ensuite à l'utilisateur d'appuyer sur gauche ou droite pour contredire ce qui est écrit. (Il répond "Yes" si c'est écrit "No" et vice versa)
4°) Si l'utilisateur réagit trop tard, la calto affiche "Thank you" et on sort de la boucle.
5°) Si l'utilisateur répond pareil que la calto, on sort de la boucle.
6°) Quand on sort de la boucle, la calto affiche le score.

J'ai mis une boucle Do While mais à la compilation on me dit 'Parse error", alors que je respecte le nombre de crochets ( { et } ) confus

4

bah, deja poste ce que tu as fait si tu veux qu'on t'assiste
pasque parse error, c pas forcement du au nb d'accolades
(t'as verifié les ; ? (celui apres le while ?))
avatar

5

naPO... C'est un forum de "Prog C", ça sous-entend que tu sais déjà programmer en C... Comme dit GoldenCrystal, va déjà apprendre...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

- non rien -
avatar

7

Heu... C'est pas plutot dans le topic de lode runner que tu voulais répondre là ? grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

Bon, j'ai réussi à faire une boucle mais c'est pas fameux, c'est plutôt fumeux.

En attendant je laisse tomber ce topic.

9

vertyos > je crois aussi grin

naPO > vaut mieux que tu demande ce qui ne va pas trop dans ton code plutot que nouis demander de le faire a ta place
mais dans tous les cas, apprend le C grin
avatar

10

Alors juste des petits conseils:
-Evite d'indenter des parties de code, indente juste ce qu'il y a entre { ... }
-Pour détecter une touche utilise _keytest (touche) qui te permettera de faciliter la lecture comme if (_keytest (RR_ESC))... mais auparavant il faut désactiver certaines interruptions:

Voilà un programme vierge explicant comment désactiver les interruptions et donc pouvoir utiliser keytest.
INT_HANDLER OldInt1 = NULL;
INT_HANDLER OldInt5 = NULL;

void _main(void)
{
	//Sauvegarde et déasctive interruptions 1 et 5
                OldInt1 = GetIntVec (AUTO_INT_1);
	OldInt5 = GetIntVec (AUTO_INT_5);
	SetIntVec (AUTO_INT_1, DUMMY_HANDLER);
	SetIntVec (AUTO_INT_5, DUMMY_HANDLER);

                //Ton code
	
                //Restaure interruptions 1 et 5
	SetIntVec (AUTO_INT_5, OldInt5);
	SetIntVec (AUTO_INT_1, OldInt1);
}


Pour retourner un chiffre entre 0 et 1 il suffit de faire x=random (2);
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

11

Nan mais il débute en C, va pas lui expliquer ça! mur
De nos jours (grin) les gens ont beaucoup trop tendance à désactiver les interruptions pour rien, alors que c'est réservé aux jeux qui nécessitent d'être vraiment rapides (personnellement je ne les désactive qu'une fois le projet complètement terminé, ça évite de planter sa calc pour rien et facilite le déboguage)
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

12

Là c'est toi qui est dans l'erreur. Les interruptions doivent être désactivées dès le moment où ça devient nécéssaire. Et l'utilisation de _rowread & _keytest est un cas où c'est nécéssaire
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

13

Personnellement j'ai jamais eu d'erreur et ne les ai jamais désactivées qu'une fois le prog prêt à être distribué...
Là il n'a pas besoin de keytest ni de rowread, il veut juste tester si gauche ou droite est appuyé. C'est bien mieux et moins onéreux en ressources d'utiliser l'interface du TIOS pour cela; càd ngetchx et cie...
touche=ngetchx();
if (touche==KEY_LEFT) ...
Etcaetera...
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

14

Personnellement j'ai jamais eu d'erreur et ne les ai jamais désactivées qu'une fois le prog prêt à être distribué...
Tu as eu de la chance, c'est tout. _rowread & _keytest interfèrent avec l'interruption n°2 et un programme peut vite obtenir un comportement étrange, juste par le fait que tu n'aies pas désactivé les interruptions.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

15

geogeo: le coup de l'indentation, ce n'est que ton avis ...
son indentation est crade, mais ça m'arrive souvent d'indenter du code ...

16

Brunni: par exemple, reste appuyé pendant qq temps sur une touche genre gauche (si tu teste _keytest(RR_LEFT)) ca a des chances de te faire sortir de ton programme ...

17

Il sort du programme comme ça sans rien dire et revient sur l'écran HOME ou bien?
Que fait l'auto_int_2 de si spécial?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

18

Elle modifie le port qui contient la touche appuyée...
Pour l'indentation je peux comprendre mais bon chacun fait ce qu'il veut du temps qu'il ce repère rapidement dans le code...

Brunni> je lui est donné le conseil de _keytest pour lui faciliter la tâche car rowread il faut maitriser la matrice du clavier ce qui est déroutant pour débuter de plus désactiver les interruptions est indispensable ici et n'apporte rien de négatif à son programme sauf dans le cas où il utilise des fonctions qui ce base sur ses interruption comme l'affichage de BUSY, la barre de status...
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

19

Là je ne te parle pas de _rowread mais de ngetchx, qui me semble largement plus adapté dans son cas. Maintenant ce n'est que mon avis hein! smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

20

non C'est un jeu d'action, car en fait, on a moins de temps au fur et à mesure qu'on joue... D'où l'utilisation de _rowread...

21

(heu... action oui, mais à quel point! smile
Perso, j'utilise ngetchx() dans un casse-brique tournant normalement à 40 FPS, mais pouvant atteindre 500 FPS)
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22

Je croyais que ngetchx attendais obligatoirement l'appuie d'une touche? confus
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

23

C'est vrai. En fait je fais:
if (kbhit())
  touche=ngetchx();
else
  touche=0;
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

24

./13 > il faut ajouter genre un if (kbhit()) non ? parce que sinon ngetchx attend qu'on appuie sur une touche je crois

Edit : croisé grin
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

25

ah ok je comprend mieux. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

26

Ok, je le note nib merci !

27

Pour avoir des codes des touches compatibles entre TI-89/92+ (dans le même prog) tu peux utiliser ceci:
void getkey()
{
  ESI ptr=top_estack;
  push_getkey();
  return GetIntArg(ptr);
}

Et pour attendre une touche en basse consommation de piles et compatible avec getkey:
short atTouche()	{
  ESI argptr;
  while (!kbhit()) idle();
  push_getkey();
  argptr=top_estack;
  return GetIntArg(argptr);
}
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

28

Ta version n'est pas compatible en niveaux de gris ...

29

Voilà la mienne:
/* The trap 4 is not supposed to destroy ANY registers, but there are several
   buggy TSRs floating around which destroy some registers (notably - ahem,
   sorry :-/ - old versions of h220xTSR - the bug is fixed in v.1.11), so I am
   defining ALL registers as clobbered as a precaution */
#define calc_off() asm("trap #4":::"d0","d1","d2","d3","d4","d5","d6","d7","a0","a1","a2","a3","a4","a5","a6")

/* ngetchx() equivalent with support for APD, 2nd+ON, DIAMOND+ON and
   grayscale-compatible low-power mode */
short GetKeyInput(void)
{
  while (1) {
    pokeIO(0x600005,0b10111); /* low power mode, wake up CPU only on AI 1
                                 (grayscale), 2 (keypress), 3 (AMS clock), 5
                                 (AMS timer base, needed for APD) and 6 (ON,
                                 always wakes up the CPU) */
    /* Checking the APD here makes sure it will get checked at least each time
       AI1 or AI5 is triggered. */
    if (OSTimerExpired(APD_TIMER)) { // APD expired
      calc_off(); // turn calculator off
      OSTimerRestart(APD_TIMER); // restart APD
      continue; // reenter low power mode
    }
    if (!kbhit()) continue; // if no keypress, reenter low power mode
    OSTimerRestart(APD_TIMER); // restart APD
    unsigned short keypress=ngetchx();
    if (keypress == KEY_OFF /*2nd+ON*/ || keypress == KEY_OFF2 /*DIAMOND+ON*/)
      calc_off();
    else return keypress;
  }
}
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é

30

Perso, je serais plus pour ca (plus simple mais plus rapide) :
unsigned short GetKey(void)
{
 void           *kbq = kbd_queue();
 unsigned short  key=0;

 while (OSdequeue(&key, kbq))
       pokeIO(0x600005,0b10111);

 return key & ~(unsigned short)0x800;
}