home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / turbo4 / gr3demo.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-12-08  |  6.8 KB  |  243 lines

  1.  
  2. {           Copyright (c) 1985, 87 by Borland International, Inc.            }
  3.  
  4. program Gr3Demo;
  5. {
  6.                 Turtlegrafik-Demonstration
  7.  
  8.   Dieses Programm demonstriert die Implementation der Turtlegrafik
  9.   der Version 3.0 durch das Unit Graph3 in der Version 4.0.
  10.  
  11.   HINWEIS: Das Unit Graph3 (und damit GR3DEMO.PAS) setzen einen Color
  12.   Graphics Adapter ("CGA") voraus (im Gegensatz zum Unit Graph, das
  13.   eine Vielzahl von Grafik-Adaptern unterstützt).
  14.  
  15.   Eine kurze Beschreibung des Ablaufs:
  16.  
  17.   1.  Initialisierung der Variablen
  18.   2 a. Start mit mittlerer Auflösung
  19.     b. Einlesen eines Zeichens von der Tastatur und entsprechende
  20.        Manipulation der "Schildkröte" bis zum nächsten Tastendruck
  21.   3.   Ende des Programms bei Eingabe von ESC oder Ctrl-C (Umschaltung in
  22.        den Textmodus).
  23.  
  24.   Die folgenden Tastenbefehle werden vom Programm unterstützt:
  25.  
  26.       F1           dreht die Schildkröte nach links
  27.       F2           dreht die Schildkröte nach rechts
  28.  
  29.       <Auf>        Schildkröte nach oben ("North")
  30.       <Ab>                     nach unten ("South")
  31.       <Links>                  nach links ("West")
  32.       <Rechts>                 nach rechts ("East")
  33.       <Home>        Nordwest
  34.       <PgUp>        NordOst
  35.       <PgDn>        SüdOst
  36.       <End>         SüdWest
  37.  
  38.  
  39.       0..9          bestimmen die Geschwindigkeit der Schildkröte (0 = Stop,
  40.                     1 = langsam, 9 = sehr schnell)
  41.        H            setzt hohe Auflösung
  42.        M            setzt mittlere Auflösung
  43.        W            schaltet den "Wrap"-Modus an/aus
  44.        P            setzt den Zeichenstift an/hebt ihn ab
  45.        C            ändert die Zeichenfarbe (bzw. Helligkeit)
  46.        T            versteckt/zeigt die Schildkröte
  47.        +            setzt die Schildkröte wieder in ihre Anfangsposition
  48.       <ESC>         beendet das Programm
  49. }
  50.  
  51. uses
  52.   Crt, Turbo3, Graph3;
  53.  
  54. const
  55.   TurtleSpeed = 50;
  56.  
  57. type
  58.   ToggleCommands = (PenOn, WrapOn, TurtleOn);
  59.  
  60. var
  61.   ToggleRay    : array[PenOn..TurtleOn] of Boolean;
  62.   Magnitude,               { Geschwindigkeit: 0 = Stop, 9 = sehr schnell }
  63.   Color,                   { momentane Zeichenfarbe (in der Palette) }
  64.   CurentPalette: Integer;  { momentane Palette }
  65.  
  66. procedure Init;
  67. var  Toggle: ToggleCommands;
  68.  
  69. procedure VerifyGraphicsCard;
  70. var ch : Char;
  71. begin
  72.   ClrScr;
  73.   Writeln('Dieses Programm setzt einen Color Graphics Adapter voraus!');
  74.   write('Ist Ihr Computer entsprechend ausgerüstet? (J/N): ');
  75.   repeat
  76.     read (Kbd, Ch); ch := UpCase(ch);
  77.     if ch in ['N', #27, ^C] then
  78.     begin
  79.       TextMode(LastMode);
  80.       Halt;
  81.     end;
  82.   until ch = 'J';
  83. end;
  84.  
  85. begin
  86.   VerifyGraphicsCard;
  87.   Magnitude := 0;  { Stop }
  88.   Color     := 0;
  89.   for Toggle := PenOn to TurtleOn do
  90.     ToggleRay[Toggle]  := True;      { alle Umschalter auf ON }
  91. end;
  92.  
  93. procedure PlayWithTurtle;
  94. var
  95.   InKey:     Char;
  96.  
  97. FunctionKey:  Boolean;    { True, wenn eine Spezialtaste gedrückt wurde }
  98.  
  99. procedure NewScreen(SetRes : Char);
  100.  
  101. procedure DrawBox(x, y, w, h : Integer);
  102. begin
  103.   Draw(x, y, x + w, y, 1);                     { Spitze }
  104.   Draw(x, y, x, y + h, 1);                     { linke Seite }
  105.   Draw(x, y + h, x + w, y + h, 1);             { Unterseite }
  106.   Draw(x + w, y + h, x + w, y, 1);             { rechte Seite }
  107. end; { DrawBox }
  108.  
  109. procedure HiResOn;
  110. const
  111.   CharHeight = 10;
  112. begin
  113.   HiRes;
  114.   HiResColor(Yellow);
  115.   DrawBox(0, 0, 639, 199-CharHeight);
  116.   TurtleWindow(319, 99-(CharHeight DIV 2), 638, 198-CharHeight);
  117. end; { HiResOn }
  118.  
  119. procedure MediumResOn;
  120. const
  121.   CharHeight = 20;
  122. begin
  123.   GraphColorMode;
  124.   DrawBox(0, 0, 319, 199-CharHeight);
  125.   TurtleWindow(159, 99-(CharHeight DIV 2), 318, 198-CharHeight);
  126. end; { MediumResOn }
  127.  
  128. begin
  129.   case SetRes of
  130.     'M'   : begin
  131.               MediumResOn;
  132.               GoToXY(1, 24);
  133.               writeln('Verz.:0-9 Umsch.:Pen,Wrap,Turtle,Color');
  134.               write  ('Drehung:F1,F2, HOME: +, Modus: Hi,Med');
  135.             end;
  136.     'H'   : begin
  137.               HiResOn;
  138.               GoToXY(1, 25);
  139.               write('Verz.:0-9 Umsch.:Pen,Wrap,Turtle,Color');
  140.               write(' Drehung:F1,F2, HOME: +, Modus: Hi,Med');
  141.             end;
  142.   end; { case }
  143.   Showturtle;
  144.   Home;
  145.   Wrap;
  146.   Magnitude := 0;
  147. end;
  148.  
  149. function GetKey(var FunctionKey: Boolean): Char;
  150. var ch: Char;
  151. begin
  152.   ch := ReadKey;
  153.   if (Ch = #0) then  { .. muß es wohl eine Funktionstaste sein }
  154.   begin
  155.     ch := ReadKey;
  156.     FunctionKey := True;
  157.   end
  158.   else FunctionKey := False;
  159.   GetKey := Ch;
  160. end;
  161.  
  162. procedure TurtleDo(InKey : Char; FunctionKey : Boolean);
  163. const
  164.   NorthEast = 45;
  165.   SouthEast = 135;
  166.   SouthWest = 225;
  167.   NorthWest = 315;
  168.  
  169. procedure DoFunctionCommand(FunctionKey: Char);
  170. begin
  171.   case FunctionKey of
  172.     'H': SetHeading(North);      { Aufwärtspfeil }
  173.     'P': SetHeading(South);      { Abwärtspfeil }
  174.     'M': SetHeading(East);       { Linkspfeil }
  175.     'K': SetHeading(West);       { Rechtspfeil }
  176.     'I': SetHeading(NorthEast);  { PgUp            }
  177.     'Q': SetHeading(SouthEast);  { PgDn            }
  178.     'G': SetHeading(NorthWest);  { Home            }
  179.     'O': SetHeading(SouthWest);  { End             }
  180.     '<': SetHeading(Heading+5);  { F1              }
  181.     ';': SetHeading(Heading-5);  { F2              }
  182.   end
  183. end;
  184.  
  185. begin
  186.   if FunctionKey then DoFunctionCommand(UpCase(InKey))
  187.   else
  188.   case UpCase(InKey) of
  189.     'P': begin
  190.            ToggleRay[PenOn] := NOT ToggleRay[PenOn];
  191.            case ToggleRay[PenOn] of
  192.              True  : PenUp;
  193.              False : PenDown;
  194.            end; { case }
  195.          end;
  196.     'W': begin
  197.            ToggleRay[WrapOn] := NOT ToggleRay[WrapOn];
  198.            case ToggleRay[WrapOn] of
  199.              True  : Wrap;
  200.              False : NoWrap;
  201.            end; { case }
  202.          end;
  203.     'T': begin
  204.            ToggleRay[TurtleOn] := NOT ToggleRay[TurtleOn];
  205.            case ToggleRay[TurtleOn] of
  206.              True  : ShowTurtle;
  207.              False : HideTurtle;
  208.            end; { case }
  209.          end;
  210.     '+': Home;
  211.     'C': begin
  212.            Color := succ(color) mod 4;
  213.            SetPenColor(Color);
  214.          end;
  215.     '0'..'9': Magnitude := Sqr(ord(inkey) - ord('0'));
  216.     'M': begin
  217.            NewScreen('M');     { mittlere Grafik-Auflösung }
  218.          end;
  219.     'H': begin
  220.            NewScreen('H');     { HiRes-Grafik }
  221.          end;
  222.   end;   { case }
  223. end; { TurtleDo }
  224.  
  225. begin { PlayWithTurtle }
  226.   NewScreen('M');     { Start mit mittlerer Auflösung }
  227.   repeat
  228.     TurtleDelay(TurtleSpeed);
  229.     repeat
  230.       if Magnitude <> 0 then forwd(Magnitude);
  231.     until KeyPressed;
  232.     Inkey := GetKey(FunctionKey);
  233.     TurtleDo(InKey, FunctionKey);
  234.   until UpCase(Inkey) in [#27, ^C];
  235. end;
  236.  
  237. begin { Hauptprogramm }
  238.   Init;
  239.   PlayWithTurtle;
  240.   ClearScreen;
  241.   TextMode(LastMode);
  242. end.
  243.