# Juegos

A Short Tetris program, published by Cyrille de Brévisson.

DoesNotFit(game, piece, p) // return true if piece does not fit

begin

local j;

if game(im(p), re(p)) then return 1; end;

for j:=1 to size(piece) do

p:= p+piece(j);

if game(im(p), re(p)) then return 1; end;

end;

return 0;

end;

EXPORT Tetris()

BEGIN

local game= makemat(J=1 or J=12 or I=1 or I=25,25,12), pause=0.200, score= 0;

local shapes= {{(1, 0), (0, 1), (-1, 0)},

{(1, 0), (0, 1), (1, 0)},

{(-1, 0), (0, 1), (-1, 0)},

{(1, 0), (1, 0), (0, 1)},

{(-1, 0), (-1, 0), (0, 1)},

{(1, 0), (1, 0), (-1, 1)},

{(1, 0), (1, 0), (1, 0)}}; // Bar

while 1 do

local piece=shapes(randint(6)+1), p=(5,2), i, j; // get a random piece

if DoesNotFit(game, piece, p) then return score; end; // test if we lose

// create background

dimgrob_p(G1, 320, 240);

dimgrob_p(G2, 320, 240);

line_p(G1,99, 0, 99, 232, #FF); line_p(G1, 99, 232, 202, 232, #FF); line_p(G1,202, 232, 202, 0, #FF);

for i:=1 to 23 do

for j:=1 to 10 do

if game(i+1,j+1) then rect_p(G1, j*10+91, i*10-9, j*10+100, i*10, #0); end;

end;

end;

while NOT DoesNotFit(game, piece, p) do

// Draw the background on back buffer

blit_p(G2, G1);

// draw the piece

i:=p;

rect_p(G2, i*10-(-81,19), i*10-(-90,10), #0);

for j:=1 to size(piece) do

i:= i+piece(j);

rect_p(G2, i*10-(-81,19), i*10-(-90,10), #0);

end;

// draw backbuffer on screen

blit_p(G2);

// pause

wait(pause);

// keys?

if IsKeyDown(37) then if NOT DoesNotFit(game, piece, p-1) then p:= p-1; end; end;

if IsKeyDown(39) then if NOT DoesNotFit(game, piece, p+1) then p:= p+1; end; end;

if IsKeyDown(33) then

local rotate= piece*(0, 1);

if NOT DoesNotFit(game, rotate, p) then piece:= rotate; end;

end;

// try to go down...

if DoesNotFit(game, piece, p+(0,1)) then break; else p:= p+(0,1); end;

end;

// put piece in game!

game(im(p), re(p)):= 1;

for j:=1 to size(piece) do

p:= p+piece(j);

game(im(p), re(p)):=1;

end;

// remove lines?

for i:=24 downto 2 do

if game(i)=[1,1,1,1,1,1,1,1,1,1,1,1] then

for j:=i-1 downto 2 do game(j+1):= game(j); end;

game(2):= [1,0,0,0,0,0,0,0,0,0,0,1];

score:= score+1;

i:= i+1;

end;

end;

// faster!

pause:= pause-0.001;

end;

END;

The first Angry Birds program for the HP Prime, by Mic:

EXPORT ANGRY_BIRDS()
BEGIN
//By Mickaël Nicotera
local touch;
LOCAL X,Y,A,B,C,S,T,E;
LOCAL W,G,H,J;
LOCAL L1,L2;

S:=0; E:=10; L1:={1,1,1}; L2:={#78FF37h,#303030h}; W:=1; G:=RANDOM(60,170); H:=RANDOM(60,170); J:=RANDOM(60,170);

WHILE E>0 DO

IF irem(S,30)==0 AND S>29 AND E<>10-W THEN W:=W+1; E:=10-W; L1:={1,1,1}; G:=RANDOM(60,170); H:=RANDOM(60,170); J:=RANDOM(60,170); END;

X:=0; Y:=190;

DIMGROB_P(G1,320,220); RECT_P(G1,RGB(73,194,255)); RECT_P(G1,20,200,60,240,RGB(127,70,0),RGB(127,70,0)); FOR I FROM 1 TO 6 DO ARC_P(G1,40,193,7-I,0,360,RGB(244,30,30)); END; FOR I FROM 0 TO 2 DO LINE_P(G1,43,189+I,51,189+I,RGB(255,161,1)); END;

RECT_P(G1,200,G,240,240,RGB(127,70,0),RGB(127,70,0)); FOR I FROM 1 TO 6 DO ARC_P(G1,220,G-6,7-I,0,360,L2(L1(1))); END; RECT_P(G1,240,H,280,240,RGB(127,70,0),RGB(127,70,0)); FOR I FROM 1 TO 6 DO ARC_P(G1,260,H-6,7-I,0,360,L2(L1(2))); END; RECT_P(G1,280,J,320,240,RGB(127,70,0),RGB(127,70,0)); FOR I FROM 1 TO 6 DO ARC_P(G1,300,J-6,7-I,0,360,L2(L1(3))); END;

TEXTOUT_P("Tries = "+E,G1,200,7,1,RGB(255,244,43)); TEXTOUT_P("Score = "+S,G1,250,7,1,RGB(255,244,43)); TEXTOUT_P("ANGRY BIRDS",G1,80,7,3,RGB(255,255,255)); TEXTOUT_P("Power ",G1,25,22,1,RGB(255,0,0)); TEXTOUT_P("By Mic ",G1,138,22,1,RGB(255,255,255));

TEXTOUT_P("Level "+W,G1,118,198,1,RGB(255,255,255));

WHILE ISKEYDOWN(30)<>1 do blit_p(G0,G1,0,0);

touch:=mouse();

LINE_P(52,190,72,Y-20); RECT_P(20,10,20+iquo(X,6),20,RGB(255,0,0),RGB(255,0,0)); WAIT(0.1);

if size(touch(1)) then

IF touch(1,5)==2 THEN

X:=B&#8594;R(touch(1,1)); Y:=B&#8594;R(touch(1,2));

LINE_P(52,190,72,Y-20);

RECT_P(20,10,20+iquo(X,6),20,RGB(255,0,0),RGB(255,0,0));

end; end;

END;

A:=0.008-(230-Y)/70000; B:=2.71+(40-Y)/500+(X-50)/500; C:=305-X/10; T:=0; E:=E-1; TEXTOUT_P("Score = "+S,G1,250,7,1,RGB(255,244,43));

IF (G-19<A*220^2-B*220+C<G+6) AND L1(1)<>2 THEN S:=S+10; L1(1):=2; END; IF (H-19<A*260^2-B*260+C<H+6) AND L1(2)<>2 THEN S:=S+10; L1(2):=2; END; IF (J-19<A*300^2-B*300+C<J+6) AND L1(3)<>2 THEN S:=S+10; L1(3):=2; END;

M:=51; N:=189; FOR I FROM 1 TO 30 DO TEXTOUT_P("o",M,N,1,RGB(255,41,38)); M:=M+10; N:=A*M^2-B*M+C; WAIT(0.2); END;

END;

MSGBOX("Score = "+S);

END;

A small Mastermind Program, by Tony Gallo. (Here is a link to the download with the manual:

FilledCircle();

ShowResult();

GuessComplete();

BoxSelectedColor();

ShowSolution();

EXPORT Mastermind()

//Mastermind v1.0

//Tony Gallo

//tgallo@tbaytel.com

BEGIN

local touch;

LOCAL X,Y;

local ColorX;

local Solution, Guess, SolFlag;

local SolColor, PegColor;

local G;

local B, W;

local I, J;

local choice;

local startcol;

local key;

local message;

CHOOSE(choice, "Allow Vacant Pegs?", "Yes", "No");

if choice==1 then

startcol:=0;

else

startcol:=1;

end;

//generate solution

Solution:={0,0,0,0};

FOR I FROM 1 to 4 DO

Solution(I) := RANDINT(startcol,6);

END;

//clear screen

RECT_P(0,0,319,239,0,RGB(142,142,142));

//credits

TEXTOUT_P("MASTERMIND",10,5,2,RGB(0,0,0));

TEXTOUT_P("v1.0   2013",10,16,1,RGB(0,0,0));

TEXTOUT_P("by Tony Gallo",10,26,1,RGB(0,0,0));

//top rectangle

RECT_P(95,5,220,35,0,RGB(185,135,105));

//game board

RECT_P(10,70,310,225,0,RGB(185,135,105));

LINE_P(10,195,310,195,RGB(0,0,0));

//lines and circles

FOR X:=1 to 10 DO

LINE_P(30*X+10,70,30*X+10,225,RGB(0,0,0));

FOR Y:= 1 to 4 DO

ARC_P(30*X-5,30*Y+60,10,RGB(0,0,0));

END;

ARC_P(30*X-10,205,3,RGB(0,0,0));

ARC_P(30*X,205,3,RGB(0,0,0));

ARC_P(30*X-10,215,3,RGB(0,0,0));

ARC_P(30*X,215,3,RGB(0,0,0));

END;

//position pointer

TEXTOUT_P("▲",20,222,5,RGB(207,3,124));

//selected colour

TEXTOUT_P("Selected Color:",12,50,2,RGB(0,0,0));

if choice==1 then

//unselected - brown - 0

FilledCircle(120,53,10,RGB(185,135,105));

ARC_P(120,53,10,RGB(0,0,0));

TEXTOUT_P("CLR",112,49,1,RGB(75,0,130));

end;

//red - 1

FilledCircle(150,53,10,RGB(255,0,0));

//green - 2

FilledCircle(180,53,10,RGB(0,255,0));

//blue - 3

FilledCircle(210,53,10,RGB(0,0,255));

//yellow - 4

FilledCircle(240,53,10,RGB(255,244,43));

//black - 5

FilledCircle(270,53,10,RGB(0,0,0));

//white - 6

FilledCircle(300,53,10,RGB(255,255,255));

//set default color

ColorX := 1;

//draw box

LINE_P(105+(ColorX*30),40,135+(ColorX*30),40,RGB(0,0,0));

LINE_P(105+(ColorX*30),66,135+(ColorX*30),66,RGB(0,0,0));

LINE_P(105+(ColorX*30),40,105+(ColorX*30),66,RGB(0,0,0));

LINE_P(135+(ColorX*30),40,135+(ColorX*30),66,RGB(0,0,0));

G:=1;

Guess:={0,0,0,0};

message:=0;

WHILE ISKEYDOWN(4)<>1 do

wait(.1);

touch:=mouse();

key:=-1;

key:=getkey;

if (key >=0 or size(touch(1))) and message==1 then

RECT_P(225,5,300,35,RGB(142,142,142),RGB(142,142,142));

message:=0;

end;

//color selecting using  left and right

if key==7 and ((choice==1 and ColorX>=1) or (choice==2 and ColorX>=2)) then

ColorX:=ColorX-1;

BoxSelectedColor(ColorX);

continue;

end;

if key==8 and ColorX<=5 then

ColorX:=ColorX+1;

BoxSelectedColor(ColorX);

continue;

end;

//Guessing

if key==30 then

//if no vacant pegs alowed make sure none are vacant

if choice==2 and (Guess(1)==0 or Guess(2)==0 or Guess(3)==0 or Guess(4)==0) then

TEXTOUT_P("No vacant pegs",230,10,1,RGB(0,0,0));

TEXTOUT_P("allowed.",242,22,1,RGB(0,0,0));

message:=1;

continue;

end;

//analyse

B:=0;

W:=0;

SolFlag:={0,0,0,0};

//look for exact matches

FOR I FROM 1 TO 4 DO

if Guess(I)==Solution(I) then

B:=B+1;

Guess(I):=7; //flagged

SolFlag(I):=1; //flagged

end;

END;

//look for right colour wrong spot

FOR I FROM 1 TO 4 DO

if Guess(I)<>7 then

FOR J FROM 1 TO 4 DO

if SolFlag(J)==0 AND Guess(I)==Solution(J) then

W:=W+1;

Guess(I):=7;

SolFlag(J):=1;

end;

END;

end;

END;

Guess:={0,0,0,0};

//place black and white pegs

FOR I FROM 1 to B DO

ShowResult(I, RGB(0,0,0),G);

END;

FOR I FROM B+1 to B+W DO

ShowResult(I, RGB(255,255,255),G);

END;

if B==4 then

TEXTOUT_P("You win!",250,16,2,RGB(0,0,0));

ShowSolution(Solution);

break;

end;

if G==10 then

TEXTOUT_P("You lose!",250,16,2,RGB(0,0,0));

ShowSolution(Solution);

break;

end;

G:=G+1;

RECT_P(10,230,310,235,RGB(142,142,142));

TEXTOUT_P("▲",(30*(G-1))+20,222,5,RGB(207,3,124));

continue;

end;

if size(touch(1)) then

if  touch(1,5)==0 then

X:=B→R(touch(1,1));

Y:=B→R(touch(1,2));

//color selector

if 110<=X<=310 and 43<=Y<=63 THEN

if 110<=X<=130 and choice==1 then ColorX := 0 END; //unselected - brown

if 140<=X<=160 then ColorX := 1  END; //red

if 170<=X<=190 then ColorX := 2  END; //green

if 200<=X<=220 then ColorX := 3  END; //blue

if 230<=X<=250 then ColorX := 4  END; //yellow

if 260<=X<=280 then ColorX := 5  END; //black

if 290<=X<=310 then ColorX := 6  END; //white

BoxSelectedColor(ColorX);

continue;

END;

//placing pegs

if (30*(G-1))+10<=X<=(30*(G-1))+40 and 80<=Y<=190 THEN

if ColorX == 0 then PegColor:=RGB(185,135,105) END;

if ColorX == 1 then PegColor:=RGB(255,0,0) END;

if ColorX == 2 then PegColor:=RGB(0,255,0) END;

if ColorX == 3 then PegColor:=RGB(0,0,255) END;

if ColorX == 4 then PegColor:=RGB(255,244,43) END;

if ColorX == 5 then PegColor:=RGB(0,0,0) END;

if ColorX == 6 then PegColor:=RGB(255,255,255) END;

if 80<=Y<=100 then

Guess(4):=ColorX;

FilledCircle((30*(G-1))+25,90,9,PegColor);

continue;

END;

if 110<=Y<=130 then

Guess(3):=ColorX;

FilledCircle((30*(G-1))+25,120,9,PegColor);

continue;

END;

if 140<=Y<=160 then

Guess(2):=ColorX;

FilledCircle((30*(G-1))+25,150,9,PegColor);

continue;

END;

if 170<=Y<=190 then

Guess(1):=ColorX;

FilledCircle((30*(G-1))+25,180,9,PegColor);

continue;

END;

END;

end;

end;

END;

wait();

END;

begin

local I;

FOR I FROM 0 TO Radius DO

ARC_P(X,Y,I,Color);

END;

end;

ShowResult(I, Color, G)

begin

if I==1 then FilledCircle(30*G-10,205,2,Color); end;

if I==2 then FilledCircle(30*G,205,2,Color);  end;

if I==3 then FilledCircle(30*G-10,215,2,Color); end;

if I==4 then FilledCircle(30*G,215,2,Color); end;

end;

BoxSelectedColor(ColorX)

begin

//clear old box wherever it may be

LINE_P(105,40,315,40,RGB(142,142,142));

LINE_P(105,66,315,66,RGB(142,142,142));

FOR I FROM 0 to 8 DO

LINE_P(105+(I*30),40,105+(I*30),66,RGB(142,142,142));

END;

//draw box

LINE_P(105+(ColorX*30),40,135+(ColorX*30),40,RGB(0,0,0));

LINE_P(105+(ColorX*30),66,135+(ColorX*30),66,RGB(0,0,0));

LINE_P(105+(ColorX*30),40,105+(ColorX*30),66,RGB(0,0,0));

LINE_P(135+(ColorX*30),40,135+(ColorX*30),66,RGB(0,0,0));

end;

ShowSolution(Solution)

begin

local SolColor;

FOR I FROM 1 to 4 DO

if Solution(I) == 0 then SolColor:=RGB(185,135,105) END; //unselected - brown

if Solution(I) == 1 then SolColor:=RGB(255,0,0) END; //red

if Solution(I) == 2 then SolColor:=RGB(0,255,0) END; //green

if Solution(I) == 3 then SolColor:=RGB(0,0,255) END; //blue

if Solution(I) == 4 then SolColor:=RGB(255,244,43) END; //yellow

if Solution(I) == 5 then SolColor:=RGB(0,0,0) END; //black

if Solution(I) == 6 then SolColor:=RGB(255,255,255) END; //white

ARC_P(82+(I*30),20,10,RGB(0,0,0));

FilledCircle(82+(I*30),20,9,SolColor);

END;

end;