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.