Flasher格付けチェック〜フレームレートの目利きテスト〜

by clockmaker
制限時間は30秒。
間違えた数は問いません。
♥14 | Line 119 | Modified 2012-01-19 14:58:32 | MIT License
play

ActionScript3 source code

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

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="465"
               minHeight="465"
               addedToStage="addedToStageHandler(event)">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.events.CloseEvent;
            
            private const MAX_SEC:uint = 30;
            private const FPS:Array = [12, 18, 24, 30, 48, 60];
            private var ball:Sprite;
            [Bindable]
            private var correct:int = 0;
            private var currentFpsIndex:int;
            private var rect:Sprite;
            private var rect3D:Sprite;
            private var startTime:Number = 0;
            
            protected function addedToStageHandler(event:Event):void
            {
                ball = new Sprite();
                ball.graphics.beginFill(0xFF0000);
                ball.graphics.drawCircle(25, 25, 50);
                canvas.addChild(ball);
                rect = new Sprite();
                rect.graphics.beginFill(0x00FF00);
                rect.graphics.drawRect(-50, -50, 100, 100)
                canvas.addChild(rect);
                rect3D = new Sprite();
                rect3D.graphics.beginFill(0x0000FF);
                rect3D.graphics.drawRect(-50, -50, 100, 100)
                canvas.addChild(rect3D);
                initGame();
            }
            
            private function initGame():void
            {
                addEventListener(Event.ENTER_FRAME, enterFrameHandler);
                correct = 0;
                startTime = getTimer();
                startGame();
            }
            
            private function enterFrameHandler(event:Event):void
            {
                rect.x = 150;
                rect.y = 100;
                rect.rotation = getTimer() / 10;
                ball.x = 233 + 233 * Math.sin(getTimer() / 400);
                ball.y = 250;
                rect3D.rotationY = getTimer() / 20;
                rect3D.x = 300;
                rect3D.y = 100;
                
                var remain:Number = (MAX_SEC * 1000 - getTimer() + startTime);
                timeNum.text = "残り:" + remain + "ms";
                if (remain <= 0)
                {
                    removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
                    
                    Alert.show("[Flasher格付けチェック〜フレームレートの目利きテスト〜]\nあなたの正解数は" + correct + "でした。\nTwitterに投稿しますか?", "", 3, null, finish);
                }
            }
            
            private function startGame():void
            {
                var oldIndex:int = currentFpsIndex;
                while(currentFpsIndex == oldIndex){
                    currentFpsIndex = FPS.length * Math.random() >> 0;
                }
                stage.frameRate = FPS[currentFpsIndex];
            }
            
            
            private function closeHandler(event:Event):void
            {
                startGame();
            }
            
            private function finish(event:CloseEvent):void
            {
                if(event.detail == Alert.YES)
                {
                    var req:URLRequest = new URLRequest("http://twitter.com/share?text=" + escapeMultiByte("[Flasher格付けチェック〜フレームレートの目利きテスト〜]\nあなたの正解数は" + correct + "でした。") + "&url=" + escapeMultiByte("http://wonderfl.net/c/4lJc/"))
                    navigateToURL(req, "_blank");
                }
                
                initGame();
            }
            
            protected function btn_clickHandler(event:MouseEvent):void
            {
                var ind:int = event.currentTarget.name.split("_")[1];
                if (ind == currentFpsIndex)
                {
                    Alert.show("Correct!", "", 4, null, closeHandler);
                    correct++;
                }
                else
                    Alert.show("Mistake!\n正解は" + FPS[currentFpsIndex] + "fpsでした。", "", 4, null, closeHandler);
            }
            
        ]]>
    </fx:Script>
    
    <mx:UIComponent id="canvas" />
    
    <s:VGroup y="350"
              width="100%"
              horizontalAlign="center">
        
        <s:Label text="Select Correct FPS" />
        <s:HGroup width="100%"
                  horizontalAlign="center">
            <s:Button label="FPS:12" name="id_0" click="btn_clickHandler(event)" />
            <s:Button label="FPS:18" name="id_1" click="btn_clickHandler(event)" />
            <s:Button label="FPS:24" name="id_2" click="btn_clickHandler(event)" />
        </s:HGroup>
        <s:HGroup width="100%"
                  horizontalAlign="center">
            <s:Button label="FPS:30" name="id_3" click="btn_clickHandler(event)" />
            <s:Button label="FPS:48" name="id_4" click="btn_clickHandler(event)" />
            <s:Button label="FPS:60" name="id_5"  click="btn_clickHandler(event)" />
        </s:HGroup>
        <s:HGroup width="100%"
                  horizontalAlign="center">
            <s:Label text="{'正解数:' + correct + '回'}" />
            <s:Label id="timeNum" />
        </s:HGroup>
    </s:VGroup>
    
</s:Application>

Forked