BlitBmp2.Mod 1022 B

123456789101112131415161718192021222324252627282930313233343536
  1. MODULE BlitBmp2;
  2. IMPORT G := Graph;
  3. CONST N = 100;
  4. VAR s, b: G.Bitmap;
  5. x, y, vx, vy: ARRAY N OF REAL;
  6. i: INTEGER;
  7. BEGIN
  8. s := G.Init();
  9. IF s = NIL THEN HALT(3) END;
  10. b := G.LoadBitmap('data/examples/rocket.png');
  11. IF b = NIL THEN HALT(4) END;
  12. FOR i := 0 TO N - 1 DO
  13. x[i] := s.w * G.Uniform();
  14. y[i] := s.h * G.Uniform();
  15. vx[i] := 0; vy[i] := -G.Uniform() * 5 - 0.3
  16. END;
  17. REPEAT
  18. G.ClearScreen;
  19. G.StretchBlit(b, s, 0, 0, b.w, b.h, 0, 0, s.w, s.h);
  20. FOR i := 0 TO N - 1 DO
  21. G.BlitWhole(b, s, FLOOR(x[i]), FLOOR(y[i]));
  22. x[i] := x[i] + vx[i]; y[i] := y[i] + vy[i];
  23. IF x[i] < -b.w THEN x[i] := x[i] + s.w + b.w
  24. ELSIF x[i] > s.w THEN x[i] := x[i] - s.w - b.w
  25. END;
  26. IF y[i] < -b.h THEN y[i] := y[i] + s.h + b.h
  27. ELSIF y[i] > s.h THEN y[i] := y[i] - s.h - b.h
  28. END;
  29. vx[i] := vx[i] + (G.Uniform() * 2 - 1) / 50;
  30. vy[i] := vy[i] + (G.Uniform() * 2 - 1) / 50
  31. END;
  32. G.Flip;
  33. G.Delay(20)
  34. UNTIL G.KeyPressed();
  35. G.Close
  36. END BlitBmp2.