9.6 The solution

The complete class and app for this chapter is listed below for reference. Please compare this with your own result.

De class movingCircle:

 
class movingCircle 
{ 
   Circle c    ; 
   Vec2   speed; 
5   Color  color; 
 
   void create(float radius, Vec2 pos, Vec2 speed, Color color) 
   { 
      c.r     = radius; 
10      c.pos   = pos   ; 
      T.speed = speed ; 
      T.color = color ; 
   } 
 
15   bool move() 
   { 
      Vec2 newPos = c.pos + speed * Time.d(); 
      if(Cuts(newPos, D.viewRect())) 
      { 
20         c.pos = newPos; 
         return true
      } else return false
   } 
 
25   Vec2 getPos() 
   { 
      return c.pos; 
   } 
 
30   void setPos(Vec2 pos) 
   { 
      c.pos = pos; 
   } 
 
35   void reset() 
   { 
      c.pos = 0; 
   } 
 
40   void draw() 
   { 
      c.draw(color); 
   } 
}  
45

The application:

 
Memc<movingCircle> circles; 
 
void InitPre() 
{ 
5   EE_INIT(); 
} 
 
bool Init() 
{ 
10   return true
} 
 
void Shut() {} 
 
15bool Update() 
{ 
   if(Kb.bp(KB_ESC)) return false
 
   if(Kb.bp(KB_SPACE)) 
20   { 
      circles.New().create(RandomF(0.05, 0.1), 
                           Vec2(0), 
                           Vec2(RandomF(-1, 1), RandomF(-1, 1)), 
                           Color(Random(255), Random(255), Random(255)) 
25                           ); 
   } 
 
   if(Kb.bp(KB_F1)) 
   { 
30      REPA(circles) 
      { 
         circles[i].setPos(Vec2(RandomF(-D.w(), D.w()), RandomF(-D.h(), D.h()))); 
      } 
   } 
35 
   REPA(circles) 
   { 
      if(!circles[i].move()) circles[i].reset(); 
   } 
40 
   return true
} 
 
void Draw() 
45{ 
   D.clear(BLACK); 
 
   REPA(circles) 
   { 
50      circles[i].draw(); 
   } 
}