忍者ブログ

Syok'n Lab

WEB開発のあれこれ PHP,JAVA,Javascript,Ajax,Flex,Air,Linuxなどなど 最近雑記帳になりつつある・・・

※コメント、トラックバックは認証後表示されますのでご了承下さい

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

[Flex] へびにょろ?

遊びがてらへびにょろ?(正式名称は知らない^^;)をFlexで作ってみた。

キーボードの十字キーで操作します。

既知のバグ
・自身に当たってもゲームオーバーにならない。
・えさが自身に重なって見えない場合がある。
・キーを押すタイミングによっては180度方向転換が出来てしまう
・動作はwindowsXP, VistaのFlash Player 10で確認済み

以上を踏まえた上で、暇つぶしにどうぞー



index.mxml
<?version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:controller="*" width="210" height="250"
paddingTop="3" paddingBottom="3" paddingLeft="10" paddingRight="10" horizontalScrollPolicy="off" verticalScrollPolicy="off">
"controller" />
<mx:Canvas id="mainPanel" width="200" height="200" styleName="mainPanel">
<mx:Label id="getPoint" text="□" width="10" height="10" />
<mx:Label id="charactor" text="■" width="10" height="10" x="0" y="0" />
mx:Canvas>
<mx:Button id="startGame" label="リスタート" />
mx:Application>


controller.as
package controller
{
        import flash.display.DisplayObject;
        import flash.events.KeyboardEvent;
        import flash.events.MouseEvent;
        import flash.events.TimerEvent;
        import flash.geom.Point;
        import flash.ui.Mouse;
        import flash.utils.Timer;
        import mx.controls.*;
        import mx.core.IMXMLObject;
        import mx.events.FlexEvent;
        import mx.events.*;
        
        public class controller implements IMXMLObject
        {
                private var v:Main;
                private var toArrow:int = 39;
                private var t:Timer;
                private var cArray:Array = new Array();
                /**
* 初期化処理
*/
public function initialized(document:Object, id:String):void { v = document as Main; v.addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler); } /**
* アプリケーション初期化処理
*/
public function creationCompleteHandler(evt:FlexEvent):void { v.mainPanel.setFocus(); randomPoint(); v.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownForMainPanelHandler); t = new Timer(100); t.addEventListener(TimerEvent.TIMER, onTimerForCharatorHandler); v.startGame.addEventListener(MouseEvent.CLICK, onClickStartGameHandler); t.start(); } private function onClickStartGameHandler(evt:MouseEvent):void { if (!t.running) { toArrow = 39; var cnt:int = v.mainPanel.numChildren; var tgt:int = v.mainPanel.getChildIndex(v.charactor as DisplayObject); for (var i:int = cnt -1; i > 0; i--) { if (i != tgt) { v.mainPanel.removeChildAt(i); } } cArray = new Array(); v.charactor.x = 0; v.charactor.y = 0; t.start(); } } private function onTimerForCharatorHandler(evt:TimerEvent):void { var lbl:Label = new Label(); lbl.text = "■"; lbl.width = 10; lbl.height = 10; lbl.x = v.charactor.x; lbl.y = v.charactor.y; switch(toArrow) { case 37:// ←
if (v.charactor.x - 10 < 0) { Alert.show("ゲーム終了n" + cArray.length.toString() + "点", "終了"); t.stop(); return; } v.charactor.x -= 10; break; case 38:// ↑
if (v.charactor.y - 10 < 0) { Alert.show("ゲーム終了n" + cArray.length.toString() + "点", "終了"); t.stop(); return; } v.charactor.y -= 10; break; case 39:// →
if (v.charactor.x + 10 >= 200) { Alert.show("ゲーム終了n" + cArray.length.toString() + "点", "終了"); t.stop(); return; } v.charactor.x += 10; break; case 40:// ↓
if (v.charactor.y + 10 >= 200) { Alert.show("ゲーム終了n" + cArray.length.toString() + "点", "終了"); t.stop(); return; } v.charactor.y += 10; break; } if (v.getPoint.x == v.charactor.x && v.getPoint.y == v.charactor.y) { randomPoint(); cArray.push(new Point(v.getPoint.x, v.getPoint.y)); var lbll:Label = new Label(); lbll.text = "■"; lbll.width = 10; lbll.height = 10; lbll.x = v.charactor.x; lbll.y = v.charactor.y; v.mainPanel.addChildAt(lbll, 1); } v.mainPanel.addChildAt(lbl, 1); cArray.splice(0,0, new Point(v.charactor.x, v.charactor.y)); // 配列の最後のポイントを取得→削除
v.mainPanel.removeChildAt(cArray.length); cArray.pop(); } private function onKeyDownForMainPanelHandler(evt:KeyboardEvent):void { trace(evt.keyCode); switch(evt.keyCode) { case 37:// ←
//v.charactor.x -= (v.charactor.x != 0)? 10: 0;
if (toArrow != 39) { toArrow = 37; } break; case 38:// ↑
//v.charactor.y -= (v.charactor.y != 0)? 10: 0;
if (toArrow != 40) { toArrow = 38; } break; case 39:// →
//v.charactor.x += (v.charactor.x != 190)? 10: 0;
if (toArrow != 37) { toArrow = 39; } break; case 40:// ↓
//v.charactor.y += (v.charactor.y != 190)? 10: 0;
if (toArrow != 38) { toArrow = 40; } break; } } private function randomPoint():void { v.getPoint.x = Math.floor(Math.random() * 20) * 10; v.getPoint.y = Math.floor(Math.random() * 20) * 10; for (var i:String in cArray) { if ((new Point(v.getPoint.x, v.getPoint.y)).equals(cArray[i])) { randomPoint(); } } } } }

上記2ファイルを同じ階層に置いてindex.mxmlをコンパイルすればOKです。

拍手[0回]

PR

この記事へのコメント

Vodafone絵文字 i-mode絵文字 Ezweb絵文字
管理人のみ閲覧できます
 

この記事へのトラックバック

トラックバックURL

免責事項

当ブログに記載している情報に関しては、合法性、正確性、安全性等、いかなる保証もされません。従って、当ブログの情報を元に行う行為については自己責任でお願い致します。

カレンダー

04 2017/05 06
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

最新コメント

[02/10 幸一]
[12/08 yamamoto]
[07/23 Mr.ポテトヘッド]

最新トラックバック

ブログ内検索

Copyright ©  -- Syok'n Lab --  All Rights Reserved

Design by CriCri / Photo by Didi01 / Powered by [PR]

 / 忍者ブログ