[1.1] ブロック崩しのようなイメージで動いているバーにボールが当たったら跳ね返るようにしたいです
バーもボールと同じ座標で動かないよう各々動かしたいです
[1.2]
#include <stdio.h> #include <stdlib.h> #include <eggx.h> int win; int square(void){ newpen(win, 2); fillrect(win, 150.0, 150.0, 200.0, 200.0); } int upbar(float x){ float dx; dx=5.0; newpen(win, 9); fillrect(win, 320.0+x, 480.0, 80.0, 20.0); x+= dx; if(x>480.0){ x-= dx; } else if(x<20.0){ x+= dx; } } int downbar(float x){ float dx; dx=5.0; newpen(win, 9); fillrect(win, 50.0+x, 0.0, 80.0, 20.0); x+= dx; if(x>480.0){ x-= dx; } else if(x<20.0){ x+= dx; } } int rightbar(float y){ float dy; dy=5.0; newpen(win, 9); fillrect(win, 480.0, 260.0+y, 20.0, 80.0); y+= dy; if(y>480.0){ y-= dy; } else if(y<20.0){ y+= dy; } } int leftbar(float y){ float dy; dy=5.0; newpen(win, 9); fillrect(win, 0.0, 180.0+y, 20.0, 80.0); y-= dy; if(y>480.0){ y-= dy; } else if(y<20.0){ y+= dy; } } int main(){ float x, y, dx, dy; win=gopen(500,500);//描画ウインドウを開く winname(win, "reflect");//名前をつける gsetbgcolor(win, "white");//背景を白に指定 gclr(win);//背景を白に塗りつぶす x=40.0; y=30.0; dx=10.0; dy=10.0; while(1){ gclr(win); square(); //中央に赤の正方形を表示 upbar(x); //上側に灰の長方形を表示 downbar(x); // 下側に灰の長方形を表示 rightbar(y); // 右側に灰の長方形を表示 leftbar(y); // 左側に灰の長方形を表示 newpen(win, 5); fillarc(win, x, y, 10.0, 10.0, 0.0, 360.0, 1);//丸を表示 x+= dx; y+= dy; if( 150.0<=x && x<=350.0 && y==140.0 ){ dy= -dy; //中央ブロック下端に当たった時の処理 } else if( 150.0<=x && x<=350.0 && y==360.0 ){ dy= -dy; //中央ブロック上端に当たった時の処理 } else if( 150.0<=y && y<=350.0 && x==360.0 ){ dx= -dx; //中央ブロック右端に当たった時の処理 } else if( 150.0<=y && y<=350.0 && x==140.0 ){ dx= -dx; //中央ブロック左端に当たった時の処理 } else if( x==140 && y==140 || x==360 && y==140 || x==360 && y==140 || x==360 && y==360 ){ dx= -dx; dy= -dy; //中央ブロックの角に当たった時の処理 } msleep(70); } }
サブルーチンを使わないといけないのでmain関数の中のxとyを引数に持ってきて上記のプログラムの様にしました
[1.3] バーの動かし方が分からずまた接触判定をどうすればいいのか困っていますので、サブルーチンの中でどう書けばいいのか教えていただきたいです
[2] 環境
[2.1] OS : Mac OS X
[2.2] コンパイラ名 : egg
[3] その他
初心者なのでほとんど分からない状態です
期限が間近なので早めに回答頂けたら幸いです