home *** CD-ROM | disk | FTP | other *** search
- unit
- unpismeno;
- interface
- uses
- obraz3d, unhejb;
- type __znak = array[0..7]of byte;
- __znaky = array[char]of __znak;
- __typ_sada = ^__znaky;
-
- type typ_pismeno = object(typ_hejbaci)
- ktere : char;
- sablona : __znak;
- velikost : integer;
-
- procedure vytvor(pismeno : char; _velikost : integer; _barva : bod_fyz_obrazu);
- procedure _zobraz; virtual;
- procedure _zhasni; virtual;
- procedure _presun_rel(_x, _y, _z : typ_souradnic);virtual;
- end;
-
- implementation
- uses
- dos;
-
- procedure typ_pismeno.vytvor;
- var reg : registers;
- sada : __typ_sada;
- i, j, k : word;
-
- function bitu(b : byte) : byte;
- var i, j, k : byte;
- begin
- j := 0;
- for i := 0 to 7 do
- if (b and (1 shl i)) <> 0 then inc(j);
- bitu := j;
- end;
-
- begin
- zhasni;
-
- reg.ax := $1130;
- reg.bh := $03;
- intr($10,reg); {zjisteni sady 8x8}
- sada := ptr(reg.es,reg.bp);
-
- sablona := sada^[pismeno];
-
- j := 0;
- for i := 0 to 7 do inc(j, bitu(sablona[i]));
-
- barva := _barva;
-
- velikost := _velikost;
-
- _get_mem_tvar(velikost*velikost*(j+1));
-
- end;
-
-
- procedure typ_pismeno._zobraz;
- var x, y, xp, yp, k : word;
-
- function jepix(x, y : word):boolean;
- begin
- jepix := (sablona[7-y] and (1 shl x)) <> 0
- end;
-
- begin
- k := 0;
- for y := 7 downto 0 do
- for x := 0 to 7 do
- if jepix(x, y) then
- begin
- for yp := 0 to velikost-1 do
- for xp := 0 to velikost-1 do
- begin
- set_bod_z(k, poloha.z);
- obrazovka.zobraz_bod_xy(poloha.x-x*velikost+xp, poloha.y-y*velikost+yp, dej_bod(k));
- inc(k);
- end;
- end;
- end;
-
- procedure typ_pismeno._zhasni;
- var x, y, xp, yp, k : word;
-
- function jepix(x, y : word):boolean;
- begin
- jepix := (sablona[7-y] and (1 shl x)) <> 0
- end;
-
- begin
- k := 0;
- for y := 7 downto 0 do
- for x := 0 to 7 do
- if jepix(x, y) then
- begin
- for yp := 0 to velikost-1 do
- for xp := 0 to velikost-1 do
- begin
- obrazovka.zhasni_bod_xy(poloha.x-x*velikost+xp, poloha.y-y*velikost+yp, dej_bod(k));
- inc(k);
- end;
- end;
- end;
-
-
- procedure typ_pismeno._presun_rel;
- var x, y, xp, yp, k : word;
- nx, ny, nz : typ_souradnic;
-
- function jepix(x, y : word):boolean;
- begin
- jepix := (sablona[y] and (1 shl x)) <> 0
- end;
-
- begin
- nx := poloha.x + _x;
- ny := poloha.y + _y;
- nz := poloha.z + _z;
- k := 0;
- for y := 0 to 7 do
- for x := 0 to 7 do
- if jepix(x, y) then
- begin
- for yp := 0 to velikost-1 do
- for xp := 0 to velikost-1 do
- begin
- obrazovka.zhasni_bod_xy(poloha.x-x*velikost+xp, poloha.y-y*velikost+yp, dej_bod(k));
-
- set_bod_z(k, nz);
- obrazovka.zobraz_bod_xy(nx-x*velikost+xp, ny-y*velikost+yp, dej_bod(k));
- inc(k);
- end;
- end;
- poloha.x := nx;
- poloha.y := ny;
- poloha.z := nz;
-
- end;
- end.
-
-
-
-
-
-