ねるねるねるね

by phi16
スペースをおそう
ねればねるほど・・・とくにないよ
♥0 | Line 250 | Modified 2014-12-02 00:40:37 | MIT License
play

ActionScript3 source code

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

package {
    import flash.text.FontStyle;
    import flash.geom.Point;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.text.TextFormat;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    public class Neru extends Sprite {
        public var spr:Sprite=new Sprite();
        public var w:Number=465,h:Number=465;
        public var neData:Array=[55.741471,10.28401,4.79822,0.021,9.59645,0.0421,14.394669,0.0631,-5.261209,4.31419,-10.522419,8.62839,-15.783629,12.94258,0,0,6.37659,-4.48255,13.70019,-2.33598,3.661809,1.07329,5.271739,2.856843,5.934649,4.458883,0.66292,1.60204,0.37881,3.022567,0.25254,3.369807,-0.25254,0.69448,-0.78921,5.65708,-9.733549,6.74007,-4.62955,0.56055,-5.44009,-1.65231,-5.36171,-2.81243,0.11817,-1.74924,1.20883,-3.06318,3.54164,-3.04376,2.10739,0.0175,3.04624,1.34161,3.63023,2.19392,0.584,0.85232,0.72605,1.81512,0.97859,2.85684];
        public var ruData:Array=[47.547019,15.301239,3.78807,-0.0421,7.57615,-0.0842,11.36422,-0.12627,-3.40926,5.3033,-6.81853,10.6066,-10.22779,15.9099,4.12479,-3.43031,8.0286,-6.13457,12.69003,-9.34391,0,0,4.54569,-3.12515,6.69227,-3.4724,3.77923,-0.61136,5.3033,2.58852,5.3033,2.58852,0,0,1.76776,2.65165,0.31567,9.65958,-1.45209,7.00794,-7.00793,4.48255,-7.00793,4.48255,-1.53407,-0.82854,-1.8324,-2.22846,-0.44195,-3.78807,0,0,1.95718,-2.58851,5.99779,-0.94702,4.04061,1.6415,5.93464,3.15673,5.93464,3.15673];
        public var stick:Array=[52.534649,9.619129,0,26.01143,0,26.01143,0,26.01143];
        public var stickRu:Point=new Point(42,-30);
        public var fuPos:Point=new Point(-120/2,-75/2);
        public var dataSize:int=10;
        public var time:Number=0;
        public var rus:Array=new Array();
        public var sendRu:int=0;
        public var curRu:int=-5;
        public var pumpPos:Number=0;
        public var u:int=4;
        public var pushed:int=-1;
        public var tef:TextField=new TextField();
        public var tev:TextField=new TextField();
        public var ten:TextField=new TextField();
        public var sPos:Array=[340,345,345];
        public var sName:Array=["Perfect","Cool","Good"];
        public var score:int=0;
        public var count:int=0,chain:int=0;
        public var lost:Boolean=false;
        public var next:Boolean=false;//Ne.Ru
        public var befSpace:Boolean=false;
        public function Neru() {
            this.addChild(spr);
            this.addEventListener(Event.ENTER_FRAME,frame);
            stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
            stage.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
            {
                tef.defaultTextFormat=new TextFormat("Arial",30,0xffffff);
                tef.defaultTextFormat.align="center";
                tef.x=330;
                tef.y=300;
                tef.width=100;
                tef.height=100;
                tef.text="Test";
                tef.alpha=0;
                addChild(tef);
            }
            {
                tev.defaultTextFormat=new TextFormat("Arial",60,0xffffff);
                tev.defaultTextFormat.align="center";
                tev.x=20;
                tev.y=h-80;
                tev.width=w;
                tev.height=80;
                tev.text="0";
                tev.alpha=0.5;
                addChild(tev);
            }
            {
                ten.defaultTextFormat=new TextFormat("Arial",10,0xffffff);
                ten.defaultTextFormat.align="center";
                ten.x=20;
                ten.y=h-140;
                ten.width=w-40;
                ten.height=80;
                ten.text=""
                ten.alpha=0.5;
                ten.multiline=true;
                ten.wordWrap=true;
                addChild(ten);
            }
            for(var i:int=0;i<10;i++){
                rus.push(new Ru(w+100,300,sendRu));
                sendRu++;
            }
        }
        public function frame(e:Event):void{
            spr.graphics.clear();
            spr.graphics.beginFill(0xffffff);
            spr.graphics.drawRect(0,0,w,h);
            spr.graphics.beginFill(0x602f00);
            spr.graphics.drawRect(0,h/2+40,w,h/2-40);
            spr.graphics.beginFill(0x854720);
            spr.graphics.drawRect(0,h/2+50,w,h/2-50);
            spr.graphics.endFill();
            spr.graphics.lineStyle(12,0x000000);
            spr.graphics.moveTo(380,0);
            spr.graphics.lineTo(380,pumpPos+h/6);
            pumpPos+=(0-pumpPos)/4.0;
            tef.alpha+=(0-tef.alpha)/8.0;
            spr.graphics.lineStyle(6,0x000000);
            drawNeru(100,100,2,(Math.sin(time/4)+1)/2*1.2);
            while(rus.length<10){
                rus.push(new Ru(w+100,300,sendRu));
                sendRu++;
            }
            if(time%30==0){
                curRu++;
            }
            for(var i:int=0;i<rus.length;i++){
                if(rus[i].x<-100){
                    rus.splice(i,1),i--;
                    continue;
                }
                if(u==3 && !rus[i].onStick){
                    if(355<rus[i].x && rus[i].x<365 && pushed!=rus[i].p){
                        rus[i].onStick=true; 
                        rus[i].stickP.x=stickRu.x;
                        rus[i].stickP.y=stickRu.y;
                        pushed=rus[i].p;
                        var cu:int=Math.abs(rus[i].x-360);
                        tef.x=sPos[Math.floor((cu+1)/2)];
                        tef.text=sName[Math.floor((cu+1)/2)];
                        tef.alpha=1;
                    }else if(300<rus[i].x && rus[i].x<420){
                        pushed=rus[i].p;
                        tef.x=350;
                        tef.text="Bad";
                        tef.alpha=1;
                    }
                }
                if(time%30==0 && rus[i].tx==360){
                    if(chain==0)lost=false;
                    if(rus[i].onStick){
                        if(!next)ten.appendText("ね"),next=true,count++;
                        else lost=true;
                    }else{
                        if(next){
                            if(ten.text=="")ten.appendText("ね");
                            ten.appendText("る"),next=false;
                        }
                        else lost=true;
                    }
                    if(lost)ten.text="",count=0;
                    else if(count>=4 && next==true)addChain();
                }
                rus[i].draw(this);
                rus[i].tick(curRu);
            }
            if(lost && chain>0){
                score++;
                chain--;
                refreshScore();
                if(chain==0)lost=false,next=false,count=0;
            }
            time++;
            u++;
        }
        public function addChain():void{
            if(lost)score+=chain,chain=1;
            else chain++;
            refreshScore();
        }
        public function refreshScore():void{
            if(chain>0)tev.text=String(score)+"+"+String(chain);
            else tev.text=String(score);
        }
        public function onKeyDown(e:KeyboardEvent):void{
            if(e.keyCode==Keyboard.SPACE && u>10 && !befSpace){
                pumpPos=h/12+h/3;
                u=0;
                befSpace=true;
            }
        }
        public function onKeyUp(e:KeyboardEvent):void{
            if(e.keyCode==Keyboard.SPACE && befSpace)befSpace=false;
        }
        public function drawNeru(x:Number, y:Number, s:Number, g:Number):void{
            var dx:Number=x+(fuPos.x+linear(neData[0],ruData[0],g))*s;
            var dy:Number=y+(fuPos.y+linear(neData[1],ruData[1],g))*s;
            var cx:Number=0,cy:Number=0;
            spr.graphics.moveTo(dx,dy);
            for(var i:int=2;i<2+dataSize*6;i+=6){
                spr.graphics.cubicCurveTo(dx+(cx+linear(neData[i],ruData[i],g))*s,
                                          dy+(cy+linear(neData[i+1],ruData[i+1],g))*s,
                                          dx+(cx+linear(neData[i+2],ruData[i+2],g))*s,
                                          dy+(cy+linear(neData[i+3],ruData[i+3],g))*s,
                                          dx+(cx+linear(neData[i+4],ruData[i+4],g))*s,
                                          dy+(cy+linear(neData[i+5],ruData[i+5],g))*s);
                cx+=linear(neData[i+4],ruData[i+4],g);
                cy+=linear(neData[i+5],ruData[i+5],g);
            }
        }
        public function drawStick(x:Number, y:Number, s:Number):void{
            var dx:Number=x+(fuPos.x+stick[0])*s;
            var dy:Number=y+(fuPos.y+stick[1])*s;
            spr.graphics.moveTo(dx,dy);
            for(var i:int=2;i<8;i+=6){
                spr.graphics.cubicCurveTo(dx+stick[i]*s,
                                          dy+stick[i+1]*s,
                                          dx+stick[i+2]*s,
                                          dy+stick[i+3]*s,
                                          dx+stick[i+4]*s,
                                          dy+stick[i+5]*s);
            }
        }
        public function linear(a:Number, b:Number, g:Number):Number{
            return a*(1-g)+b*g;
        }
    }
}
import flash.display.Graphics;
import flash.geom.Point;

class Ru{
    public var x:Number,y:Number,tx:Number;
    public var p:int;
    public var grade:Number=0;
    public var onStick:Boolean;
    public var stickP:Point=new Point(0,0);
    function Ru(x_:Number, y_:Number,p_:int){
        x=x_,y=y_;
        tx=x;
        p=p_;
    }
    public function draw(n:Neru):void{
        n.spr.graphics.lineStyle(0,0,0);
        n.spr.graphics.beginFill(0,0.3);
        n.spr.graphics.drawEllipse(x-30,y-13,80,20);
        n.spr.graphics.endFill();
        n.spr.graphics.lineStyle(12,0x000000);
        n.drawNeru(x,y,4,grade);
        if(onStick){
            n.spr.graphics.lineStyle(12,0x000000);
            n.drawStick(x+stickP.x,y+stickP.y,4);
        }
        n.spr.graphics.lineStyle(6,mkC(0+64*grade,64-64*grade,0+64*grade));
        n.drawNeru(x,y,4,grade);
        if(onStick){
            n.spr.graphics.lineStyle(6,mkC(64*grade,0,64*grade));
            n.drawStick(x+stickP.x,y+stickP.y,4);
        }
    }
    public function tick(i:int):void{
        tx=(p-i)*140+80;
        x+=(tx-x)/4.0;
        if(onStick){
            grade+=(1-grade)/4.0;
            stickP.x+=(0-stickP.x)/4.0;
            stickP.y+=(0-stickP.y)/4.0;
        }
    }
    public function mkC(r:int,g:int,b:int):int{
        return r*65536+g*256+b;
    }
}

Forked