Bitmaps.Mod 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. MODULE Bitmaps;
  2. IMPORT G := Graph, Out, R := Random, M := Math;
  3. CONST maxSpeed = 0.8;
  4. maxSpeed2 = maxSpeed * maxSpeed;
  5. VAR b: G.Bitmap;
  6. w, h: INTEGER;
  7. x, y, vx, vy: REAL;
  8. r: REAL;
  9. c: G.Color;
  10. PROCEDURE Val(x: INTEGER): INTEGER;
  11. RETURN ABS((x MOD 512) - 256) END Val;
  12. BEGIN
  13. G.Init; G.ShowMouse(FALSE);
  14. b := G.LoadBitmap('Data/rocket.png');
  15. IF b = NIL THEN Out.String('Could not load image.'); Out.Ln
  16. ELSE
  17. G.MakeRGBA(c, 0, 255, 255, 0);
  18. G.Target(b);
  19. G.ThickLine(0, 0, b.w - 1, b.h - 1, c, 3);
  20. G.TargetScreen;
  21. G.GetScreenSize(w, h);
  22. DEC(w, b.w); DEC(h, b.h);
  23. x := R.Uniform() * w;
  24. y := R.Uniform() * h;
  25. vx := 0.0; vy := 0.0;
  26. REPEAT
  27. x := x + vx; y := y + vy;
  28. IF x < 0 THEN vx := -vx; x := 0.0
  29. ELSIF x >= w THEN vx := -vx; x := FLT(w)
  30. END;
  31. IF y < 0 THEN vy := -vy; y := 0.0
  32. ELSIF y >= h THEN vy := -vy; y := FLT(h)
  33. END;
  34. vx := vx + (R.Uniform() - 0.5) * maxSpeed / 10;
  35. vy := vy + (R.Uniform() - 0.5) * maxSpeed / 10;
  36. r := vx * vx + vy * vy;
  37. IF r > maxSpeed2 THEN
  38. r := maxSpeed / M.sqrt(r);
  39. vx := vx * r; vy := vy * r
  40. END;
  41. (*G.ClearScreen;*)
  42. G.MakeCol(c, Val(FLOOR((x + y) / 4)), Val(FLOOR((x + y + 100) / 2)), 0);
  43. (*G.DrawTintedPart(b, c, 0, 0, b.w, b.h, FLOOR(x), FLOOR(y));*)
  44. G.Draw(b, FLOOR(x), FLOOR(y));
  45. G.Flip;
  46. G.Delay(1)
  47. UNTIL G.KeyPressed();
  48. G.Pause
  49. END;
  50. G.Close
  51. END Bitmaps.