home *** CD-ROM | disk | FTP | other *** search
- #include <math.h>
-
- #define kNumOfStars 70
- #define kProjDistance 450
- #define kLargeStar 0
- #define kSmallStar 1
-
- typedef struct {
- int x,y,z;
- short size;
- } Star;
-
- Star gStarField [kNumOfStars];
- short gVelocity;
- Point gOrigin;
- RgnHandle gOldGrayRgn;
- short gOldMBarHeight;
- WindowPtr gWindow;
- short hPos, vPos;
- Point mouseLoc, oldmouseLoc;
- Boolean continues;
- EventRecord theEvent;
-
- void main (void);
- void InitToolbox (void);
- void InitStarField (void);
- void AnimateStarField (void);
- void DrawSmallStar (Point aPt);
- void DrawLargeStar (Point aPt);
- Point Project (Star aStar);
- void AnimateStar (Star *aStar);
- void CreateStar (Star *aStar);
- unsigned short GetRandom(unsigned short min, unsigned short max);
- void HideMenuBar (void);
- void ShowMenuBar (void);
- void SetToMenuRect (RgnHandle rgn);
- void DoKeyDown (EventRecord *theEvent);
-
- void InitToolbox (void)
- {
- EventRecord event;
- short count;
- Rect mBarRect;
- RgnHandle mBarRgn;
-
- InitGraf ((Ptr) &qd.thePort);
- InitFonts ();
- InitWindows ();
- InitMenus ();
- TEInit ();
- InitDialogs (nil);
- InitCursor ();
-
- for (count = 1; count <= 3; ++count)
- EventAvail (everyEvent, &event);
-
- gOldMBarHeight = GetMBarHeight ();
- GetMBarHeight () = 0;
- gWindow = NewWindow (nil, &qd.screenBits.bounds, "\p", true, plainDBox, (WindowPtr) - 1,
- false, 0L);
- SetRect (&mBarRect, 0, 0, qd.screenBits.bounds.right,
- qd.screenBits.bounds.top + gOldMBarHeight);
- mBarRgn = NewRgn ();
- RectRgn (mBarRgn, &mBarRect);
- UnionRgn (gWindow->visRgn, mBarRgn, gWindow->visRgn);
- DisposeRgn (mBarRgn);
- SetPort (gWindow);
- FillRect (&gWindow->portRect, &qd.black);
-
- GetDateTime ((unsigned long*) qd.randSeed);
- }
-
- void InitStarField (void)
- {
- short loop;
-
- gVelocity = 10;
- gOrigin.h = qd.screenBits.bounds.right / 2;
- gOrigin.v = qd.screenBits.bounds.bottom / 2;
-
- for (loop = 0; loop < kNumOfStars; loop++)
- {
- CreateStar (&gStarField [loop]);
- }
- }
-
- void AnimateStarField (void)
- {
- short loop;
- Point location;
-
- for (loop = 0; loop < kNumOfStars; loop++)
- {
- location = Project (gStarField [loop]);
-
- // RGBForeColor (&starColor);
- ForeColor (blackColor);
-
- if (gStarField [loop].size == kLargeStar)
- DrawLargeStar (location);
- else
- DrawSmallStar (location);
-
- AnimateStar (&gStarField [loop]);
-
- location = Project (gStarField [loop]);
- // RGBForeColor (&starColor);
- ForeColor (whiteColor);
-
- if (gStarField [loop].size == kLargeStar)
- DrawLargeStar (location);
- else
- DrawSmallStar (location);
- }
- }
-
- void DrawLargeStar (Point aPt)
- {
- Rect temp;
-
- temp.left = aPt.h - 1;
- temp.right = aPt.h + 1;
- temp.top = aPt.v - 1;
- temp.bottom = aPt.v + 1;
-
- PaintRect (&temp);
- }
-
- void DrawSmallStar (Point aPt)
- {
- MoveTo (aPt.h, aPt.v);
- LineTo (aPt.h, aPt.v);
- }
-
- Point Project (Star aStar)
- {
- Point temp;
-
- temp.h = aStar.x * kProjDistance / aStar.z + gOrigin.h;
- temp.v = aStar.y * kProjDistance / aStar.z + gOrigin.v;
-
- return temp;
- }
-
- void AnimateStar (Star *aStar)
- {
- aStar->z = aStar->z - gVelocity;
- if (aStar->z <= 0)
- CreateStar (aStar);
-
- aStar->x = aStar->x - 0;
- if (aStar->x <= 0)
- CreateStar (aStar);
-
- aStar->y = aStar->y - 0;
- if (aStar->y <= 0)
- CreateStar (aStar);
- }
-
- void CreateStar (Star *aStar)
- {
- aStar->x = GetRandom (0, gOrigin.h);
- if (GetRandom (0, 1) == 0)
- aStar->x = - aStar->x;
-
- aStar->y = GetRandom (0, gOrigin.v);
- if (GetRandom (0, 1) == 0)
- aStar->y = - aStar->y;
-
- aStar->z = GetRandom (0, 150) + 125;
-
- aStar->size = GetRandom (0, 1);
- }
-
- unsigned short GetRandom(unsigned short min, unsigned short max)
- {
- unsigned short random;
- long range, temp;
-
- random = Random();
- range = (max - min) + 1;
- temp = (random * range) / 65536;
- random = temp + min;
-
- return random;
- }
-
- void main (void)
- {
- short loop;
-
- InitToolbox ();
- InitStarField ();
- HideCursor ();
-
- while (! Button ())
- AnimateStarField ();
-
- ShowCursor ();
- }
-
-