Forked from: nemu90kWw's なんとかディウスっぽい蟹さん forked from: なんとかディウスっぽい背景 diff:111 なんとかディウスの蟹を勝手にキモイ生物にしてみた 左右キーとスペースで操作できます ish_xxxx forked:0favorite:3lines:491license : All rights reserved modified : 2008-12-26 13:25:23 Embed Tweet // forked from nemu90kWw's なんとかディウスっぽい蟹さん forked from: なんとかディウスっぽい背景 // forked from gyuque's なんとかディウスっぽい背景 // 左右キーとスペースで操作できます package { import flash.display.*; import flash.geom.*; import flash.events.*; import flash.ui.*; [SWF(width="320", height="240", backgroundColor="0x000000", frameRate="45")] public class Nemesis extends Sprite { public static const W:int = 320; public static const H:int = 240; private var mBGen:MountainGen = new MountainGen(80); private var mTGen:MountainGen = new MountainGen(80, 1); private var mScreenBmp:Bitmap; private var mScreen:BitmapData = new BitmapData(W, H, false, 0); private var mBGScreen:BitmapData = new BitmapData(W, H, true, 0); private var mStarbg:StarBG = new StarBG(W, H, 50); private var mKani:Kani; private var legs:Array = new Array(); private var count:int = 0; function Nemesis() { mScreenBmp = new Bitmap(mScreen); addChild(mScreenBmp); mBGen.step(); mTGen.step(); for(var i:int = 0; i < W; i++) { mBGen.step(); mTGen.step(); mBGen.draw(mBGScreen, i, 160); mTGen.draw(mBGScreen, i, 0, false); } //キモい敵キャラ生成/////////////////////////// var d:int = 60; var dx:int = -( d * 5 ); for( var j:uint = 0 ; j < d ; j++ ) { legs.push(new Leg( dx += 5 , 1 + Math.random() * 2 | 0 ) ); } mKani = new Kani(legs); /////////////////////////////////////////// addEventListener(Event.ENTER_FRAME, tick); stage.addEventListener(KeyboardEvent.KEY_DOWN, Key.onKeyDownHandler); stage.addEventListener(KeyboardEvent.KEY_UP, Key.onKeyUpHandler); } private function tick(e:Event):void { var leg:Leg; mStarbg.main(); mKani.main(); if(count % 2 == 0) {scroll(1);} count++; //描画 mScreen.fillRect(mScreen.rect, 0); mStarbg.draw(mScreen); var matrix:Matrix = new Matrix(); for each(leg in legs) { matrix.translate(leg.x, leg.y); mScreen.draw(leg.sprite, matrix); matrix.identity(); } matrix.translate(mKani.x, mKani.y); mScreen.draw(mKani, matrix); mScreen.copyPixels(mBGScreen, mScreen.rect, new Point(0, 0)); //当たり判定 for each(leg in legs) { leg.hitflag = mBGScreen.getPixel32(leg.x, leg.y) != 0x00000000; } } public function scroll(vx:int):void { mBGScreen.scroll(-vx, 0); mBGScreen.fillRect(new Rectangle(W-vx, 0, vx, H), 0); var i:int; mBGen.step(); mTGen.step(); for (i = 0; i < vx; i++) { mBGen.step(); mTGen.step(); mBGen.draw(mBGScreen, W-vx+i, 160); mTGen.draw(mBGScreen, W-vx+i, 0, false); } mKani.x -= vx; for each(var leg:Leg in legs) {leg.x -= vx;} } } } import flash.display.*; import flash.events.*; import flash.geom.*; import flash.ui.*; import flash.utils.*; class Kani extends Sprite { public var body:Body = new Body(); public var legs:Array = new Array(); public var auto:Boolean; public var dir:String = "none"; public var timer:int; public var dance:int; function Kani(legs:Array) { x = 200; y = 120; auto = false; timer = 100; this.legs = legs; for each(var leg:Leg in legs) { leg.parent = this; leg.x = x+leg.offset - 20+Math.random()*40; leg.y = 120 + 100*leg.invert; } addChild(body); } public function main():void { var leg:Leg; if(auto == false) { if(Key.isLeft == true) {dir = "left"; timer = 90;} else if(Key.isRight == true) {dir = "right"; timer = 90;} else {dir = "none";} if(Key.isSpace == true && dance == 0) {dance = 10; timer = 90;} timer--; if(timer == 0) {auto = true;} } if(auto == true) { if(timer == 0) { if(dir == "none") { if(x < 160) {dir = "right";} else {dir = "left";} } else { if(x < 50 && dir != "right") { timer = 60; } if(x > 300 && dir != "left") { timer = 60; } } } else { dir = "none"; if(timer == 40) { dance = 20; } timer--; } if(Key.isLeft == true || Key.isRight == true) { auto = false; timer = 90; } } if(dir == "left") {x -= 2;} if(dir == "right") {x += 2;} if(dir != "none") { for each(leg in legs) { leg.move(dir); } } if(dance > 0) { if(dance > 15) {body.x = 2;} else if(dance > 10) {body.x = 0;} else if(dance > 5) {body.x = -2;} else {body.x = 0;} dance--; } graphics.clear(); for each(leg in legs) { graphics.lineStyle( 2 , 0x992200); graphics.moveTo(leg.offset/8, 10*leg.invert); graphics.lineTo((leg.x-x), (leg.y-y)-70*leg.invert); graphics.endFill(); } } } class Body extends Sprite { private var face:Sprite; private var mous:Sprite; function Body() { face = new Sprite(); addChild( face ); var g:Graphics = face.graphics; g.beginFill(0xAA3333); g.lineStyle(2, 0xDD0022); g.drawCircle(0, 0, 20 ); g.endFill(); graphics.beginFill(0xFFFFFF); graphics.lineStyle(2, 0xDD0022); graphics.drawCircle(-20, -10, 6); graphics.drawCircle(20, -10, 6); graphics.beginFill(0x0); graphics.lineStyle(1, 0x0); graphics.drawCircle(22, -12, 2); graphics.drawCircle(-22, -12, 2); mous = new Sprite(); addChild( mous ); var t:Timer = new Timer( 100 , 0 ); t.addEventListener( "timer" , setMous ); t.start(); setMous(null); } private function setMous( e:TimerEvent ) : void { var pattern:uint = Math.random() * 3 | 0; var g:Graphics = mous.graphics; g.clear(); switch( pattern ) { case 0 : g.beginFill(0xFFFFFF); g.lineStyle(2, 0xDD0022); g.drawRoundRect(-3, 0, 8, 12, 6, 6 ); g.endFill(); break; case 1 : g.beginFill(0xFFFFFF); g.lineStyle(2, 0xDD0022); g.drawRoundRect(-9, 0, 20, 5, 6, 6 ); g.endFill(); break; case 2 : g.beginFill(0xFFFFFF); g.lineStyle(2, 0xDD0022); g.drawRoundRect(-9, 0, 20, 16, 6, 6 ); g.endFill(); break; case 3 : g.beginFill(0xFFFFFF); g.lineStyle(2, 0xDD0022); g.drawRoundRect(-9, 0, 20, 16, 6, 6 ); g.endFill(); break; case 4 : g.beginFill(0xFFFFFF); g.lineStyle(2, 0xDD0022); g.drawRoundRect(-9, 0, 20, 16, 6, 6 ); g.endFill(); break; case 5 : g.beginFill(0xFFFFFF); g.lineStyle(2, 0xDD0022); g.drawRoundRect(-9, 0, 20, 16, 6, 6 ); g.endFill(); break; case 6 : g.beginFill(0xFFFFFF); g.lineStyle(2, 0xDD0022); g.drawRoundRect(-9, 0, 20, 16, 6, 6 ); g.endFill(); break; } } private function update( ev:Event ) : void { } } class Leg { public var parent:Kani; public var sprite:Sprite; public var x:Number; public var y:Number; public var offset:Number; public var invert:int; public var hitflag:Boolean; public var moveflag:Boolean; public var gear:int; function Leg(offset:Number, invert:int) { this.offset = offset; this.invert = invert; sprite = new Sprite(); sprite.graphics.beginFill(0xDD0022 , 0.5); sprite.graphics.lineStyle(0, 0xDD0022); sprite.graphics.lineTo(-5, -40*invert); sprite.graphics.lineTo(-5, -60*invert); sprite.graphics.lineTo(-2, -70*invert); sprite.graphics.lineTo(2, -70*invert); sprite.graphics.lineTo(5, -60*invert); sprite.graphics.lineTo(5, -40*invert); sprite.graphics.lineTo(0, 0); sprite.graphics.endFill(); } public function move(dir:String):void { var threshold_l:Number = parent.x+offset + 30; var threshold_r:Number = parent.x+offset - 30; if(moveflag == false) { if(threshold_l < x || threshold_r > x) { moveflag = true; gear = -12; } if(threshold_r > x) { moveflag = true; gear = 12; } } if(moveflag == true) { if(dir == "left" && threshold_l-50 < x) { x -= 4; if(gear < 0) { y -= 4 * invert; } else { y += 4 * invert; if(hitflag == true) { moveflag = false; } if(y < 0 || y > 240) { gear = -12; } } gear++; } else if(dir == "right" && threshold_r+50 > x) { x += 4; if(gear > 0) { y -= 4 * invert; } else { y += 4 * invert; if(hitflag == true) { moveflag = false; } if(y < 0 || y > 240) { gear = 12; } } gear--; } } } } class StarBG { private var mWidth:int; private var mHeight:int; private var mStars:Array; private var mN:int; private var mCount:int = 0; function StarBG(w:int, h:int, n:int) { mWidth = w; mHeight = h; mN = n; mStars = new Array(n); for (var i:int = 0;i < n;i++) { mStars[i] = { x : Math.random()*w, y : Math.random()*h, speed : -Math.random()*1.5-0.5, color : ((Math.random()*0xC0+0x40)<<8)+((Math.random()*0xC0+0x40)<<16)+(Math.random()*0xC0+0x40), blink : Math.floor(Math.random())*40+20 }; } } public function main():void { var n:int = mN; for each(var star:Object in mStars) { star.x += star.speed; if(star.x < 0) { star.x += mWidth; star.y = Math.random()*mHeight; star.speed = -Math.random()*1.5-0.5; } } mCount++; } public function draw(b:BitmapData):void { for each(var star:Object in mStars) { if((mCount % star.blink) == 1) {b.setPixel(star.x, star.y, 0xFFFFFF);} else {b.setPixel(star.x, star.y, star.color);} } } } class Key { public static var isLeft:Boolean = false; public static var isRight:Boolean = false; public static var isSpace:Boolean = false; public static function onKeyDownHandler(e:KeyboardEvent):void { switch(e.keyCode) { case Keyboard.LEFT: Key.isLeft = true; break; case Keyboard.RIGHT: Key.isRight = true; break; case Keyboard.SPACE: Key.isSpace = true; break; } } public static function onKeyUpHandler(e:KeyboardEvent):void { switch(e.keyCode) { case Keyboard.LEFT: Key.isLeft = false; break; case Keyboard.RIGHT: Key.isRight = false; break; case Keyboard.SPACE: Key.isSpace = false; break; } } } class MountainGen { private var mPrevBuffer:Array; private var mHeight:int; private var mCount:int = 100; private var tmpBuffer:Array; private var mGenFunc:Function; function MountainGen(h:int, generator:int = 0) { mHeight = h; mGenFunc = generator ? genWav2 : genWav; mPrevBuffer = new Array(h); tmpBuffer = new Array(h); } public function draw(b:BitmapData, x:int, y:int, rev:Boolean = true):void { var i:int; for (i = 0;i < mHeight;i++) { if (tmpBuffer[i]) { var c:int = tmpBuffer[i]; b.setPixel32(x, rev ? (y+mHeight-i) : (y+i), 0xff000000 | (c/3+11) | ((c/5 + 170)<<16) | ((c/2+60) << 8)); } } } public function step():void { var t:Number = Number(mCount) * 0.02; var h:int = mGenFunc(t) * mHeight; var i:int, k:int, m:int; for (i = 0;i < mHeight;i++) { mPrevBuffer[i] = tmpBuffer[i]; } for (i = 0;i < mHeight;i++) { tmpBuffer[i] = (i < h) ? (Math.random()*80 + 80) : 0; if (tmpBuffer[i]) { if (mPrevBuffer[i]) tmpBuffer[i] = (tmpBuffer[i] + mPrevBuffer[i]*7)/8; if (mPrevBuffer[i] == 0 || i == (h-1)) { m = 50; for (k = i;k >= 0 && m > 0;k--, m-=4) { if (m > 33) m--; tmpBuffer[k] += m; m += Math.random()*7; } } if (mPrevBuffer[i+1] && i == (h-1)) { m = -48; for (k = i;k >= 0 && m < 0;k--, m++) { tmpBuffer[k] += m; if (tmpBuffer[k]<1) tmpBuffer[k] = 1; } } } } for (i = 0;i < mHeight;i++) tmpBuffer[i] = (tmpBuffer[i] < 0) ? 0 : (tmpBuffer[i] > 255) ? 255 : tmpBuffer[i]; mCount++; } private static function genWav(t:Number, nest:int = 0):Number { var v:Number = Math.sin(t); v += Math.cos(t*3) * 0.1; v += Math.cos(0.1 + t*10) * 0.001; v *= Math.cos(t*0.1); if (nest < 5) v += genWav(t+1, ++nest); v = v*0.2 + 0.3; return (v<0) ? 0 : (v>1) ? 1 : v; } private static function genWav2(t:Number, nest:int = 0):Number { var v:Number = Math.sin(t); v += Math.cos(t*3) * 0.1; v += Math.cos(0.1 + t*9) * 0.001; v *= Math.cos(0.2 + t*0.15); if (nest < 5) v += genWav2(t+1, ++nest); v = v*0.2 + 0.2; return (v<0) ? 0 : (v>1) ? 1 : v; } } Code Fullscreen Preview Fullscreen atakanckilic.. kuroarizuka tenchiwang2 : fungame蟹 fun game 蟹 invert drawRoundRect offset Keyboard.SPACE Boolean Keyboard.RIGHT Keyboard.LEFT matrix translate setPixel Math.cos keyCode KeyboardEvent getPixel32 KeyboardEvent.KEY_UP setPixel32 beginFill parent identity KeyboardEvent.KEY_DOWN