ggi1.pp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // $Id$
  2. // (c) 1999 Sebastian Guenther
  3. {$MODE objfpc}
  4. {$H-}
  5. program GGI1;
  6. uses GGI;
  7. const
  8. WhiteColor: TGGIColor = (r: $ffff; g: $ffff; b: $ffff; a: 0);
  9. StarCount = 500;
  10. Frame: Integer = 0;
  11. type
  12. TStar = record
  13. x, y, z: Integer;
  14. end;
  15. var
  16. Visual: TGGIVisual;
  17. mode: TGGIMode;
  18. ScreenW, ScreenH: Integer;
  19. i, rx, ry: Integer;
  20. angle: Single;
  21. White: TGGIPixel;
  22. Stars: array[1..StarCount] of TStar;
  23. begin
  24. if ggiInit <> 0 then
  25. begin
  26. WriteLn(StdErr, 'Initialization of GGI failed');
  27. Halt(2);
  28. end;
  29. Visual := ggiOpen(nil, []); // Open default visual
  30. if not Assigned(Visual) then
  31. begin
  32. WriteLn(StdErr, 'Could not get default visual');
  33. Halt(3);
  34. end;
  35. ggiSetFlags(Visual, GGIFLAG_ASYNC);
  36. ggiParseMode({'S640x480[GT_8BIT]'}'', mode);
  37. ggiSetMode(Visual, mode);
  38. ggiGetMode(Visual, mode);
  39. ScreenW := mode.Virt.x;
  40. ScreenH := mode.Virt.y;
  41. WriteLn('Screen size: ', ScreenW, ' x ', ScreenH);
  42. White := ggiMapColor(Visual, WhiteColor);
  43. for i := 1 to StarCount do
  44. begin
  45. Stars[i].x := Random(ScreenW) - ScreenW div 2;
  46. Stars[i].y := Random(ScreenH) - ScreenH div 2;
  47. Stars[i].z := Random(99) + 1;
  48. end;
  49. angle := 0.0;
  50. while ggiKbhit(Visual) = 0 do
  51. begin
  52. ggiSetWriteFrame(Visual, Frame);
  53. ggiFillscreen(Visual);
  54. for i := 1 to StarCount do
  55. begin
  56. // the following is not as optimized as it could be...
  57. rx := Trunc(Sin(angle) * Stars[i].x + Cos(angle) * Stars[i].y) * 50 div Stars[i].z + (ScreenW div 2);
  58. ry := Trunc(Cos(angle) * Stars[i].x - Sin(angle) * Stars[i].y) * 50 div Stars[i].z + (ScreenH div 2);
  59. ggiPutPixel(Visual, rx, ry, White);
  60. if Stars[i].z = 1 then
  61. Stars[i].z := Random(99) + 1
  62. else
  63. Dec(Stars[i].z);
  64. end;
  65. angle := angle + 0.01;
  66. ggiFlush(Visual);
  67. Frame := (Frame + 1) mod mode.Frames;
  68. ggiSetDisplayFrame(Visual, Frame);
  69. end;
  70. ggiClose(Visual);
  71. ggiExit;
  72. end.
  73. {
  74. $Log$
  75. Revision 1.2 2000-07-13 11:33:17 michael
  76. + removed logs
  77. }