2
0

Rocket2.Mod 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. MODULE Rocket2;
  2. IMPORT Out, Random, G := Graph, M := Math;
  3. CONST N = 100;
  4. VAR b: G.Bitmap;
  5. x, y, vx, vy: ARRAY N OF REAL;
  6. w, h, pw, ph, i: INTEGER;
  7. t: REAL;
  8. c: G.Color;
  9. BEGIN
  10. (* Try theese settings: (the default is (640, 400, {})) *)
  11. (* G.Settings(0, 0, {}); *)
  12. (* G.Settings(0, 0, {G.window}); *)
  13. (* G.Settings(320, 200, {}); *)
  14. (* G.Settings(320, 200, {G.smooth}); *)
  15. (* G.Settings(320, 200, {G.exact}); *)
  16. (* G.Settings(320, 200, {G.smooth, G.exact}); *)
  17. (* G.Settings(800, 600, {G.exact}); *)
  18. (* G.Settings(420, 900, {G.smooth, G.exact}); *)
  19. G.Init();
  20. G.ShowMouse(FALSE);
  21. G.GetTargetSize(w, h);
  22. b := G.LoadBitmap('Data/rocket.png');
  23. IF b = NIL THEN
  24. Out.String('Could not load rocket.png'); Out.Ln; ASSERT(FALSE)
  25. END;
  26. FOR i := 0 TO N - 1 DO
  27. x[i] := FLT(w) * Random.Uniform();
  28. y[i] := FLT(h) * Random.Uniform();
  29. vx[i] := 0.0; vy[i] := -Random.Uniform() * 5.0 - 0.3
  30. END;
  31. t := 0.0;
  32. REPEAT
  33. G.MakeCol(c, 10, 30, 60 + FLOOR(60.0 * M.cos(t / 40.0)));
  34. G.ClearToColor(c);
  35. pw := FLOOR(h * b.w / b.h * (0.65 + 0.05 * M.sin(t)));
  36. ph := FLOOR(FLT(h) * (0.65 + 0.05 * M.cos(t)));
  37. G.DrawEx(b, 0, 0, b.w, b.h,
  38. (w - pw) DIV 2,
  39. (h - ph) DIV 2 - FLOOR(FLT(h) * 0.2 * M.sin(t / 40.0)),
  40. pw, ph, {});
  41. FOR i := 0 TO N - 1 DO
  42. G.Draw(b, FLOOR(x[i]), FLOOR(y[i]));
  43. x[i] := x[i] + vx[i]; y[i] := y[i] + vy[i];
  44. IF x[i] < -FLT(b.w) THEN x[i] := x[i] + FLT(w + b.w)
  45. ELSIF x[i] > FLT(w) THEN x[i] := x[i] - FLT(w - b.w)
  46. END;
  47. IF y[i] < -FLT(b.h) THEN y[i] := y[i] + FLT(h + b.h)
  48. ELSIF y[i] > FLT(h) THEN y[i] := y[i] - FLT(h - b.h)
  49. END;
  50. vx[i] := vx[i] + (Random.Uniform() * 2.0 - 1.0) / 50.0;
  51. vy[i] := vy[i] + (Random.Uniform() * 2.0 - 1.0) / 50.0
  52. END;
  53. G.Flip;
  54. G.Delay(20);
  55. t := t + 0.15
  56. UNTIL G.KeyPressed();
  57. G.Close
  58. END Rocket2.