/*
  EGGX を使ったアニメーション  044192
*/

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

int main() {
  int win;
  int bound;
  int speed;
  float x, y, dx, dy;  
  float right, left;

  win=gopen(600,400);  /* 描画ウィンドウを開く */
  winname(win, "kadai3"); /* 名前をつける */
  
  newpen(win, 1);  /* 色は白 */
  
  speed=8;

  x=30.0;  /*ボールの初期 x 座標位置 */
  y=55.0;  /*ボールの初期 y 座標位置 */
  dx=4.0;  /*ボールの x 方向の移動速度 */
  dy=1.0;  /*ボールの y 方向の移動速度 */
  
  right=250.0; /*右の板の中心の初期 y 座標*/
  left=150.0; /*左の板の中心の初期 y 座標*/

  while(1) {
    gclr(win);                 /* 画面を消去 */
    fillarc(win, x, y, 10.0, 10.0, 0.0, 360.0, 1); /* 丸を描く */
    x+= dx;  
    y+= dy;  
    
    fillrect(win, 585.0, right-50.0, 10.0, 100.0);
    fillrect(win, 5.0, left-50, 10.0, 100.0);
    
    if((x >= 585.0) && (y >= right-50.0) && (y <= right+50.0)){
      dx= -dx;
      bound = bound + 1;
    }
    if((x <= 15.0) && (y >= left-50.0) && (y <= left+50.0)){
      dx= -dx;
      bound = bound + 1;
    }
    if(y >= 385.0 || y <= 15.0){
      dy= -dy;
    }
    /*ここから先を上手く整理することができませんでした。*/

    if(bound%2==0){        //左が打ち返した際の右の動き
      if(y >= right){
	if(dy<0){
	  right+= -dy;
	}
	else{
	  right+= dy;
	}
      }
      else{
	if(dy<0){
	  right+= dy;
	}
	else{
	  right+= -dy;
	}
      }

      if(left>=198.0){     //打ち返した後左が定位置に戻る動き
	if(dy<0){
	  left+= dy;
	}
	else{
	  left+= -dy;
	}
      }
      else{
	if(dy<0){
	  left+= -dy;
	}
	else{
	  left+= dy;
	}
      }
    }
    else{                 //右が打ち返した際の左の動き
      if(y >= left){
	if(dy<0){
	  left+= -dy;
	}
	else{
	  left+= dy;
	}
      }
      else{
	if(dy<0){
	  left+= dy;
	}
	else{
	  left+= -dy;
	}
      }

      if(right>=198.0){   //打ち返した後右が定位置に戻る動き
	if(dy<0){
	  right+= dy;
	}
	else{
	  right+= -dy;
	}
      }
      else{
	if(dy<0){
	  right+= -dy;
	}
	else{
	  right+= dy;
	}
      }
    }
    
    
    if(bound == 5){
      newpen(win,7); //黄色に変化
      speed=3;       //加速
    }
    if(bound==20){
      newpen(win,2); //赤に変化
      speed=2;       //さらに加速
    }
    if(bound==40){
      speed=1;       //もっと加速
    }
    if(bound==99){
      speed=15;      //スローモーション
      left=180;      //左静止
    }
    if(x<0)break;

    msleep(speed);                /* 少し待つ */
  }
  
    ggetch();
  gclose(win);
  
  return 0;
  
}

