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

int main() {
  int win;
  int color,count;
  float x,y,dx,dy,x1,y1,dx1,dy1,x2,y2,dx2,dy2,x3,y3,dx3,dy3,x4,y4,dx4,dy4,x5,y5,dx5,dy5,x6,y6,dx6,dy6,x7,y7,dx7,dy7,x8,y8,dx8,dy8,x9,y9,dx9,dy9;
  win=gopen(400,600);  /* 描画ウィンドウを開く */
  winname(win, "sample 1"); /* 名前をつける */
  color=1; 
  count=0;
  x=200.0;  /* x 座標位置 */
  y=30.0;  /* y 座標位置 */
  dx=10.0;  /* x 方向の移動速度 */
  dy=10.0;  /* y 方向の移動速度 */
  
  while(y<=300) {
    gclr(win);                 /* 画面を消去 */
    newpen(win, color);
    fillarc(win, x, y, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, 200, 320, 10.0, 10.0, 0.0, 360.0, 1); /* 丸を描く */
    color++;
    newpen(win, color);
    fillarc(win, 210, 336, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, 190, 336, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, 200, 353, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, 220, 353, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, 180, 353, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, 190, 370, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, 210, 370, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, 200, 387, 10.0, 10.0, 0.0, 360.0, 1);
    color=1;
    y+=dy; 
    msleep(50);                /* 少し待つ */
  }
  dy=-dy*1.5;
  x1=200;
  y1=320;
  x2=210;
  y2=336;
  x3=190;
  y3=336;
  x4=200;
  y4=353;
  x5=220;             //各玉を動かすため
  y5=353;
  x6=180;
  y6=353;
  x7=190;
  y7=370;
  x8=210;
  y8=370;
  x9=200;
  y9=387;

  dx1=7.0;
  dy1=5.0;
  dx2=5.0;
  dy2=9.0;
  dx3=-6.0;
  dy3=-6.0;
  dx4=9.0;
  dy4=6.0;
  dx5=0.0;       //各玉の速度
  dy5=10.5;
  dx6=-5.0;
  dy6=9.0;
  dx7=-4.0;
  dy7=9.0;
  dx8=9.0;
  dy8=5.0;
  dx9=-8.0;
  dy9=9.0;
  while(count<200){
    gclr(win);                 /* 画面を消去 */
    newpen(win, color);
    fillarc(win, x, y, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, x1, y1, 10.0, 10.0, 0.0, 360.0, 1); /* 丸を描く */
    color++;
    newpen(win, color);
    fillarc(win, x2, y2, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, x3, y3, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, x4, y4, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, x5, y5, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, x6, y6, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, x7, y7, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, x8, y8, 10.0, 10.0, 0.0, 360.0, 1);
    color++;
    newpen(win, color);
    fillarc(win, x9, y9, 10.0, 10.0, 0.0, 360.0, 1);
    color=1;
    if(x>=380 || x<=20){       //壁判定
      dx=-dx;
    }
    if(y>=580 || y<=20){
      dy=-dy;
    }
    if(x1>=380 || x1<=20){
      dx1=-dx1;
    }
    if(y1>=580 || y1<=20){
      dy1=-dy1;
    }
    if(x2>=380 || x2<=20){
      dx2=-dx2;
    }
    if(y2>=580 || y2<=20){
      dy2=-dy2;
    }
    if(x3>=380 || x3<=20){
      dx3=-dx3;
    }
    if(y3>=580 || y3<=20){
      dy3=-dy3;
    }
    if(x4>=380 || x4<=20){
      dx4=-dx4;
    }
    if(y4>=580 || y4<=20){
      dy4=-dy4;
    }
    if(x5>=380 || x5<=20){
      dx5=-dx5;
    }
    if(y5>=580 || y5<=20){
      dy5=-dy5;
    }
    if(x6>=380 || x6<=20){
      dx6=-dx6;
    }
    if(y6>=580 || y6<=20){
      dy6=-dy6;
    }
    if(x7>=380 || x7<=20){
      dx7=-dx7;
    }
    if(y7>=580 || y7<=20){
      dy7=-dy7;
    }
    if(x8>=380 || x8<=20){
      dx8=-dx8;
    }
    if(y8>=580 || y8<=20){
      dy8=-dy8;
    }
    if(x9>=380 || x9<=20){
      dx9=-dx9;
    }
    if(y9>=580 || y9<=20){
      dy9=-dy9;
    }
    dx=dx*0.99;
    dy=dy*0.99;
    dx1=dx1*0.99;
    dy1=dy1*0.99;
    dx2=dx2*0.99;
    dy2=dy2*0.99;
    dx3=dx3*0.99;
    dy3=dy3*0.99;
    dx4=dx4*0.99;      //摩擦っぽいもの
    dy4=dy4*0.99;
    dx5=dx5*0.99;
    dy5=dy5*0.99;
    dx6=dx6*0.99;
    dy6=dy6*0.99;
    dx7=dx7*0.99;
    dy7=dy7*0.99;
    dx8=dx8*0.99;
    dy8=dy8*0.99;
    dx9=dx9*0.99;
    dy9=dy9*0.99;
    y+=dy; 
    x1+=dx1;
    y1+=dy1; 
    x2+=dx2;
    y2+=dy2; 
    x3+=dx3;
    y3+=dy3; 
    x4+=dx4;
    y4+=dy4; 
    x5+=dx5;
    y5+=dy5; 
    x6+=dx6;
    y6+=dy6; 
    x7+=dx7;
    y7+=dy7; 
    x8+=dx8;
    y8+=dy8; 
    x9+=dx9;
    y9+=dy9;
    count++;
    msleep(50);                /* 少し待つ */
  }

  
  ggetch();
  gclose(win);
  
  return 0;
  
}
/*
結果的にビリヤードみたいなものを作りましたが、それぞれの玉を動かす為にそれぞれの変数が必要だと思い、とても見にくいプログラミングになってしまいました。
色々な部分をまとめられるような気がしますが、思いつきませんでした。

また、玉同士がぶつかった時にはどうしたらいいのかがわからなく、結果的にすり抜ける玉になってしまいました。

後、画面端で引っかかってしまう原因もわかりません。
*/
