Guest User

Untitled

a guest
Jul 25th, 2025
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. MODULE Test333;
  2.  
  3. IMPORT WM := WMWindowManager, WMGraphics, WMRectangles, Modules, Math, Kernel;
  4.  
  5. CONST
  6. W = 800;
  7. H = 800;
  8.  
  9. TYPE
  10. Window = OBJECT (WM.DoubleBufferWindow);
  11. VAR
  12. t := 0, t1 := 0: FLOAT32;
  13. alive := TRUE;
  14.  
  15. PROCEDURE &New*;
  16. BEGIN
  17. Init(W, H, FALSE);
  18. WM.AddWindow(SELF, 100, 100);
  19.  
  20. canvas.Fill(WMRectangles.MakeRect(0, 0, W, H), WMGraphics.White, WMGraphics.ModeCopy);
  21. Invalidate(WMRectangles.MakeRect(0, 0, W, H));
  22. END New;
  23.  
  24. PROCEDURE Clear;
  25. BEGIN
  26. canvas.Fill(WMRectangles.MakeRect(0, 0, W, H), WMGraphics.Black, WMGraphics.ModeCopy);
  27. END Clear;
  28.  
  29. PROCEDURE Points0();
  30. VAR i: INTEGER;
  31. k, d, e, c, q, x, y: FLOAT32;
  32. BEGIN
  33. FOR i := 0 TO 9999 DO
  34. x := i;
  35. y := i/235.0;
  36.  
  37. k := (4.0 + Math.sin(x / 11.0 + t * 8.0)) * Math.cos(x / 14.0);
  38. e := y / 8.0 - 19.0;
  39. d := Math.sqrt(k * k + e * e) + Math.sin(y / 9.0 + t * 2.0);
  40. c := d * d / 49.0 - t;
  41. q := 2.0 * Math.sin(k * 2.0) + Math.sin(y / 17.0) * k * (9.0 + 2.0 * Math.sin(y - d * 3.0));
  42.  
  43. canvas.SetPixel(FLOOR(q + 50.0 * Math.cos(c) + 200.0), FLOOR(q * Math.sin(c) + d * 39.0 - 440.0), WMGraphics.White, WMGraphics.ModeCopy);
  44. END;
  45. END Points0;
  46.  
  47. PROCEDURE Jelly;
  48. VAR
  49. x, y, k, e, d0, d, angle, q, c: FLOAT32;
  50. i: INTEGER;
  51. BEGIN
  52. t := t + 0.01;
  53. FOR i := 0 TO 9999 DO
  54. x := i;
  55. y := i / 41.0;
  56.  
  57. k := 5 * Math.cos(x/19) * Math.cos(y/30);
  58. e := y/8 - 12;
  59. d0 := Math.sqrt(k*k + e*e);
  60. d := (d0*d0)/59 + 2;
  61.  
  62. angle := Math.arctan2(k, e);
  63. q := (4 * Math.sin(angle * 9) + 9 * Math.sin(d - t) - (k/d) * (9 + 3*Math.sin(d*9 - t*16)));
  64. c := (d*d)/7 - t;
  65.  
  66. canvas.SetPixel(FLOOR((q + 50*Math.cos(c)) * 2 + 800/2), FLOOR((q*Math.sin(c) + d*45) * 2), WMGraphics.Green, WMGraphics.ModeCopy);
  67. END;
  68. END Jelly;
  69.  
  70. PROCEDURE DrawFrame;
  71. BEGIN
  72. t := t + Math.pi / 240.0;
  73. Clear;
  74.  
  75. Points0;
  76. Jelly;
  77. Swap;
  78. Invalidate(WMRectangles.MakeRect(0, 0, W, H));
  79. END DrawFrame;
  80.  
  81. PROCEDURE Close*;
  82. BEGIN
  83. alive := FALSE;
  84. Close^;
  85. END Close;
  86.  
  87. BEGIN
  88. VAR timer := NEW Kernel.Timer();
  89. WHILE alive DO
  90. DrawFrame;
  91. timer.Sleep(10);
  92. END;
  93. END Window;
  94.  
  95. VAR s : Window;
  96.  
  97. PROCEDURE Open*;
  98. BEGIN {EXCLUSIVE}
  99. IF s # NIL THEN s.Close END; NEW(s);
  100. END Open;
  101.  
  102. PROCEDURE Close;
  103. BEGIN
  104. IF s # NIL THEN s.Close END
  105. END Close;
  106.  
  107. BEGIN
  108. Modules.InstallTermHandler(Close)
  109. END Test333.
  110.  
  111. Test333.Open~
  112. Test333.Close~
  113. System.Free Test333~
Advertisement
Add Comment
Please, Sign In to add comment