Le jeu que je vous propose est une adaptation pour Hp Prime 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.
Code : Tout sélectionner
//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;