home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frostbyte's 1980s DOS Shareware Collection
/
floppyshareware.zip
/
floppyshareware
/
USCX
/
TPSPRITE.ZIP
/
DEMO1.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1986-02-15
|
6KB
|
101 lines
(* ************************************************************** *)
(* *)
(* SpriteDemo1.Pas *)
(* *)
(* This program shows how to use sprites for multiple page *)
(* animation. The basic strategy is to use three pages: *)
(* the colorscreen, a hidden workbuffer which is a identical *)
(* (and may be written to unseen), and a third buffer which *)
(* is the part of the scene that does not change. One creates *)
(* the background and stores it both in backgroundbuffer and *)
(* in the workbuffer. Next, one writes to the workbuffer *)
(* ( that is, draws the sprites ). Next the workbuffer is *)
(* displayed by transferring it to the colorscreen. Then one *)
(* erases the workbuffer by transferring the backgroundbuffer *)
(* to it. The now blank workscreen can again be modified, *)
(* displayed, and erased again ... and again ... and ... *)
(* *)
(* The workbuffer and the backgroundbuffer each use 16K of *)
(* your data segment ( 32K out of your total of 64K ). You can *)
(* easily reduce this to 16K if after writing the background- *)
(* buffer you store it in the heapspace rather than in the *)
(* the data segment. However, in this small program it is not *)
(* necessary. *)
(* *)
(* The procedures PutSpriteC (x,y) and PutSpriteW (x,y) are *)
(* found in the in the include file Sprites.Lib which also *)
(* contains the important definitions for the program. The *)
(* procedure LoadTable (filename) will also be found in the *)
(* include file. *)
(* *)
(* (c) Donald L. Pavia *)
(* Department of Chemistry *)
(* ( Ver 2.0 ) Western Washington University *)
(* Bellingham, Washington 98225 *)
(* February 12, 1986 *)
(* *)
(* ************************************************************** *)
program SpriteDemo1;
{----------------------------------------------------------------------------}
{$I Sprites.Lib}
{----------------------------------------------------------------------------}
var i : integer;
{----------------------------------------------------------------------------}
BEGIN
clrscr; { clear the deck for }
GraphColorMode; GraphBackGround (1); Palette (2); { action and set up }
LoadTable ('DEMO1.TAB'); { load the table of sprites }
{----------------------------------------------------------------------}
{ draw background screen }
gotoxy (5,3); write ('Three Page Animation With Sprites');
Sprite := Table [2]; PutSpriteC (20,50); { draw direct to screen: }
Sprite := Table [4]; PutSpriteC (60,50); { this displays a number }
Sprite := Table[12]; PutSpriteC (100,50); { of different sprites }
Sprite := Table[14]; PutSpriteC (140,50); { which are to become a }
Sprite := Table[15]; PutSpriteC (180,50); { part of the background }
Sprite := Table [3]; PutSpriteC (210,50);
Sprite := Table [5]; PutSpriteC (250,50); { C = colorbuffer }
Sprite := Table[13]; PutSpriteC (290,50);
draw (0,100,319,100,1); draw (319,100,319,199,1); { box for the }
draw (319,199,0,199,1); draw (0,199,0,100,1); { animation }
WorkBuffer := ColorBuffer; { copy screen into workbuffer }
BackGroundBuffer := ColorBuffer; { copy screen for background }
TextColor (2); gotoxy (25,17); write ('Press <Enter>');
read (kbd,Wait);
{-----------------------------------------------------------------------}
{ multipage animation cycles }
{ Table[12] and Table[13] are a dragon }
for i := 3 to 33 do begin { Table[23] is the blast of fire }
{ W = workbuffer }
Sprite := Table[12]; PutSpriteW (8*i,150); { draw in workbuffer }
ColorBuffer := WorkBuffer; { display workbuffer }
WorkBuffer := BackGroundBuffer; { refresh workbuffer }
Sprite := Table[13]; PutSpriteW (8*i,150); { draw in workbuffer }
Sprite := Table[23]; PutSpriteW (8*i+28,150);
ColorBuffer := WorkBuffer; { display workbuffer }
WorkBuffer := BackGroundBuffer; { refresh workbuffer }
end;
{-----------------------------------------------------------------------}
read (Kbd,Wait); gotoxy (1,23);
TextMode (c80); clrscr; { exit gracefully }
END.