ねるねるねるね(引く版)
forked from ねるねるねるね (diff: 54)
交互に押すだけだこれ!!!! ↑↓
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/gz78
*/
// forked from phi16's ねるねるねるね
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 vacuPos:Number=0;
public var u:int=4;
public var v: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 befDown:Boolean=false;
public var befUp:Boolean=false;
public var colP:Number=0;
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,10);
spr.graphics.beginFill(0x854720);
spr.graphics.drawRect(0,h/2+50,w-160,h/2-50);
spr.graphics.drawRect(w-110,h/2+50,w,h/2-50);
spr.graphics.beginFill(0xa0804f);
spr.graphics.drawRect(w-160,h/2+50,50,30);
spr.graphics.endFill();
colP+=(0-colP)/4.0;
pumpPos+=(0-pumpPos)/4.0;
vacuPos+=(0-vacuPos)/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(v==3 && rus[i].onStick){
if(355<rus[i].x && rus[i].x<365 && pushed!=rus[i].p){
rus[i].onStick=false;
rus[i].stickP.x=stickRu.x;
rus[i].stickP.y=stickRu.y;
pushed=rus[i].p;
var cv:int=Math.abs(rus[i].x-360);
tef.x=sPos[Math.floor((cv+1)/2)];
tef.text=sName[Math.floor((cv+1)/2)];
tef.alpha=1;
colP=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;
}
spr.graphics.lineStyle(12,0x000000);
spr.graphics.moveTo(380,0);
spr.graphics.lineTo(380,pumpPos+h/6);
spr.graphics.moveTo(w-134,h);
spr.graphics.lineTo(w-134,h-(vacuPos+h/6));
spr.graphics.lineStyle(6,new Ru(0,0,0).mkC(64*colP,0,64*colP));
spr.graphics.moveTo(w-134,h);
spr.graphics.lineTo(w-134,h-(vacuPos+h/6));
time++;
u++;
v++;
}
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.DOWN && u>10 && !befDown){
pumpPos=h/12+h/3;
u=0;
befDown=true;
}
if(e.keyCode==Keyboard.UP && v>10 && !befUp){
vacuPos=h/12+h/4;
v=0;
befUp=true;
}
}
public function onKeyUp(e:KeyboardEvent):void{
if(e.keyCode==Keyboard.DOWN && befDown)befDown=false;
if(e.keyCode==Keyboard.UP && befUp)befUp=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_;
onStick=Math.random()<0.5;
}
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;
}else{
grade+=(0-grade)/4.0;
}
}
public function mkC(r:int,g:int,b:int):int{
return r*65536+g*256+b;
}
}
