12月4日課題

・関数が呼び出された回数を数える
 
 
int x;
 
int count(void)
{
 x++;
 return x;
}
 
int main(void){
  
   x = 0;
 
   printf("ans = %d\n",count());
   printf("ans = %d\n",count());
   printf("ans = %d\n",count());
  
   return 0;
 
}

・関数化する

 
int win;
 
void fishDraw(double x,double y,double size)
{
  newpen(win, 2);            /* 赤色 */
  fillarc(win, x, y, size, size, 140.0, 220.0, -1); /* アタマを描く */
  line(win, x+size, y, PENUP); // 胴骨
  line(win, x+size*3.0, y, PENDOWN); // 胴骨
  line(win, x+size*4.0, y-size, PENDOWN); // 尾びれ
  line(win, x+size*3.0, y, PENUP); 
  line(win, x+size*4.0, y+size, PENDOWN); // 尾びれ
  newpen(win, 1);            /* 白色 */
  fillarc(win, x+size/3.0, y+size/2.0, size/4.0, size/4.0, 0.0, 360.0, 1); /* 目を入れる */
  for(int i=0; i<5; i++) { /* 胴骨 */
    line(win, x+size*1.2+i*size/3.0, y-size/2.0, PENUP); 
    line(win, x+size*1.2+i*size/3.0, y+size/2.0, PENDOWN); 
  }
}
 
int main() {
  
  double x, y, size, dx, dy;
 
  win=gopen(400,400);  /* 描画ウィンドウを開く */
  winname(win, "sample 1"); /* 名前をつける */
 
  x=200.0; y=200.0;    /* x, y 座標の初期設定 */
  size=15.0;                    /* アタマの半径を決める */
  dx=-0.8 * size;                /* x 方向の移動速度 */
  dy=0.4 * size;                /* y 方向の移動速度 */
 
  while(1) {
    gclr(win);                 /* 画面を消去 */
   
    fishDraw(x,y,size);
 
    if( y < size || y > (400.0 - size) ) dy*=(-1.0);
    y+= dy;  
    if( x < size || x > (400.0 - size) ) dx*=(-1.0);
    x+= dx;  
    msleep(50);                /* 少し待つ */
  }
 
}

・右向きに移動する関数を作成する
 
 
int win;
 
void fishDrawRight(double x,double y,double size)
{
 
  newpen(win, 2);            /* 赤色 */
  fillarc(win, x+size*4.0, y, size, size, 320.0, 40.0, -1); /* アタマを描く */
  line(win, x+size, y, PENUP); // 胴骨
  line(win, x+size*3.0, y, PENDOWN); // 胴骨
  line(win,x+size,y,PENUP);
  line(win, x, y-size, PENDOWN); // 尾びれ
  line(win, x+size, y, PENUP); 
  line(win, x, y+size, PENDOWN); // 尾びれ
  newpen(win, 1);            /* 白色 */
  fillarc(win, x+(4*size)-size/3.0, y+size/2.0, size/4.0, size/4.0, 0.0, 360.0, 1); /* 目を入れる */
  for(int i=0; i<5; i++) { /* 胴骨 */
    line(win, x+size*1.2+i*size/3.0, y-size/2.0, PENUP); 
    line(win, x+size*1.2+i*size/3.0, y+size/2.0, PENDOWN); 
  }
}
 
 
void fishDrawLeft(double x,double y,double size)
{
  newpen(win, 2);            /* 赤色 */
  fillarc(win, x, y, size, size, 140.0, 220.0, -1); /* アタマを描く */
  line(win, x+size, y, PENUP); // 胴骨
  line(win, x+size*3.0, y, PENDOWN); // 胴骨
  line(win, x+size*4.0, y-size, PENDOWN); // 尾びれ
  line(win, x+size*3.0, y, PENUP); 
  line(win, x+size*4.0, y+size, PENDOWN); // 尾びれ
  newpen(win, 1);            /* 白色 */
  fillarc(win, x+size/3.0, y+size/2.0, size/4.0, size/4.0, 0.0, 360.0, 1); /* 目を入れる */
  for(int i=0; i<5; i++) { /* 胴骨 */
    line(win, x+size*1.2+i*size/3.0, y-size/2.0, PENUP); 
    line(win, x+size*1.2+i*size/3.0, y+size/2.0, PENDOWN); 
  }
}
 
 
int main(void) {
  
  double x, y, size, dx, dy;
 
  win=gopen(400,400);  /* 描画ウィンドウを開く */
  winname(win, "sample 1"); /* 名前をつける */
 
  x=200.0; y=200.0;    /* x, y 座標の初期設定 */
  size=15.0;                    /* アタマの半径を決める */
  dx=-0.8 * size;                /* x 方向の移動速度 */
  dy=0.4 * size;                /* y 方向の移動速度 */
 
  while(1) {
    gclr(win);                 /* 画面を消去 */
   
   
    if(dx >= 0)
      fishDrawRight(x,y,size);
    else
      fishDrawLeft(x,y,size);
      
    if( y < size || y > (400.0 - size) )  dy*=(-1.0);
    if( x < size || x > (400.0 - size) )  dx*=(-1.0);
    
    y+= dy;
    x+= dx;  
    msleep(50);                /* 少し待つ */
  }
 
}
 

 

 

無料でホームページを作成しよう Webnode