home *** CD-ROM | disk | FTP | other *** search
- {$R-} {Bereichsprüfung aus}
- {$B+} {vollständige Auswertung boolscher Ausdrücke}
- {$S+} {Stackprüfung an}
- {$I+} {I/O-Prüfung an}
- {$N-} {kein numerischer Coprozessor}
- {$M 65500,16384,655360} {3.0-Standardvorgaben für Stack&Heap}
-
-
- (* ************************************************************** *)
- (* *)
- (* SpriteDemo6.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. *)
- (* *)
- (* These techniques are similar to those of Demo1, but the *)
- (* present example is more complicated. *)
- (* *)
- (* (c) Donald L. Pavia *)
- (* Ver 2.0 Department of Chemistry *)
- (* Western Washington University *)
- (* Bellingham, Washington 98225 *)
- (* January 25, 1986 *)
- (* *)
- (* ************************************************************** *)
-
- program SpriteDemo6;
-
- {----------------------------------------------------------------------------}
-
- uses
- Crt,
- turbo3,
- Graph3;
-
- {$I Sprites.Lib}
- {----------------------------------------------------------------------------}
-
- const SoundOn : boolean = true;
-
- var k,l : integer;
-
- {----------------------------------------------------------------------------}
- procedure Introduction;
-
- begin
- TextColor (3);
- gotoxy (2,5); write ('TURBO PASCAL');
- TextColor (1);
- gotoxy (7,7); write ('SPRITE DESIGNER');
- TextColor (3);
- gotoxy (12,9); write ('AND');
- TextColor (1); write (' ANIMATION PACKAGE ');
- TextColor (3); write ('DEMO');
- gotoxy (1,21); write ('Action Continues Until a KeyPress');
- gotoxy (1,23); write ('Donald Pavia, December 1985');
- gotoxy (29,17); TextColor (2);
- gotoxy (25,17); write ('Press <Enter>');
- TextColor (3);
- read (kbd,Wait);
- {! 4. Kbd e^rfordert das Unit Turbo3 - verwenden Sie ReadKey (im Unit Crt)}
-
- end; { procedure Introduction }
- {----------------------------------------------------------------------------}
-
- BEGIN
- clrscr;
- GraphColorMode; GraphBackGround (1); Palette (2);
-
- WorkBuffer := ColorBuffer; { copy blank screen into workbuffer }
-
- LoadTable ('DEMO1.TAB'); { load the table of sprites }
-
- Introduction;
-
- REPEAT
- {----- Create BackGround Screen and Display ------------------}
-
- for times := 1 to 14 do
- begin { XorSpriteW writes to hidden workbuffer }
- { - row of 14 dwarf sprites is created }
-
- Sprite := Table[ 9]; { Dwarf1 - upper body }
- XorSpriteW (20 * times,90);
-
- Sprite := Table[17]; { Dwarf2 - lower body }
- XorSpriteW (20 * times,110);
-
- end;
-
- ColorBuffer := WorkBuffer; { display workbuffer }
-
- BackGroundBuffer := WorkBuffer; { copy workbuffer into background }
- { to use for refresh of workbuffer }
- {------------------------------------------------------------}
-
- Repeat
- count := 8;
-
- (* ******* REPEAT LOOP ONE ************************************* *)
-
- repeat
-
- {-- Display Cycle One ----------------------------------------}
- { write to blank workbuffer }
- count := count + 8;
-
- Sprite := Table[12]; XorSpriteW (220,20); {Dragon}
-
- Sprite := Table[2]; {Dog1}
- if count < 307 then XorSpriteW (count,153);
-
- Sprite := Table[5]; {Duck1}
- if count < 300 then XorSpriteW (count+8,141);
-
- Sprite := Table[20]; {Boy1}
- if (count >48) and (count < 204) then XorSpriteW (count-40,140);
-
- Sprite := Table[20]; {Boy1}
- if count >= 204 then XorSpriteW (164,140);
-
- ColorBuffer := WorkBuffer; { display workbuffer }
- WorkBuffer := BackGroundBuffer; { erase workbuffer }
-
- {-- Display Cycle Two ----------------------------------------}
- { write to blank workbuffer }
- count := count + 8;
-
- Sprite := Table[13]; XorSpriteW (220,20); {Dragon2}
-
- Sprite := Table[3]; {Dog2}
- if count < 307 then XorSpriteW (count,153);
-
- Sprite := Table[6]; {Duck2}
- if count < 300 then XorSpriteW (count+16,136);
-
- Sprite := Table[21]; {Boy2}
- if (count > 56) and (count < 212) then XorSpriteW (count-40,140);
-
- Sprite := Table[20]; {Boy1}
- if (count > 212) then XorSpriteW (164,140);
-
- ColorBuffer := WorkBuffer; { display workbuffer }
- WorkBuffer := BackGroundBuffer; { erase workbuffer }
-
- {-------------------------------------------------------------}
- { naive attempt at dog bark }
- if SoundOn then begin
- if ((count > 32) and (count < 128))
- or (count > 210) then begin
- Sound ( 40); delay (10); Sound (120); delay (20);
- Sound (400); delay (15); Sound (880); delay (20);
- Sound (1600); NoSound; end; end;
- {-------------------------------------------------------------}
-
- until count >= 340;
-
- (* ******* END LOOP ONE ****************************************** *)
-
- count := 4;
-
- (* ******** REPEAT LOOP TWO ************************************* *)
-
- repeat
- {-- Display Cycle Three --------------------------------------}
- { write to hidden workbuffer }
- count := count + 8;
-
- Sprite := Table[12]; XorSpriteW (220,20); {Dragon}
-
- Sprite := Table[23]; XorSpriteW (244,20); {Blast}
-
- Sprite := Table[2]; {Dog1}
- if count < 307 then XorSpriteW (count,153);
-
- Sprite := Table[5]; {Duck1}
- if count < 300 then XorSpriteW (count+8,141);
-
- Sprite := Table[22]; {Boy3}
- if count < 180 then XorSpriteW (164,140);
-
- if (count >= 180) and (count < 204) then begin
- Sprite := Table[20]; {Boy1}
- XorSpriteW (164,140); end;
-
- Sprite := Table[20]; {Boy1}
- if count >= 204 then XorSpriteW (count-40,140);
-
- ColorBuffer := WorkBuffer; { display workbuffer }
- WorkBuffer := BackGroundBuffer; { erase workbuffer }
-
- {-- Display Cycle Four ---------------------------------------}
- { write to hidden workbuffer }
- count := count + 8;
-
- Sprite := Table[13]; XorSpriteW (220,20); {Dragon2}
-
- Sprite := Table[3]; {Dog2}
- if count < 307 then XorSpriteW (count,153);
-
- Sprite := Table[6]; {Duck2}
- if count < 300 then XorSpriteW (count+16,136);
-
- Sprite := Table[22]; {Boy3}
- if (count < 188) then XorSpriteW (164,140);
-
- if (count >= 188) and (count < 212) then begin
- Sprite := Table[20]; {Boy1}
- XorSpriteW (164,140); end;
-
- Sprite := Table[21]; {Boy2}
- if count >= 212 then XorSpriteW (count-40,140);
-
- ColorBuffer := WorkBuffer; { display workbuffer }
- WorkBuffer := BackGroundBuffer; { erase workbuffer }
-
- {--------------------------------------------------------------}
- { barking again }
- if SoundOn then begin
- if ((count > 32) and (count < 128))
- or (count > 210) then begin
- Sound ( 40); delay (10); Sound (120); delay (20);
- Sound (400); delay (15); Sound (880); delay (20);
- Sound (1600); NoSound; end; end;
- {-------------------------------------------------------------}
-
- until count >= 340;
-
- (* ******** END LOOP TWO ************************************* *)
-
- Until keypressed;
-
- {---------------------------------------------------------------------}
- FIllChar (ColorBuffer,16192,0); { erase everything }
- FillChar (WorkBuffer,16192,0); { clrscr doesn't }
- FillChar (BackGroundBuffer,16192,0); { work in graphics }
-
- gotoxy (10,10); write ('Repeat Again ? Y/N ? ');
- repeat
- read (Kbd,Again);
- {! 5. Kbd erford^ert das Unit Turbo3 - verwenden Sie ReadKey (im Unit Crt)}
- until UpCase(Again) in ['Y','N'];
-
- FillChar (WorkBuffer,16383,0);
- {---------------------------------------------------------------------}
-
- UNTIL UpCase(Again) = 'N';
-
- gotoxy (1,23);
- TextMode (c80); clrscr; { exit gracefully }
-
- END.