In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

DotMagic As3版 - 放物線的

そしてさらに、放物線バージョン。
* 判定テキトーなのですり抜けてもご愛敬。
* あとついでに画面クリックでリセット機能もつけた。(すり抜けてどうにもならなくなったらどうぞ。)

ドットのカラーバリエーション増やしてみた。
* 色によってなんか起きます。
* 当時もそんな感じでゲームバリエーション増やしてました。

@author esukei
*
* DotMagic AS3版
* 中高時代所属してた部活で1年生が必ず作るゲームをふと思い出したので作ってみる。 
* 元々作った方が不明なため勝手に移植してしまったので、もしやめてくれ!っていうときはすぐに取り下げます。
*
* 説明:
* スペースキー押してくねくねさせて、白に当たらないように赤を目指す。
* (日本語入力はオフにしてね!)
* 赤にたどり着くとレベルあがって白が増える。
*
* ドットの違い:
* 白:レベルリセット
* 緑:反射
* 黄:どこかてきとーにワープ
* 青:加速
Get Adobe Flash player
by esukei 24 Jul 2009
// forked from esukei's DotMagic As3版 - 色付き
// forked from esukei's DotMagic As3版
/**
 * そしてさらに、放物線バージョン。
 * 判定テキトーなのですり抜けてもご愛敬。
 * あとついでに画面クリックでリセット機能もつけた。(すり抜けてどうにもならなくなったらどうぞ。)
 */
/**
 * ドットのカラーバリエーション増やしてみた。
 * 色によってなんか起きます。
 * 当時もそんな感じでゲームバリエーション増やしてました。
 */
/**
 * @author esukei
 *
 * DotMagic AS3版
 * 中高時代所属してた部活で1年生が必ず作るゲームをふと思い出したので作ってみる。 
 * 元々作った方が不明なため勝手に移植してしまったので、もしやめてくれ!っていうときはすぐに取り下げます。
 *
 * 説明:
 * スペースキー押してくねくねさせて、白に当たらないように赤を目指す。
 * (日本語入力はオフにしてね!)
 * 赤にたどり着くとレベルあがって白が増える。
 *
 * ドットの違い:
 * 白:レベルリセット
 * 緑:反射
 * 黄:どこかてきとーにワープ
 * 青:加速
 */
package {
    
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.ui.Keyboard;
    
    public class DotMagic extends Sprite {
        
        private var point:Point;
        private var stageData:BitmapData;
        private var pointerLine:BitmapData;
        private var stageLayer:Bitmap;
        private var pointerLayer:Bitmap;
        private var gameLevel:int = 1;
        private var dx:Number;
        private var dy:Number;
        private var vy:Number;
        private var gy:Number = 0.2;
        private var colors:Array = [0xFFFFFFFF,0xFF00FF00,0xFFFFDD00,0xFF0055FF];
        
        [SWF(width=465, height=465, backgroundColor=0x000000)]
        
        
        public function DotMagic()
        {
            stage.frameRate = 30;
            point = new Point();
            pointerLine = new BitmapData(stage.stageWidth,stage.stageHeight,true,0x00000000);
            stageData = new BitmapData(stage.stageWidth,stage.stageHeight,true,0xFF000000);
            stageLayer = new Bitmap( stageData );
            pointerLayer = new Bitmap( pointerLine );
            addChild( stageLayer );
            addChild( pointerLayer )
            
            init();

            stage.addEventListener( KeyboardEvent.KEY_DOWN, switchUp);
            stage.addEventListener( KeyboardEvent.KEY_UP, switchDown);
            stage.addEventListener( MouseEvent.CLICK, function(event:MouseEvent):void{
                gameLevel = 1;
                init();
            } );
            addEventListener( Event.ENTER_FRAME, main );
        }
        
        private function init():void 
        {
            stage.frameRate = 30;
            var rect:Rectangle = new Rectangle(0,0,stage.stageWidth,stage.stageHeight);
            var back:Rectangle = new Rectangle(stage.stageWidth-1,0,1,stage.stageHeight);
            var innerRect:Rectangle = new Rectangle(1,1,stage.stageWidth-2,stage.stageHeight-2);
            var goal:Rectangle = new Rectangle(0,stage.stageHeight / 2 - 40,1,80);
            stageData.fillRect(rect, 0xFFFFFFFF);
            stageData.fillRect(back, 0xFF00FF00);
            stageData.fillRect(innerRect, 0xFF000000);
            stageData.fillRect(goal, 0xFFFF0000);
            for(var i:int = 0; i < gameLevel * gameLevel * 10; i++){
                var dotColor:uint = colors[Math.floor(Math.random() * 4)];
                var dotX:Number = stage.stageWidth * Math.random();
                var dotY:Number = stage.stageHeight * Math.random();
                
                //ドットをちょっと大きく。
                //めんどくさいから直打ち
                stageData.setPixel32( dotX+1, dotY, dotColor );
                stageData.setPixel32( dotX+2, dotY, dotColor );
                stageData.setPixel32( dotX, dotY+1, dotColor );
                stageData.setPixel32( dotX+1, dotY+1, dotColor );
                stageData.setPixel32( dotX+2, dotY+1, dotColor );
                stageData.setPixel32( dotX+3, dotY+1, dotColor );
                stageData.setPixel32( dotX, dotY+2, dotColor );
                stageData.setPixel32( dotX+1, dotY+2, dotColor );
                stageData.setPixel32( dotX+2, dotY+2, dotColor );
                stageData.setPixel32( dotX+3, dotY+2, dotColor );
                stageData.setPixel32( dotX+1, dotY+3, dotColor );
                stageData.setPixel32( dotX+2, dotY+3, dotColor );
            }
            pointerLine.fillRect(rect, 0x00000000);
            point.x = stage.stageWidth-1;
            point.y = stage.stageHeight / 2;
            dx = -1;
            vy = 0;
            dy = 0;
        }
        
        private function main(event:Event):void
        {
            
            switch(stageData.getPixel32(point.x+dx,point.y+dy))
            {
                case 0xFFFFFFFF:
                {
                    gameLevel = 1;
                    init();
                    break;
                }
                case 0xFFFF0000:
                {
                    gameLevel++;
                    init();
                    break;
                }
                //緑は反射
                case colors[1]:
                {
                    dx *= -1;
                    break;
                }
                //黄色はワープ
                case colors[2]:
                {
                    point.x = stage.stageWidth * Math.random();
                    point.y = stage.stageHeight *  Math.random();
                    break;
                }
                case colors[3]:
                {
                    stage.frameRate = 60;
                    break;
                }
                default :
                {
                    if(point.x+dx < 1){
                        if(point.y+dy > stage.stageHeight / 2 - 40 && point.y+dy < stage.stageHeight / 2 + 40){
                            gameLevel++;
                            init();
                            break;
                        }else{
                            gameLevel = 1;
                            init();
                            break;
                        }
                    }
                    
                    if(point.x+dx > stage.stageWidth -1){
                        dx *= -1;
                        point.x = stage.stageWidth -1 + dx;
                    }
                    
                    if(point.y+dy < 1 || point.y+dy > stage.stageHeight-1){
                        gameLevel = 1;
                        init();
                    }                    
                    break;
                }
            }
            
            dy = vy + 0.5 * gy;
            vy = vy + gy;
            
            point.x += dx;
            point.y += dy;
            pointerLine.setPixel32(point.x, point.y, 0xFFFFFFFF);
        }
        
        private function switchUp(event:KeyboardEvent):void
        {
            if(event.keyCode == Keyboard.SPACE)
            {
                gy = -0.2;
            }
        }
        
        private function switchDown(event:KeyboardEvent):void
        {
            if(event.keyCode == Keyboard.SPACE)
            {
                gy = 0.2;
            }
        }
    }
}