150 lines
4.5 KiB
ObjectPascal
150 lines
4.5 KiB
ObjectPascal
unit utext;
|
|
|
|
interface
|
|
uses grafix;
|
|
|
|
procedure PutSprite(posX, posY, color, lletra : word);
|
|
{ Funci¢: Coloca un caracter en pantalla }
|
|
procedure PutString(posX, posY, color : word; frase : string);
|
|
{ Funci¢: Coloca una frase en pantalla }
|
|
procedure PutStringCENTERED(posY, color : word; frase : string);
|
|
{ Funci¢: Coloca una frase en pantalla i centrada horitzontalment }
|
|
procedure PutStringWINDOWED(posY, color : word; frase : string);
|
|
{ Funci¢: Coloca una frase dins d'una finestra centrada }
|
|
procedure cls(pant : word);
|
|
{ Funci¢: Borra la pantalla }
|
|
procedure PintaPantalla;
|
|
{ Funci¢: Pinta la pantalla }
|
|
procedure SetupVirtualText(var screen:ptr_pantalla;var virtual_addr:word);
|
|
{ Funci¢: Crea una pantalla virtual de text (2K) }
|
|
procedure TancarVirtualText(var screen:ptr_pantalla);
|
|
{ Funci¢: Tanca la pantalla virtual de text (2k) }
|
|
procedure HideCursor;
|
|
procedure ShowCursor;
|
|
implementation
|
|
uses crt, tipos;
|
|
|
|
{##############################################################}
|
|
procedure SetupVirtualText(var screen:ptr_pantalla;var virtual_addr:word);
|
|
begin
|
|
getmem(screen,2000);
|
|
virtual_addr:=seg(screen^);
|
|
end;
|
|
{##############################################################}
|
|
procedure TancarVirtualText(var screen:ptr_pantalla);
|
|
begin
|
|
freemem(screen,2000);
|
|
end;
|
|
{##############################################################}
|
|
procedure PutSprite(posX, posY, color, lletra : word);
|
|
var i : word;
|
|
begin
|
|
mem[$B800:((posX) shl 1)+(posY*80)]:=lletra;
|
|
mem[$B800:((posX) shl 1)+1+(posY*80)]:=color;
|
|
end;
|
|
{##############################################################}
|
|
procedure PutString(posX, posY, color : word; frase : string);
|
|
var i : word;
|
|
begin
|
|
for i:=0 to LENGTH(frase)-1 do
|
|
begin
|
|
mem[$B800:((i+posX) shl 1)+(posY*80)]:=ord(frase[i+1]);
|
|
mem[$B800:((i+posX) shl 1)+1+(posY*80)]:=color;
|
|
end;
|
|
end;
|
|
{##############################################################}
|
|
procedure PutStringCENTERED(posY, color : word; frase : string);
|
|
var i : word;
|
|
ini : word;
|
|
begin
|
|
ini := (40 - LENGTH(frase)) div 2;
|
|
for i:=0 to LENGTH(frase)-1 do
|
|
begin
|
|
mem[$B800:((i+ini) shl 1)+(posY*80)]:=ord(frase[i+1]);
|
|
mem[$B800:((i+ini) shl 1)+1+(posY*80)]:=color;
|
|
end;
|
|
end;
|
|
{##############################################################}
|
|
procedure PutStringWINDOWED(posY, color : word; frase : string);
|
|
var i : word;
|
|
ini : word;
|
|
ample : word;
|
|
begin
|
|
ini := (40 - LENGTH(frase)) div 2;
|
|
ample := LENGTH(frase) + 4;
|
|
for i:=0 to LENGTH(frase)-1 do
|
|
begin
|
|
mem[$B800:((i+ini) shl 1)+(posY*80)]:=ord(frase[i+1]);
|
|
mem[$B800:((i+ini) shl 1)+1+(posY*80)]:=color;
|
|
end;
|
|
|
|
for i:=0 to LENGTH(frase)+3 do
|
|
begin
|
|
mem[$B800:((i+ini-2) shl 1)+((posY-1)*80)]:=196;
|
|
mem[$B800:((i+ini-2) shl 1)+1+((posY-1)*80)]:=color;
|
|
|
|
mem[$B800:((i+ini-2) shl 1)+((posY+1)*80)]:=196;
|
|
mem[$B800:((i+ini-2) shl 1)+1+((posY+1)*80)]:=color;
|
|
end;
|
|
end;
|
|
{##############################################################}
|
|
procedure cls(pant : word);
|
|
var i : word;
|
|
begin
|
|
for i:=0 to 1999 do mem[pant:i]:=0;
|
|
end;
|
|
{##############################################################}
|
|
procedure PintaPantalla;
|
|
var i,j : word;
|
|
begin
|
|
for i:=0 to 39 do
|
|
for j:=0 to 24 do
|
|
begin
|
|
mem[pant1:(i shl 1)+(j*80)]:=mapa[i,j].tipo;
|
|
mem[pant1:(i shl 1)+1+(j*80)]:=mapa[i,j].color;
|
|
end;
|
|
|
|
{ pepe }
|
|
mem[pant1:((pepe.posX) shl 1)+(pepe.posY*80)]:=pepe.dibuix;
|
|
mem[pant1:((pepe.posX) shl 1)+(pepe.posY*80)+1]:=pepe.color;
|
|
|
|
{ malos }
|
|
mem[pant1:((malo[0].posX) shl 1)+(malo[0].posY*80)]:=malo[0].dibuix;
|
|
mem[pant1:((malo[0].posX) shl 1)+(malo[0].posY*80)+1]:=malo[0].color;
|
|
|
|
mem[pant1:((malo[1].posX) shl 1)+(malo[1].posY*80)]:=malo[1].dibuix;
|
|
mem[pant1:((malo[1].posX) shl 1)+(malo[1].posY*80)+1]:=malo[1].color;
|
|
|
|
mem[pant1:((malo[2].posX) shl 1)+(malo[2].posY*80)]:=malo[2].dibuix;
|
|
mem[pant1:((malo[2].posX) shl 1)+(malo[2].posY*80)+1]:=malo[2].color;
|
|
|
|
|
|
|
|
|
|
espera_VGA;espera_VGA;espera_VGA;espera_VGA;
|
|
move(mem[pant1:0], mem[$B800:0], 2000);
|
|
|
|
GotoXY(1,1); TextBackGround(Blue); TextColor(LightGray);
|
|
Write('LEVEL ', level:2, ' SCORE ', score:3, ' LIVES ', pepe.vides:1);
|
|
GotoXY(13,2);
|
|
Write('HI-SCORE ', hi_score:3, ' ', nom_hi_score);
|
|
|
|
inc(clock);
|
|
end;
|
|
{##############################################################}
|
|
procedure HideCursor;assembler;
|
|
asm
|
|
mov ax,0100h
|
|
mov cx,0100h
|
|
int 10h
|
|
end;
|
|
{##############################################################}
|
|
procedure ShowCursor;assembler;
|
|
asm
|
|
mov ax,0100h
|
|
mov cx,0607h
|
|
int 10h
|
|
end;
|
|
{##############################################################}
|
|
begin
|
|
end. |