var p:point;	//動き回る点
var ana:Array; //障害物
var hankei:Number; //障害物の半径

[setup, 400, 400]{
hankei = 20; //障害物の半径を決める
p = new point(200, 200); //点を初期化する
p.push(300, random()*Math.PI*2); //あらかじめ点をちょっとだけ動かしておく.
ana = new Array(); //障害物を配列として初期化して,
for(var i=0; i < 5; ++i){
for(var j=0; j < 5; ++j){
ana[i*10+j] = new point(40+i*80, 40+j*80); //縦横に規則的に並べる
}
}

setBackColor(63, 63, 63); //あらかじめ背景をグレーとしておく
}

[paint]{
clearAll(); //画面を初期化して
//障害物を描画する
setColor(0, 0, 0);
for(var i = 0; i < ana.length; ++i){
fillOval(ana[i], hankei*2, hankei*2);
}

//点を描画する
setColor(255, 255, 255);
fillOval(p, 20, 20);
}

[always]{
//現在の点の動いている方向を測って
var kakudo = Math.atan2(p.y - p.preY, p.x - p.preX);
p.push(5, kakudo); //その方向に点を押す


for(var i=0; i < ana.length; ++i){ //全ての障害物に対して
var dist = p.distanceTo(ana[i]); //点との距離を測って
if(dist < hankei){ //もし点と障害物の距離が半径以内(つまり障害物に点がぶつかっていたら)
p.push(20, Math.atan2(p.y-ana[i].y, p.x-ana[i].x)); //点を障害物から離れる方向に押す
}
}

//以下は,もし,点が壁にぶつかったら跳ね返らせている
if(p.x < 0){
p.bound(Math.PI/2, 1);
p.x = 0;
}

if(p.x > monitorWidth){
p.bound(Math.PI/2, 1);
p.x = monitorWidth;
}

if(p.y < 0){
p.bound(Math.PI, 1);
p.y = 0;
}

if(p.y > monitorWidth){
p.bound(Math.PI, 1);
p.y = monitorWidth;
}

}