kansen

by katsumi forked from 3D rotation 01 (diff: 199)
重いです
シュミレーションチックなflashです。
赤が感染者で半径5pxの中に入ると一定の割合で感染します
感染者は1秒(33フレーム)で治ります。
壁では跳ね返ります。
♥2 | Line 148 | Modified 2009-08-25 15:19:59 | MIT License
play

ActionScript3 source code

/**
 * Copyright katsumi ( http://wonderfl.net/user/katsumi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/h9yX
 */

//重いです

//シュミレーションチックなflashです。
//赤が感染者で半径5pxの中に入ると一定の割合で感染します
//感染者は1秒(33フレーム)で治ります。
//壁では跳ね返ります。
package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    public class FlashTest extends Sprite {
        private var kosu:Number=200;    //粒の数
        private var dot:Array;
        private var rate:Number=50;    //感染率
        private var init_num:Number=1;   //最初の感染者の数 
        private var SW:Number;
        private var SH:Number;
        private var screen:Sprite;
  
    public function FlashTest() {
        SW=stage.stageWidth;
        SH=stage.stageHeight;
        dot=new Array();
        
        screen = new Sprite();
        screen.graphics.clear();
        screen.x=0;
        screen.y=0;
        this.addChild(screen);
        
        for(var i:Number=0;i<kosu;i++){
            if(i<init_num){
             dot.push(new Particle(1));
             }else{
              dot.push(new Particle(0));
             }   
            
            dot[i].x = SW*Math.random();
            dot[i].y = SH*Math.random();
            
            this.addChild(dot[i]);
        }
                
            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            
         }
         
         private function enterFrameHandler(e:Event):void {
            var kenko:Array=new Array();
            var kansen:Array=new Array();
            screen.graphics.clear();
             screen.graphics.beginFill(0x0000ff,0.2);
             for(var i:Number=0;i<kosu;i++){
               dot[i].x+=dot[i].u;
               dot[i].y+=dot[i].v;
               
               boundary2(i);  
               dot[i].chg_v();
               
               if(dot[i].state==1){
                   dot[i].kaihuku();
                   kansen.push(dot[i]);
               }else{
                   kenko.push(dot[i]);
                }
              }
               for(var j:Number=0;j<kansen.length;j++){               
                   for(i=0;i<kenko.length;i++){
                     if(kenko[i].hitTestObject(kansen[j])){
                        if(100*Math.random()<rate){
                        kenko[i].kansen(); 
                        }
                     }    
                   }
               }
               
             
         }
         
         private function boundary(i:Number):void{
                 
                 if(dot[i].x<0){
                     dot[i].x+=SW;
                 }else if(dot[i].x>SW){
                     dot[i].x-=SW;
                 }
                 
                  if(dot[i].y<0){
                     dot[i].y+=SH;
                 }else if(dot[i].y>SH){
                     dot[i].y-=SH;
                 }
         }
         private function boundary2(i:Number):void{
                 //剛体壁境界
                 if(dot[i].x<0){
                     dot[i].x=0;
                     dot[i].chg_v2()
                 }else if(dot[i].x>SW){
                     dot[i].x=SW;
                     dot[i].chg_v2()
                 }
                 
                  if(dot[i].y<0){
                     dot[i].y=0;
                     dot[i].chg_v2()
                 }else if(dot[i].y>SH){
                     dot[i].y=SH;
                     dot[i].chg_v2()
                 }
                 
         }
  
    }
 }


     import flash.display.*;
     class Particle extends Sprite {
     
         
         public var state:Number;
         public var u:Number;
         public var v:Number;
         private var v_size:Number;
         private var v_theta:Number;
         private var day:Number;
         
         public function Particle(state:Number=0){
             this.state=state;
             this.v_size = Math.random()*5; 
             this.v_theta = Math.random()*360;
             this.u = v_size*Math.cos(v_theta*Math.PI/180);
             this.v = v_size*Math.sin(v_theta*Math.PI/180);             
             
             this.graphics.clear();
             this.graphics.lineStyle(0,0,0);
             
             if(state==0){
                 this.graphics.beginFill(0x00ffff);
             }else{
                 this.graphics.beginFill(0xff0000,0);
                 this.graphics.drawCircle(0,0,10);
                 this.graphics.beginFill(0xff0000);
                 this.day=33;              
             }
             this.graphics.drawCircle(0,0,2);
             this.graphics.endFill();
         }
         public function kansen():void{
             this.state=1;
             this.graphics.clear();
             this.graphics.beginFill(0xff0000,0);
             this.graphics.drawCircle(0,0,10);
             this.graphics.beginFill(0xff0000);
             this.graphics.drawCircle(0,0,2);
             this.graphics.endFill();
             this.day=33;
         }
         public function chg_v():void{
             this.v_theta += Math.random()*45-22.5;
             //this.v_size += Math.random()*1-0.5;
             this.u = v_size*Math.cos(v_theta*Math.PI/180);
             this.v =v_size*Math.sin(v_theta*Math.PI/180);                 
         }
         public function chg_v2():void{
             this.v_theta += 180;
             this.u = v_size*Math.cos(v_theta*Math.PI/180);
             this.v =v_size*Math.sin(v_theta*Math.PI/180);                 
         }
         public function kaihuku():void{
             this.day-=1;
             if(day==0){
                 this.state=0;
                 this.graphics.clear();
                 this.graphics.beginFill(0x00ffff);
                 this.graphics.drawCircle(0,0,2);
                 this.graphics.endFill();
             }
         }
         
     }