#include<stdio.h>
#include<stdlib.h>
#include<eggx.h>

/*
  044129
*/
/*
方向性-->バウンドして波紋を広げる
--->白玉のあとに、RGBを予定していたが実装できませんでした
*/
int main()
{
  float x,y;//x,y座標
  float R_x,R_y;//波紋の中心座標
  float i;
  float dy;
  float g;
  float time;

  int limit;
  int win;
  int bound;
  int cnt;

  limit=5;
  i=0.01;
  time=0.00;//タイマーもどき
  x=300.0;
  y=600.0;
  g=9.8;

  R_x=300;
  R_y=200;
  int ripple_flag[limit];//波紋  
  float Rip_w[limit],Rip_h[limit];//縦方向、横方向//
  for(bound=0;bound<limit;bound++)
    {
	  ripple_flag[bound]=0;
	  Rip_w[bound]=0;
	  Rip_h[bound]=0;
    }
  bound=0;
  win = gopen(600,600);
  winname(win,"bound");
  newpen(win,1);
  while(1)
    {
      msleep(10);
      gclr(win);
      //波紋 白//
      for(cnt=0;cnt<limit;cnt++)
	{
	  if(ripple_flag[cnt])
	    {
	      drawarc(win,R_x,R_y,Rip_w[cnt],Rip_h[cnt]*(1.0-0.2),0.0,180.0,1);
	      drawarc(win,R_x,R_y,Rip_w[cnt],Rip_h[cnt],180.0,360.0,1);
	      Rip_w[cnt]+=1.0;
	      Rip_h[cnt]+=0.5;
	    }
	}
      //波紋 白//
      /////////メイン白玉  ↓/////////
      fillcirc(win,x,y,10.0,10.0);
      dy=(0.5)*g*time;
      y=y-dy;
      time=time+i;
      if(y<200.0)//sita
	{
	  g=-g;
	  i=-i;
	  time=time*0.8;
	  ripple_flag[bound]=1;
	  bound++;
	  printf("%d\n",bound);
	  printf("y--->%f\n",y);
	}
      if(bound>limit)
       {
	  break;
       }
      ///////////メイン白玉　↑///////////
    }  
  while(1)//白玉固定
    {
      msleep(10);
      gclr(win);
      fillcirc(win,x,y,10.0,10.0);
      for(cnt=0;cnt<limit;cnt++)
	{
	  if(ripple_flag[cnt])
	    {
	      drawarc(win,R_x,R_y,Rip_w[cnt],Rip_h[cnt]*(1.0-0.2),0.0,180.0,1);
	      drawarc(win,R_x,R_y,Rip_w[cnt],Rip_h[cnt],180.0,360.0,1);
	      Rip_w[cnt]+=1.0;
	      Rip_h[cnt]+=0.5;
	    }
	}
      if(Rip_w[4]>800)
	{
	  break;
	}
    }
  ggetch();
  gclose(win);
  
  return 0;
}


/*
自由落下に関しては偶然の産物なのでもう少しきちんとしたにしたかった。
独自の関数を作ってもよかったのだろうか……
もう少しコンパクトにできた気がする……
もう少しカラフルにする予定でしたが実装できませんでした。
*/
