home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / msdos / pascal / anivga12 / example7.pas < prev    next >
Pascal/Delphi Source File  |  1993-07-11  |  3KB  |  107 lines

  1. {$A+,B-,D+,L+,N-,E-,O-,R-,S-,V-,G-,F-,I-,X-}
  2. {$M 16384,0,655360}
  3. PROGRAM Example7;
  4.  
  5. {Demonstrates the use of a loadable palettes: the program will load a _very_}
  6. {strange palette (randomly generated...)}
  7.  
  8. USES ANIVGA,CRT;
  9. CONST SpriteName='flower.COD';
  10.       PalName='random.PAL';
  11.       Flower=10;
  12.       FlowerShadow=11;
  13.       brightness:BYTE=80;
  14.  
  15. VAR ch:Char;
  16.     i,j:Integer;
  17.     temp:WORD;
  18.     p1:POINTER;
  19.     oldPal:Palette;
  20.  
  21.  
  22. BEGIN
  23.  
  24.  IF (loadSprite(SpriteName,Flower)=0) OR     {load sprite 2x for different}
  25.     (loadSprite(SpriteName,FlowerShadow)=0)  {display modes!}
  26.   THEN BEGIN
  27.         WRITELN('Couldn''t access file '+SpriteName+' : '+GetErrorMessage);
  28.         halt(1)
  29.        END;
  30.  
  31.  SetModeByte(FlowerShadow,Display_SHADOWEXACT); {set mode of shadow sprite}
  32.  SetShadowTab(brightness);
  33.  
  34.  ch:=#0;
  35.  
  36.  InitGraph;
  37.  IF LoadPalette(PalName,0,actualColors)=0
  38.   THEN BEGIN
  39.         CloseRoutines;
  40.         WRITELN('Couldn''t access file '+PalName+' : '+GetErrorMessage);
  41.         Halt
  42.        END
  43.   ELSE SetPalette(actualColors,TRUE);
  44.  
  45.  {just to show how to change a color:}
  46.  GetPalette(oldPal);      {read palette,   }
  47.  oldpal[15].red:=0;       {change color(s),}
  48.  oldpal[15].green:=63;
  49.  oldpal[15].blue:=0;
  50.  SetPalette(oldPal,TRUE); {show it!}
  51.  
  52.  FOR i:=15 TO 78 DO
  53.   BEGIN {draw some colors on the screen}
  54.    Color:=i;
  55.    FOR j:=(i-15)*5 TO (i-15)*5+4 DO BackgroundLine(j,0,j,YMAX)
  56.   END;
  57.  
  58.  BackgroundLine(0,0,XMAX,YMAX);
  59.  
  60.  SpriteN[0]:=Flower; SpriteX[0]:=100; SpriteY[0]:=100;
  61.  {Use same flower for shadow zone:}
  62.  SpriteN[1]:=FlowerShadow;
  63.  SpriteX[1]:=SpriteX[0]+2; SpriteY[1]:=SpriteY[0]+2;
  64.  
  65.  Animate; REPEAT
  66.   if keypressed
  67.    THEN BEGIN
  68.          while keypressed do ch:=upcase(readkey);
  69.          case ch of
  70.           'C':BEGIN
  71.                p1:=GetImage(0,0,50,30,1-PAGE);
  72.                PutImage(-10,-5,p1,BACKGNDPAGE);
  73.                PutImage(-11,60,p1,BACKGNDPAGE);
  74.                PutImage(-12,110,p1,BACKGNDPAGE);
  75.                PutImage(-13,180,p1,BACKGNDPAGE);
  76.                FreeImageMem(p1);
  77.               END;
  78.           'P':FOR i:=1 TO 1000 DO
  79.                BackgroundPutPixel(Random(XMAX+1),Random(YMAX+1),Random(256));
  80.           'I':BEGIN dec(SpriteY[0]); dec(SpriteY[1]) END;
  81.           'J':BEGIN dec(SpriteX[0]); dec(SpriteX[1]) END;
  82.           'K':BEGIN inc(SpriteX[0]); inc(SpriteX[1]) END;
  83.           'M':BEGIN inc(SpriteY[0]); inc(SpriteY[1]) END;
  84.           '+':IF brightness<100
  85.                THEN BEGIN
  86.                      inc(brightness); SetShadowTab(brightness)
  87.                     END
  88.                ELSE BEGIN
  89.                      sound(500); delay(100); nosound
  90.                     END;
  91.           '-':IF brightness>0
  92.                THEN BEGIN
  93.                      dec(brightness); SetShadowTab(brightness)
  94.                     END
  95.                ELSE BEGIN
  96.                      sound(500); delay(100); nosound
  97.                     END;
  98.          end;
  99.          if pos(ch,'PCIJKM+-')>0 THEN Animate;
  100.         END;
  101.  
  102.  UNTIL (ch='Q') OR (ch=#27);
  103.  
  104.  CloseRoutines;
  105.  
  106. END.
  107.