home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 9
/
CD_ASCQ_09_1193.iso
/
news
/
557
/
animate
/
animdemo.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-09-03
|
15KB
|
381 lines
{┌───────────────────────────────────────────────────────────────────────────┐
│ ANIMAGE: Unité pour Turbo Pascal permettant d'animer des sprites, de faire│
│ des scrolls, zooms, cyclages, splits, en VGA 256 couleurs. │
│ │
│ Info...: Ce package est un produit shareware qui ne doit pas être modifié.│
│ Si vous en obtenez entière satisfaction ou si vous l'utilisez │
│ souvent, effectuez donc votre contrat moral en envoyant un chèque│
│ de 50FF (vous recevrez une licence d'utilisation) à l'adresse: │
│ │
│ Patrick RUELLE │
│ 163 rue de Charonne │
│ 75011 Paris │
│ (France) │
│ │
│ CE FICHIER CONTIENT LE PROGRAMME "ANIMDEMO" UTILISANT L'UNITE "ANIMAGE". │
└───────────────────────────────────────────────────────────────────────────┘}
{$R-,V-,A+}
PROGRAM ANIMDEMO;
USES Crt,Animage;
CONST
bar_couls:Array[1..4,1..27] Of Byte=
((2,46,2,11,51,11,22,54,22,35,58,35,49,63,49,35,58,35,22,54,22,11,51,11,2,
4,6),(58,54,0,59,56,11,60,59,22,61,61,34,63,63,46,61,61,34,60,59,22,59,56,
11,58,54,0),(8,8,63,18,18,63,28,28,63,37,37,63,48,48,63,37,37,63,28,28,63,
18,18,63,8,8,63),(63,25,50,63,30,51,63,35,53,63,40,54,63,46,56,63,40,54,
63,35,53,63,30,51,63,25,50));
pal_couls:Array[0..140] Of Byte=
(60,60,60,51,51,51,41,41,41,31,31,31,41,41,41,31,31,31,21,21,21,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47,52,47,39,43,39,35,39,35,27,
31,27,23,27,23,15,19,15,11,15,11,21,63,21,16,58,16,11,54,11,7,50,7,4,46,4,
1,42,1,0,38,0,63,50,58,63,44,56,63,39,54,63,34,52,63,29,50,63,24,48,63,19,
47,63,63,21,60,59,16,58,56,12,55,52,8,53,49,5,50,45,2,48,42,0,0,0,0,0,0,0,
63,63,63);
texte:Array[1..78] Of Word=
(16,32,152,152,32,232,24,32,96,112,232,160,152,64,88,64,144,32,232,88,0,
232,120,88,160,120,0,136,152,232,24,32,144,232,40,112,104,16,152,64,112,
104,104,0,88,64,152,32,144,232,24,32,232,88,232,160,104,64,152,32,232,0,
104,64,96,0,48,32,232,232,232,232,232,232,232,232,232,232);
titre1:Array[1..13] Of Word=
(24,32,96,112,104,144,152,136,0,152,64,112,104);
titre2:Array[1..7] Of Word=
(0,104,64,96,0,48,32);
fonte:Array[0..1679] Of Byte=
(0,0,211,211,210,209,0,0,0,212,211,211,210,209,0,0,0,0,211,211,210,209,0,
0,0,212,211,211,210,209,0,0,0,0,211,211,210,209,209,0,0,0,211,211,210,209,
209,0,0,0,211,211,210,209,0,0,0,212,211,211,0,0,209,0,0,0,211,211,210,0,0,
0,0,0,0,211,210,209,0,0,0,212,211,211,0,0,209,0,0,212,211,211,0,0,0,0,0,0,
211,211,0,209,0,0,0,0,211,211,210,209,0,0,0,0,211,211,210,209,0,0,0,212,
211,211,210,209,0,0,0,0,211,211,210,209,0,0,0,212,211,211,210,209,0,0,0,0,
211,211,210,209,0,0,0,212,211,211,210,209,0,0,0,212,211,211,0,0,209,0,0,
212,211,211,0,0,209,0,0,212,0,211,0,209,209,0,0,212,211,211,0,0,209,0,0,
212,211,211,0,0,209,0,0,212,211,211,210,209,209,0,0,0,248,247,246,246,0,0,
0,0,234,233,232,232,0,0,0,0,241,240,239,239,0,0,0,0,0,0,0,0,0,0,0,212,212,
211,211,210,210,0,0,212,212,211,0,0,210,0,0,212,212,211,0,0,210,0,0,212,
212,211,0,0,210,0,0,212,212,211,0,0,0,0,0,212,212,211,0,0,0,0,0,212,212,
211,0,0,210,0,0,212,212,211,0,0,210,0,0,0,212,211,211,0,0,0,0,0,0,211,211,
210,0,0,0,212,212,211,0,0,210,0,0,212,212,211,0,0,0,0,0,212,212,211,211,
210,210,0,0,212,212,211,0,0,210,0,0,212,212,211,0,0,210,0,0,212,212,211,0,
0,210,0,0,212,212,211,0,0,210,0,0,212,212,211,0,0,210,0,0,212,212,0,0,0,
210,0,0,0,212,211,211,0,0,0,0,212,212,211,0,0,210,0,0,212,212,211,0,0,210,
0,0,212,0,211,0,210,210,0,0,212,212,211,0,0,210,0,0,212,212,211,0,0,210,0,
0,0,0,0,211,210,210,0,0,250,249,248,247,246,246,0,0,236,235,234,233,232,
232,0,0,243,242,241,240,239,239,0,0,0,0,0,0,0,0,0,0,215,0,0,211,211,210,0,
0,215,212,212,0,0,210,0,0,215,212,212,0,0,0,0,0,215,212,212,0,0,210,0,0,
215,212,212,0,0,0,0,0,215,212,212,0,0,0,0,0,215,212,212,0,0,0,0,0,215,212,
212,0,0,210,0,0,0,212,212,211,0,0,0,0,0,0,212,211,211,0,0,0,215,212,212,0,
0,210,0,0,215,212,212,0,0,0,0,0,215,212,0,211,0,210,0,0,215,212,212,0,0,
210,0,0,215,212,212,0,0,210,0,0,215,212,212,0,0,210,0,0,215,212,212,0,0,
210,0,0,215,212,212,0,0,210,0,0,215,212,212,211,0,0,0,0,0,212,212,211,0,0,
0,0,215,212,212,0,0,210,0,0,215,212,212,0,0,210,0,0,215,0,212,0,211,210,0,
0,215,212,212,0,0,210,0,0,215,212,212,0,0,210,0,0,0,0,0,211,211,0,0,251,
251,250,249,248,247,246,246,237,237,236,235,234,233,232,232,244,244,243,
242,241,240,239,239,0,0,0,0,0,0,0,0,0,215,0,0,212,211,211,0,0,215,215,212,
212,211,0,0,0,215,215,212,0,0,0,0,0,215,215,212,0,0,211,0,0,215,215,212,
212,211,0,0,0,215,215,212,212,211,0,0,0,215,215,212,0,0,0,0,0,215,215,212,
212,211,211,0,0,0,215,212,212,0,0,0,0,0,0,212,212,211,0,0,0,215,215,212,
212,211,0,0,0,215,215,212,0,0,0,0,0,215,215,0,212,0,211,0,0,215,215,212,0,
0,211,0,0,215,215,212,0,0,211,0,0,215,215,212,212,211,0,0,0,215,215,212,0,
0,211,0,0,215,215,212,212,211,0,0,0,0,215,212,212,211,0,0,0,0,215,212,212,
0,0,0,0,215,215,212,0,0,211,0,0,0,215,212,212,211,0,0,0,215,0,212,0,211,
211,0,0,0,215,212,212,211,0,0,0,0,215,212,212,211,211,0,0,0,0,212,212,0,0,
0,252,251,251,250,249,248,247,246,238,237,237,236,235,234,233,232,245,244,
244,243,242,241,240,239,0,0,0,0,0,0,0,0,0,214,215,215,212,212,211,0,0,214,
215,215,0,0,211,0,0,214,215,215,0,0,0,0,0,214,215,215,0,0,211,0,0,214,215,
215,0,0,0,0,0,214,215,215,0,0,0,0,0,214,215,215,0,212,211,0,0,214,215,215,
0,0,211,0,0,0,215,215,212,0,0,0,0,0,0,215,212,212,0,0,0,214,215,215,0,0,
211,0,0,214,215,215,0,0,0,0,0,214,215,0,212,0,211,0,0,214,215,215,0,0,211,
0,0,214,215,215,0,0,211,0,0,214,215,215,0,0,0,0,0,214,215,215,0,0,211,0,0,
214,215,215,0,0,211,0,0,0,0,215,212,212,211,0,0,0,215,215,212,0,0,0,0,214,
215,215,0,0,211,0,0,0,215,215,212,212,0,0,0,214,0,215,0,212,211,0,0,214,
215,215,0,0,211,0,0,0,0,215,212,212,0,0,0,0,215,215,0,0,0,0,252,252,251,
251,250,249,248,247,238,238,237,237,236,235,234,233,245,245,244,244,243,
242,241,240,0,0,0,0,0,0,0,0,0,214,0,0,215,212,212,0,0,214,214,215,0,0,212,
0,0,214,214,215,0,0,212,0,0,214,214,215,0,0,212,0,0,214,214,215,0,0,0,0,0,
214,214,215,0,0,0,0,0,214,214,215,0,0,212,0,0,214,214,215,0,0,212,0,0,0,
214,215,215,0,0,0,0,214,0,215,215,212,0,0,0,214,214,215,0,0,212,0,0,214,
214,215,0,0,0,0,0,214,214,0,215,0,212,0,0,214,214,215,0,0,212,0,0,214,214,
215,0,0,212,0,0,214,214,215,0,0,0,0,0,214,214,215,0,0,212,0,0,214,214,215,
0,0,212,0,0,214,0,0,0,212,212,0,0,0,214,215,215,0,0,0,0,214,214,215,0,0,
212,0,0,0,214,215,215,212,0,0,0,214,214,215,215,212,212,0,0,214,214,215,0,
0,212,0,0,0,0,215,215,212,0,0,0,214,214,215,0,0,0,0,0,252,252,251,251,250,
249,0,0,238,238,237,237,236,235,0,0,245,245,244,244,243,242,0,0,0,0,0,0,0,
0,0,0,213,0,0,215,215,212,0,0,213,214,214,215,215,0,0,0,0,214,214,215,215,
0,0,0,213,214,214,215,215,0,0,0,0,214,214,215,215,212,0,0,213,214,214,0,0,
0,0,0,0,214,214,215,215,0,0,0,213,214,214,0,0,212,0,0,0,214,214,215,0,0,0,
0,0,214,214,215,0,0,0,0,213,214,214,0,0,212,0,0,213,214,214,215,215,212,0,
0,213,214,0,215,0,212,0,0,213,214,214,0,0,212,0,0,0,214,214,215,215,0,0,0,
213,214,214,0,0,0,0,0,0,214,214,215,215,212,0,0,213,214,214,0,0,212,0,0,0,
214,214,215,215,0,0,0,0,214,214,215,0,0,0,0,0,214,214,215,215,0,0,0,0,0,
214,215,0,0,0,0,0,214,0,215,215,0,0,0,213,214,214,0,0,212,0,0,0,0,214,215,
215,0,0,0,213,214,214,215,215,212,0,0,0,252,252,251,251,0,0,0,0,238,238,
237,237,0,0,0,0,245,245,244,244,0,0,0,0,0,0,0,0,0,0);
TYPE ecran=^image;
image=Array[0..63999] Of Byte;
VAR palette,
palette2 :Array[0..767] Of Byte;
trace_barre:Array[1..140] Of Integer;
posit_barre:Array[1..4] Of Integer;
xy_balles :Array[1..3,1..4] Of Integer;
image1,
image2 :ecran;
carac_num,
carac_seg,
cpt_balle :Byte;
ligne,
compteur,
increment :Word;
signe,
octet,
cpt_barre :Integer;
PROCEDURE Precalcul_Barre;
VAR compteur : Integer;
BEGIN
FOR compteur:=1 TO 140 DO
trace_barre[compteur]:=Round(74*Sin((2*Pi/140)*compteur))+75;
FOR compteur:=1 TO 4 DO
posit_barre[compteur]:=compteur*6;
END;
PROCEDURE Transfert_Fonte;
BEGIN
FOR compteur:=0 TO 6 DO
Move(fonte[compteur*240],image1^[compteur*320],240);
END;
PROCEDURE Affiche_Barre(VAR barre:Integer);
VAR compteur,
barre_prec : Integer;
BEGIN
IF posit_barre[barre]=1
THEN barre_prec:=trace_barre[140]
ELSE barre_prec:=trace_barre[posit_barre[barre]-1];
FOR Compteur:=0 TO 8 DO
Ecriture_Couleur(barre_prec+compteur,0,0,0);
FOR Compteur:=0 TO 8 DO
Ecriture_Couleur(trace_barre[posit_barre[barre]]+compteur,
bar_couls[barre,compteur*3+1],
bar_couls[barre,compteur*3+2],
bar_couls[barre,compteur*3+3]);
Inc(posit_barre[Barre]);
END;
PROCEDURE Apparition_Fading;
VAR i,j:Word;
BEGIN
FOR i:=0 TO 63 DO
BEGIN
FOR j:=0 TO 767 DO
IF palette2[j]<palette[j]
THEN Inc(palette2[j]);
Attente_Synchro;
Ecriture_Palette(palette2[0],0,128);
Attente_Synchro;
Ecriture_Palette(palette2[384],128,128);
END;
END;
PROCEDURE Disparition_Fading;
VAR i,j:Word;
BEGIN
FOR i:=0 TO 63 DO
BEGIN
FOR j:=0 TO 767 DO
IF palette[j]>0
THEN Dec(palette[j]);
Attente_Synchro;
Ecriture_Palette(palette[0],0,128);
Attente_Synchro;
Ecriture_Palette(palette[384],128,128);
END;
END;
PROCEDURE Initialisations_Diverses;
BEGIN
FillChar(image1^,64000,Chr(0));
FillChar(palette[0],627,Chr(0));
FillChar(palette2[0],768,Chr(0));
Move(pal_couls[0],palette[627],141);
Attente_Synchro;
Ecriture_Palette(palette2[0],0,256);
increment:=20*320;
FOR compteur:=1 TO 160 DO
BEGIN
FillChar(Mem[$A000:increment],320,Chr(compteur));
Inc(increment,320);
END;
END;
PROCEDURE Affichage_Titre1_Et_2;
BEGIN
FOR compteur:=0 TO 12 DO
Copie_Bloc_Masque(titre1[compteur+1],0,8,7,108+compteur*8,80,
Seg(image1^)+Ofs(image1^),$A000);
FOR compteur:=0 TO 6 DO
Copie_Bloc_Masque(titre2[compteur+1],0,8,7,132+compteur*8,100,
Seg(image1^)+Ofs(image1^),$A000);
Move(Mem[$A000:$0],image2^,64000);
END;
PROCEDURE Initialisation_Balles;
BEGIN
FOR compteur:=1 TO 3 DO
BEGIN
xy_balles[compteur,1]:=Random(300) DIV 2 +10;
xy_balles[compteur,2]:=Random(129) DIV 2 +32;
IF Random(2)=1
THEN xy_balles[compteur,3]:=1
ELSE xy_balles[compteur,3]:=-1;
IF Random(2)=1
THEN xy_balles[compteur,4]:=1
ELSE xy_balles[compteur,4]:=-1;
END;
END;
PROCEDURE Scrolling_Titre;
BEGIN
octet:=0;
signe:=1;
compteur:=0;
REPEAT
Inc(compteur);
Attente_Synchro;
Defilement_Ecran(octet);
octet:=octet+signe;
IF ((octet>78) OR (octet<1))
THEN signe:=-signe;
UNTIL compteur=159;
END;
PROCEDURE Zoom_Texte;
BEGIN
Dedoublement_Ecran(400);
FillChar(Mem[$A000:2240],61760,Chr(0));
FOR compteur:=2 TO 30 DO
BEGIN
Attente_Synchro;
Zoom_Vertical(compteur);
Delay(20);
END;
FOR compteur:=29 DOWNTO 1 DO
BEGIN
Attente_Synchro;
Zoom_Vertical(compteur);
Delay(20);
END;
FillChar(palette2[0],768,Chr(0));
END;
PROCEDURE Traitements_Invisibles;
BEGIN
Copie_Bloc_Normal(2,190,318,7,0,190,Seg(image1^)+Ofs(image1^),
Seg(image1^)+Ofs(image1^));
Copie_Bloc_Normal(texte[carac_num]+carac_seg*2,0,2,7,318,190,
Seg(image1^)+Ofs(image1^),Seg(image1^)+Ofs(image1^));
FOR cpt_balle:=1 TO 3 DO
Copie_Bloc_Normal(xy_balles[cpt_balle,1]-2,xy_balles[cpt_balle,2]-2,12,
11,xy_balles[cpt_balle,1]-2,xy_balles[cpt_balle,2]-2,
Seg(image2^)+Ofs(image2^),Seg(image1^)+Ofs(image1^));
FOR cpt_balle:=1 TO 3 DO
Copie_Bloc_Masque(200+cpt_balle*8,0,
8,7,xy_balles[cpt_balle,1],xy_balles[cpt_balle,2],
Seg(image1^)+Ofs(image1^),Seg(image1^)+Ofs(image1^));
END;
PROCEDURE Actualisation_Ecran;
BEGIN
Attente_Synchro;
Copie_Bloc_Normal(0,190,320,7,0,0,Seg(image1^)+Ofs(image1^),$A000);
FOR cpt_barre:=1 TO 4 DO
BEGIN
Affiche_Barre(cpt_barre);
IF posit_barre[cpt_barre]>140
THEN posit_barre[cpt_barre]:=1;
END;
FOR cpt_balle:=1 TO 3 DO
Copie_Bloc_Normal(xy_balles[cpt_balle,1]-2,xy_balles[cpt_balle,2]-2,
12,11,xy_balles[cpt_balle,1]-2,xy_balles[cpt_balle,2]-2,
Seg(image1^)+Ofs(image1^),$A000);
Dedoublement_Ecran(ligne);
END;
PROCEDURE Calcul_Limites_Balles;
BEGIN
FOR cpt_balle:=1 TO 3 DO
BEGIN
xy_balles[cpt_balle,1]:=xy_balles[cpt_balle,1]+2*xy_balles[cpt_balle,3];
xy_balles[cpt_balle,2]:=xy_balles[cpt_balle,2]+2*xy_balles[cpt_balle,4];
IF ((xy_balles[cpt_balle,1]<3) OR (xy_balles[cpt_balle,1]>308))
THEN xy_balles[cpt_balle,3]:=-xy_balles[cpt_balle,3];
IF ((xy_balles[cpt_balle,2]<23) OR (xy_balles[cpt_balle,2]>169))
THEN xy_balles[cpt_balle,4]:=-xy_balles[cpt_balle,4];
END;
END;
PROCEDURE Calcul_Decalage_Texte;
BEGIN
Inc(carac_seg);
IF carac_seg>3
THEN BEGIN
carac_seg:=0;
Inc(carac_num);
IF carac_num>78
THEN carac_num:=1;
END;
END;
PROCEDURE Calcul_Decalage_Dedoublement;
BEGIN
IF ((ligne>400) OR (ligne<360))
THEN signe:=-signe;
ligne:=ligne+signe;
END;
PROCEDURE Animation_Globale;
BEGIN
ligne :=360;
signe :=1;
carac_num:=1;
carac_seg:=0;
REPEAT
Traitements_Invisibles;
Actualisation_Ecran;
Calcul_Decalage_Texte;
Calcul_Decalage_Dedoublement;
Calcul_Limites_Balles;
UNTIL KeyPressed;
END;
BEGIN { ANIMDEMO }
Randomize;
IF Activation_MCGA=False
THEN WriteLn('Mode VGA non disponible!');
New(image1);
New(image2);
Initialisations_Diverses;
Precalcul_Barre;
Transfert_Fonte;
Affichage_Titre1_Et_2;
Initialisation_Balles;
Apparition_Fading;
Scrolling_Titre;
Animation_Globale;
Zoom_Texte;
Disparition_Fading;
Dispose(image1);
Dispose(image2);
Activation_Texte;
END. { ANIMDEMO }