[FONT='Calibri','sans-serif']unit Ucjuego;[/font]
[FONT='Calibri','sans-serif']interface
uses
sysutils,Graphics;
const
Pared = '1';
Manzana ='7' ;
Bicho = '2' ;
Camino = '0' ;[/font]
[FONT='Calibri','sans-serif'] arriba = 12;
abajo=33;
izquierda=44;
derecha=77;
type
juego = class
p: array[1..20 , 1..20] of char;
BX,BY:integer;
CX,CY:integer;
puntos,nivel:integer;
constructor crear;
procedure cargarplano(nro:integer);
procedure pintarpieza(F,C:integer; Pant:tcanvas);
procedure pintarplano(pant:tcanvas);
function escamino(f,c:integer):boolean;
function espared(f,c:integer):boolean;
function esmanzana(f,c:integer):Boolean;
procedure jugar( tecla: integer; pant:tcanvas);
end;
implementation
constructor juego.crear;
begin
Puntos := 0;
Nivel := 1;
Cx:= 50; Cy:= 50;
end;
procedure juego.cargarplano( nro: integer);
var
f:textfile;
linea,sn:string;
i:integer;
ex:boolean;
PROCEDURE ASIGNARLINEA(FILA:INTEGER;CAD:STRING);
var i : integer;
BEGIN
FOR I:=1 TO LENGTH(CAD) DO
P[FILA,I]:=CAD[i];
END;
begin
assignfile(f,'C:\planos.txt');
reset(f);
sn:=inttoStr(nro);
ex:=true;
sn:='*'+sn;
while (not eof (f)) and (ex=true) do
begin
readln(f,linea);
if sn=linea then
begin
for i := 1 to 10 do
begin
Readln(f,linea);
asignarlinea(i,linea);
end;
readln(f,bx);
readln(f,by);
ex:=false;
end;
end;
closefile(f);
end;[/font]
[FONT='Calibri','sans-serif']procedure juego.pintarpieza(F,C: Integer; Pant: TCanvas);
var x,y:integer;
fig : char;
begin
x:= cx+(c-1) * 30;
y:= cy+(f-1) * 30;
fig:= p[f,c];
if fig = pared then
begin
pant.Brush.Color:=clLime;
pant.Pen.Color:=clblack;
pant.Rectangle(x , y, x+30 , y+30);
pant.Brush.Color:=clBlack;
pant.Pen.Color:=clblack;
pant.Rectangle(x+5, y+4, x+26, y+25);
end;
if fig = bicho then
begin
pant.Brush.Color:=clyellow;
pant.Pen.Color:=clblack;
pant.Ellipse(x,y,x+30,y+30);
pant.Font.Color:=clblue;
pant.TextOut(x+5,y+5,('^o^'));
pant.Brush.Color:=clblack;[/font]
[FONT='Calibri','sans-serif'] end;
if fig = manzana then
begin
pant.Brush.Color:=clRed;
pant.Pen.Color:=clblack;
pant.Ellipse(x+4,y+5,x+28,y+30);
pant.Brush.Color:=clblack;
pant.Pen.Color:=clblack;
pant.Ellipse(x+9,y+9,x+13,y+13);
end;
if fig=camino then
begin
pant.pen.color:=clblue;
pant.rectangle(x,y,x+30,y+30);
pant.rectangle(x+2,y+2,x+28,y+28);
end;[/font]
[FONT='Calibri','sans-serif']
end;
procedure juego.pintarplano(pant: TCanvas);
var f,c:integer;
begin
for f := 1 to 10 do
for c := 1 to 10 do
pintarpieza(f,c,pant) ;
end;
function juego.escamino(f, c: integer): boolean;
begin
escamino:=p[f,c]=camino;
end;
function juego.esmanzana(f, c: integer): Boolean;
begin
esmanzana:=p[f,c]=manzana;
end;
function juego.espared(f, c: integer): boolean;
begin
espared:=p[f,c]=pared;
end;
procedure juego.jugar(tecla: integer; pant: tcanvas);
begin
if tecla=derecha then
begin
if (escamino(by,bx+1)) then
begin
p[by,bx]:=camino;
p[by,bx+1]:=bicho;
pintarpieza(by,bx,pant);
pintarpieza(by,bx+1,pant);
bx:=bx+1;
end
else
begin
if (esmanzana(by,bx+1)) then
begin
p[by,bx]:=camino;
p[by,bx+1]:=bicho;
pintarpieza(by,bx,pant);
pintarpieza(by,bx+1,pant);
bx:=bx+1;
puntos:=puntos+1;
end;
end;
end;
if tecla=izquierda then
begin
if (escamino(by,bx-1)) then
begin
p[by,bx]:=camino;
p[by,bx-1]:=bicho;
pintarpieza(by,bx,pant);
pintarpieza(by,bx-1,pant);
bx:=bx-1;
end
else
begin
if (esmanzana(by,bx-1)) then
begin
p[by,bx]:=camino;
p[by,bx-1]:=bicho;
pintarpieza(by,bx,pant);
pintarpieza(by,bx-1,pant);
bx:=bx-1;
puntos:=puntos+1;
end;
end;
end;
if tecla=arriba then
begin
if (escamino(by+1,bx)) then
begin
p[by,bx]:=camino;
p[by+1,bx]:=bicho;
pintarpieza(by,bx,pant);
pintarpieza(by+1,bx,pant);
by:=by+1;
end
else
begin
if (esmanzana(by+1,bx)) then
begin
p[by,bx]:=camino;
p[by+1,bx]:=bicho;
pintarpieza(by,bx,pant);
pintarpieza(by+1,bx,pant);
by:=by+1;
puntos:=puntos+1;
end;
end;
end;
if tecla=abajo then
begin
if (escamino(by-1,bx)) then
begin
p[by,bx]:=camino;
p[by-1,bx]:=bicho;
pintarpieza(by,bx,pant);
pintarpieza(by-1,bx,pant);
by:=by-1;
end
else
begin
if (esmanzana(by-1,bx)) then
begin
p[by,bx]:=camino;
p[by-1,bx]:=bicho;
pintarpieza(by,bx,pant);
pintarpieza(by-1,bx,pant);
by:=by-1;
puntos:=puntos+1;
end;
end;
end;
end;
end.
[/font]