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); /* 少し待つ */
}
}
|