home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 04 / extra / detectte.mod < prev    next >
Encoding:
Text File  |  1988-12-21  |  1.9 KB  |  85 lines

  1. (*-------------------------------------------------------*)
  2. (*                      DETECTTE.MOD                     *)
  3. (*    Abwandlung des Demoprog. Nr.6 zum TopSpeed M2 zur  *)
  4. (*    Demonstration der Prozedur "AutoGraphInit".        *)
  5.  
  6. MODULE DetectTest;
  7.  
  8. FROM Lib IMPORT RANDOM,RANDOMIZE;
  9. FROM Graph IMPORT Circle,Disc,GraphMode,
  10.                   TextMode, Width,Depth;
  11. IMPORT IO;
  12.  
  13. FROM GraphDetect IMPORT AutoGraphInit;
  14.  
  15. TYPE
  16.   FunnyType = RECORD
  17.     q : INTEGER;   (* value *)
  18.     d : INTEGER;   (* rate of change *)
  19.     min : INTEGER;
  20.     max : INTEGER;
  21.   END;
  22.  
  23. PROCEDURE init(VAR v:FunnyType);
  24. BEGIN
  25.   v.q := v.min;
  26.   v.d := INTEGER(RANDOM(v.max-v.min));
  27. END init;
  28.  
  29. PROCEDURE bounce(VAR v:FunnyType);
  30. (* Update v.q, 'bouncing' when it goes out of range *)
  31. BEGIN
  32.   WITH v DO
  33.     q := q + d;
  34.     IF q < min   THEN
  35.       q := 2*min-q;
  36.       d := -d;
  37.     END;
  38.     IF q > max THEN
  39.       q := 2*max-q;
  40.       d := -d;
  41.     END;
  42.   END;
  43. END bounce;
  44.  
  45. VAR
  46.   x,y : FunnyType;
  47.   color,radius : CARDINAL;
  48.   Result : BOOLEAN;
  49.  
  50. BEGIN
  51.   Result := AutoGraphInit(); (* Zuerst aufrufen ! *)
  52.   IF Result THEN             (* Hat geklappt ?    *)
  53.     RANDOMIZE;
  54.     x.max := Width-1; x.min := 0;
  55.     y.max := Depth-1; y.min := 0;
  56.  
  57.     IO.WrStr('Press space to continue, any other key to stop');
  58.     IO.WrLn;
  59.     WHILE NOT IO.KeyPressed() DO
  60.     END;
  61.  
  62.     GraphMode;
  63.     WHILE IO.RdKey() = ' ' DO (* Bißchen Zeichnen *)
  64.       init(x);
  65.       init(y);
  66.  
  67.       REPEAT
  68.         color := RANDOM(16);
  69.       UNTIL color MOD 5 <> 0; (* fill using 2 colors *)
  70.  
  71.       radius := 2 + RANDOM(5);
  72.       WHILE NOT IO.KeyPressed() DO
  73.         bounce(x);
  74.         bounce(y);
  75.         Disc(x.q, y.q, radius, color);
  76.         Circle(x.q, y.q, radius, color MOD 4);
  77.       END;
  78.  
  79.       Disc(0,0,Width+Depth, 0); (* clear screen *)
  80.     END;
  81.     TextMode;
  82.   END;
  83. END DetectTest.
  84.  
  85.