HP Forums
Adaptation prgm DEFI - Printable Version

+- HP Forums (http://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP Prime Software Library (/forum-15.html)
+--- Thread: Adaptation prgm DEFI (/thread-8361.html)



Adaptation prgm DEFI - Tyann - 05-18-2017 05:32 AM

Bonjour

Le jeu que je vous propose est une adaptation d'un programme pour Hp 48 parût
dans HAUTE PERFORMANCE n°1 (1992).
Le but du jeu : l'écran est divisé en 9 parties rectangulaires (3*3), chaque chiffre (1-9)
correspond à une combinaison aléatoire de rectangle qui seront noircis.
A partir d'un écran blanc, il faut noircir les 9 zones, difficulté si une ou plusieurs
zones de l'écran déjà noircies correspondent avec la combinaison du chiffre joué
celles-ci redeviennent blanches.

0 efface l'écran, on peut voir la combinaison d'un chiffre en pressant 'SHIFT' avant.
Pour jouer la combinaison d'un chiffre appuyez sur la touche correspondante.
La solution est en 4 combinaisons maximum.
Appuyez sur 'HELP' pour avoir la première combinaison de la solution, puis les 2 premières
et ainsi de suite : à la quatrième c'est perdu.

'ESC' pour quitter la partie.
Bon amusement.

Hello

The game that I propose to you is an adaptation of a program for Hp 48 par
In HIGH PERFORMANCE n ° 1 (1992).
The goal of the game: the screen is divided into 9 rectangular parts (3 * 3), each digit (1-9)
Corresponds to a random combination of rectangle that will be blacked out.
From a white screen, you have to blacken the 9 zones, difficulty if one or more
Areas of the screen already blackened match with the combination of the number played
They become white again.

0 clears the screen, you can see the combination of a digit by pressing 'SHIFT' before.
To play the combination of a number press the corresponding key.
The solution is in 4 combinations maximum.
Press 'HELP' to get the first combination of the solution, then the first 2
And so on: to the fourth is lost.

'ESC' to exit the game.
Good fun.

Code:
//by Tyann
#pragma mode( separator(.,;) integer(h32) )
C_noir:=#0h;C_blanc:=#FFFFFF:32h;
C_gris:=#7D7D7D:32h;C_argent:=#CECECE:32h;

help(n,l)
BEGIN
 LOCAL s;
 n:=MIN(n+1,4);
 s:=l({1,n});
 BLIT_P(G2,G0);
 TEXTOUT_P(s,160-8*SIZE(s),116,5,C_gris);
 WAIT(2);
 BLIT_P(G0,G2);
 n;
END;
z_rect(n)
BEGIN
 CASE
  IF n==0 THEN INVERT_P(1,0,106,79); END;
  IF n==1 THEN INVERT_P(107,0,212,79); END;
  IF n==2 THEN INVERT_P(213,0,318,79); END;
  IF n==3 THEN INVERT_P(1,80,106,159); END;
  IF n==4 THEN INVERT_P(107,80,212,159); END;
  IF n==5 THEN INVERT_P(213,80,318,159); END;
  IF n==6 THEN INVERT_P(1,160,106,239); END;
  IF n==7 THEN INVERT_P(107,160,212,239); END;
  IF n==8 THEN INVERT_P(213,160,318,239); END;
 END;
END;
s_rect(n)
BEGIN
 LOCAL c:=C_gris;
 CASE
  IF n==0 THEN RECT_P(G1,0,0,19,19,c);END;
  IF n==1 THEN RECT_P(G1,20,0,39,19,c);END;
  IF n==2 THEN RECT_P(G1,40,0,59,19,c);END;
  IF n==3 THEN RECT_P(G1,0,20,19,39,c);END;
  IF n==4 THEN RECT_P(G1,20,20,39,39,c);END;
  IF n==5 THEN RECT_P(G1,40,20,59,39,c);END;
  IF n==6 THEN RECT_P(G1,0,40,19,59,c);END;
  IF n==7 THEN RECT_P(G1,20,40,39,59,c);END;
  IF n==8 THEN RECT_P(G1,40,40,59,59,c);END;
 END;
END;
c_rect(v,f)
BEGIN
 LOCAL i;
 RECT_P(G1,0,0,59,59,C_argent);
 FOR i FROM 0 TO 8 DO
  IF BITAND(v,2^i) THEN
   IF f THEN
    s_rect(i);
   ELSE
    z_rect(i);
   END; 
  END;
 END;//FOR
 IF f THEN
  BLIT_P(G2,G0);BLIT_P(G0,129,89,G1);
  WAIT(1);BLIT_P(G0,G2);
 END;
END;
combi()
BEGIN
 LOCAL i,n,m;
 LOCAL lc:={1,2,3,4,5,6,7,8,9},l:={{},{}};
 FOR i FROM 1 TO 9 DO 
  m:=IFTE(i==4,511,RANDINT(511));
  l(1,i):=BITXOR(n,m);n:=m;
  l(2,i):=lc(RANDINT(1,SIZE(lc)));
  lc:=remove(l(2,i),lc); 
 END;
 l;
END;
g_key()
BEGIN
 LOCAL k,p,l:={42,43,44,37,38,39,32,33,34,47,41,3,4};
 WHILE p==0 DO
  k:=GETKEY;p:=POS(l,k);
 END;
 p; 
END;

EXPORT DEFI()
BEGIN
 LOCAL l,i,c,b,v,s,q,m;
 LOCAL h;
 DIMGROB_P(G1,60,60);
 DIMGROB_P(G2,320,240);
 RECT_P();
 l:=combi();
 REPEAT 
  c:=g_key();
  CASE
   IF c==10 THEN RECT_P();b:=0;s:=0;END;
   IF c==11 THEN s:=1;END;
   IF c==12 THEN h:=help(h,l(2));q:=(h=4);END;
   IF c==13 THEN 
    BLIT_P(G2,G0); 
    q:=MSGBOX("Quitter la partie ?",1);
    BLIT_P(G0,G2);
   END;
   DEFAULT
    v:=l(1,POS(l(2),c));c_rect(v,s);
    b:=IFTE(s,b,BITXOR(b,v));s:=0;
  END;
 UNTIL b==511  OR q;
 m:=IFTE(q,"PERDU","BRAVO"); 
 TEXTOUT_P(m,120,110,6,C_gris);
 WAIT(3);
 DIMGROB_P(G1,0,0);DIMGROB_P(G2,0,0);
END;