home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / WINTUT1.ZIP / Tut1 / star.cpp < prev    next >
C/C++ Source or Header  |  1997-03-19  |  2KB  |  92 lines

  1. #include "stdafx.h"
  2. #include "star.h"
  3.  
  4. #define RANDOM( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))
  5.  
  6. CStarField::CStarField()
  7. {
  8.     for (int i = 0; i < g_nMaxStars; i++)
  9.         m_cStar[i] = NULL;
  10. }  // Constructor, gets called on creation of class
  11.  
  12. CStarField::~CStarField()
  13. {
  14.     for (int i = 0; i < g_nMaxStars; i++)
  15.         if (m_cStar[i])
  16.             delete m_cStar[i];
  17. }  // Deconstructor, gets called on destruction of class
  18.  
  19. BOOL CStarField::SetUpStars(int nNumStars)
  20. {
  21.     if (nNumStars > g_nMaxStars)
  22.     {
  23.         MessageBox (NULL, "Too many stars! Aborting!", "Error", 0);
  24.         return FALSE;
  25.     }
  26.  
  27.     for (int i = 0; i < g_nMaxStars; i++)
  28.         if (m_cStar[i])
  29.             delete m_cStar[i];
  30.  
  31.     m_nTotStars = nNumStars;
  32.     for (i = 0; i < nNumStars; i++)
  33.     {
  34.         m_cStar[i] = new CStar;
  35.         if (!m_cStar[i])
  36.         {
  37.             MessageBox (NULL, "Unable to allocate memory! Aborting!", "Error", 0);
  38.             return FALSE;
  39.         }
  40.         
  41.         do
  42.         {
  43.             m_cStar[i]->m_nXPos = RANDOM (-320, 320);
  44.             m_cStar[i]->m_nYPos = RANDOM (-200, 200);
  45.             m_cStar[i]->m_nZPos = i+1;
  46.             m_cStar[i]->m_nOldX = -1;
  47.             m_cStar[i]->m_nOldY = -1;
  48.         } while ((m_cStar[i]->m_nXPos == 0) || (m_cStar[i]->m_nYPos == 0));
  49.     }
  50.     
  51.     return TRUE;
  52. }
  53.  
  54. void CStarField::DrawStarField (HDC pDC)
  55. {
  56.     int nX, nY;
  57.     for (int i = 0; i < m_nTotStars; i++)
  58.     {
  59.         SetPixel (pDC, m_cStar[i]->m_nOldX, m_cStar[i]->m_nOldY, RGB (0, 0, 0));
  60.             //    Clear last position of this star
  61.  
  62.         nX = (int)((((long)m_cStar[i]->m_nXPos << 7) / (long)m_cStar[i]->m_nZPos) + m_nCenterX);
  63.         nY = (int)((((long)m_cStar[i]->m_nYPos << 7) / (long)m_cStar[i]->m_nZPos) + m_nCenterY);
  64.         SetPixel (pDC, nX, nY, RGB (0, 0, 255));
  65.             // Draw star
  66.  
  67.         m_cStar[i]->m_nOldX = nX;
  68.         m_cStar[i]->m_nOldY = nY;
  69.             // Remember current position for clearing later
  70.     }
  71. }
  72.  
  73. void CStarField::MoveStarField (int nXofs, int nYofs, int nZofs)
  74. {
  75.     for (int i = 0; i < m_nTotStars; i++)
  76.     {
  77.         m_cStar[i]->m_nXPos += nXofs;
  78.         m_cStar[i]->m_nYPos += nYofs;
  79.         m_cStar[i]->m_nZPos += nZofs;
  80.         if (m_cStar[i]->m_nZPos > m_nTotStars)
  81.             m_cStar[i]->m_nZPos -= m_nTotStars;
  82.         if (m_cStar[i]->m_nZPos < 1)
  83.             m_cStar[i]->m_nZPos += m_nTotStars;
  84.     }
  85. }
  86.  
  87. void CStarField::SetDimensions (int nWidth, int nHeight)
  88. {
  89.     m_nCenterX = nWidth / 2;
  90.     m_nCenterY = nHeight / 2;
  91. }
  92.