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

前回ソースからタイムアタック機能を追加してみました

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

// forked from siouxcitizen's 前回ソースからレベルアップ機能を追加してみました
// forked from siouxcitizen's 前回ソースからマップを拡大してボス魔女を追加しました
// forked from siouxcitizen's 前回ソースからZボタン押すだけの戦闘機能を少々改善しました
// forked from siouxcitizen's 前回ソースからZボタン押すだけの戦闘機能を追加しました
// forked from siouxcitizen's forked from: ワンダフルクエスト
// forked from osamX's ワンダフルクエスト
// forked from nengafl's nengafl
/**=====================================================
 * 前回ソースからタイムアタック機能を追加してみました
 * 
 * ボス魔女を倒した後、Zボタンでコマンド終了後に「ツイート」ボタンが表示されます
 * 「ツイート」ボタン押下で、勇者がモンスターに倒された回数と、ボス魔女倒すまでにかかった時間(秒単位)をツイートします
 * ボス魔女を倒して以降はキー操作できなくなります(ゲーム終了)
 * 
 * [遊び方]
 * はじめに、マップをクリックして...
 * ↑ , w :    上に移動
 * ↓ , s :    下に移動
 * ← , a :    左に移動
 * → , d :    右に移動
 * , , z :    戦闘
 *
 * いちおう今回forkし続けて作業したワンダフルクエストの自分的完成版です
 * 敵「しかばね」を倒すと100の経験値を得られます
 * 敵「僧侶」を倒すと200の経験値を得られます
 * 敵「キラータンス」を倒すと300の経験値を得られます
 * 敵「ボス魔女」を倒すと1000の経験値を得られます
 * 経験値500でレベル2、経験値1000でレベル3、経験値2500でレベル4、経験値5000で最終レベル5になります。
 * レベルが1あがるごとにHPが+50、攻撃力が+2、防御力が+1、増えます
 * レベル5で「ボス魔女」が倒せるかと思います。
 * 
 * ===================================================== */
package 
{
    import flash.display.*;
    import flash.events.*;
    import flash.geom.Point;
    import flash.net.URLRequest;
    import flash.net.navigateToURL;
    import flash.utils.escapeMultiByte;
    import flash.system.LoaderContext;
    import flash.utils.Timer;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    [SWF(width="465", height="465", frameRate="30", backgroundColor="0x000000")]
    public class WonderflQuest extends Sprite 
    {
        private const SIZE:Number = 465;//ステージの大きさ
        private const SCALE:Number = 3; //勇者やフィールドの拡大率
        private const SPEED:Number = 6;    //勇者が歩くスピード FLDSIZEの約数にしてください
        private const MAPSIZE:uint = 32;//マップの横・縦のマスの個数
        private const FLDSIZE:uint = 48;//フィールド(マップ上の1マス)の横・縦のドット数
        
        private var yuushaPos:Point;    //勇者のマップ上の座標
        private var map:Sprite;            //マップ本体 これを動かして勇者が移動しているように見せる
        private var bMapData:Array = [];//フィールドが障害物か否かを記憶
        private var frameCount:Number = 0;    //onEnterFrameで使用
        private var keyFlags:Array = [false, false, false, false]; //下上左右のキーが押されているか
        private var walkDirection:int = 4;    //歩いていく方向 (0~3:下上左右  4:止)
        private var loaded:int = 0;        //読み込み完了した画像の個数
        private var isInit:Boolean = false;    //初期化されているか onEnterFrameで使用
        private var prgSpr:Sprite;        //ロード画面表示用

        private var isBattle:Boolean = false;    //バトル状態か
        private var isBattleEnd:Boolean = false;    //バトル状態終了か
        private var battleSprite:Sprite;        //バトル画面表示用
        private var battleInfoView:BattleInfoView; // バトル画面情報表示
        private var blinkTimer:Timer; // 攻撃エフェクト用のタイマー
        private var yuushaCharacter:YuushaCharacter // 勇者の画像・ステータス保持用
        private var tekiCharacter:TekiCharacter // 敵の画像・ステータス保持用
        private var isYuushaTurn:Boolean = true;    // 勇者の攻撃ターンか
        private var isYuushaLevelUp:Boolean = false;       // 勇者レベルアップか
        private var isBossDefeated:Boolean = false;       // ボス倒したか
        private var isGameEnd:Boolean = false;       // ゲーム終了か

        private const SHIKABANE_IMG_NO:int = 0; //敵画像No.しかばね用
        private const SOURYO_IMG_NO:int = 1;    //敵画像No.僧侶用
        private const TANSU_IMG_NO:int = 2;     //敵画像No.タンス
        private const MAJO_IMG_NO:int = 3;      //敵画像No.ボス魔女用
        private var defeatedCounter:int = 0; // 勇者がモンスターに倒された回数
        private var playTimeCounter:int = 0; // プレイ時間記録用(秒単位)
        private var playTimer:Timer; // プレイ時間記録用のタイマー
        private var tweetBtn : CustomButton; //「ツイート」ボタン
        /**-----------------------------------------------------
         * マップの1マス(フィールド)のリストです。
         * ここをいじると好きな画像をマップ上に貼ることができます。
         * 画像のサイズは、基本的に16*16ピクセルです。
         * 形式はjpeg,gif,pngのどれかにしてください。
         * Twitterのアイコン画像取得は、こちらのAPIを使わせてもらってます。
         * http://usericons.relucks.org/
         * ----------------------------------------------------- */
        private const fieldList:Array = [
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map0.png", false),    //[ 0]: 芝生
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map1.png", false),    //[ 1]: 砂
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map2.png", false),    //[ 2]: 石畳
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map3.png", false),    //[ 3]: フローリング
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map4.png", false),    //[ 4]: 橋(縦)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map5.png", false),    //[ 5]: 橋(横)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map6.png", true),    //[ 6]: 木(小)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map7.png", true),    //[ 7]: 木(大)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map8.png", true),    //[ 8]: サボテン
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map9.png", true),    //[ 9]: 水
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map10.png", true),    //[10]: 壁(石)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map11.png", true),    //[11]: 壁(木)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map12.png", true),    //[12]: 壁(武器屋)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map13.png", true),    //[13]: 壁(防具屋)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map14.png", true),    //[14]: 壁(宿屋)
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map15.png", true),    //[15]: 壺
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map16.png", true),    //[16]: タンス
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map17.png", true),    //[17]: 石像
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/map/map18.png", true),    //[18]: 真っ暗
            new Field("http://usericons.relucks.org/twitter/osamX", false),                    //[19]: Twitterアイコン
            new Field("http://flash-scope.com/wonderfl/WonderflQuest/majo/majoF1.png", true)  //[20]: ボス魔女

        ];
        
        /**-----------------------------------------------------
         木で、あそこが芝生で...ってやつ)が入ってます。
         * ここをいじると、マップが変わります。上のfieldListのコメント参照。
         * ----------------------------------------------------- */
        private const mapData:Array = 
            [
             [ 9, 6, 6, 6, 6, 6, 9, 9, 9, 9, 9, 6, 6, 6, 1, 1,20, 1, 1, 6, 6, 6, 9, 9, 9, 9, 9, 6, 6, 6, 6, 6, 9],
             [ 9, 9, 9, 6, 6, 6, 9, 0, 0, 0, 9, 6, 6, 6, 6, 6, 1, 6, 6, 6, 6, 6, 9, 0, 0, 0, 9, 6, 6, 6, 9, 9, 9],
             [ 0, 0, 0, 9, 9, 9, 9, 1, 0, 0, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 0, 0, 1, 9, 9, 9, 9, 0, 0, 0],
             [ 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0],
             [ 0, 6, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 6, 0],
             [ 0, 6, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 6, 0],
             [ 9, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 6, 9],
             [ 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 9],
             [ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 9, 9, 9],
             [ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 0, 1, 9, 9, 9, 9, 9, 9, 9, 4, 4, 9, 9, 9, 9, 9, 9],
             [ 9, 9, 9, 9, 9, 9, 4, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 4, 9, 9, 9, 9, 9, 9],
             [ 0, 0, 5, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 7, 9, 7, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 1, 1, 1, 8, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 8, 1, 1, 1, 1, 1, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 8, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0],
             [ 0, 0, 9, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 9, 0, 0, 0, 9, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 1, 8, 1, 1, 1, 0, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 6, 0, 1, 1, 1, 0, 0, 0, 6, 0, 9, 0, 0, 0, 9, 0, 6, 0, 1, 1, 1, 0, 0, 0, 6, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 1, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 9, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 1, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,18,10,10, 1,10,10,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,18, 2, 2, 2, 2,16,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0],
             [ 1, 1, 9, 9, 9, 9, 9, 9, 4, 4, 9, 9, 9,18, 2, 3, 3, 3, 2,18, 9, 9, 9, 9, 4, 4, 9, 9, 9, 9, 9, 0, 0],
             [ 1, 1, 0, 0, 0, 9, 9, 0, 0, 0, 0, 6, 0,18, 2, 3, 3, 3, 2,18,17, 9, 9, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0],
             [ 1, 1, 1, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0,18,15, 3, 3, 3, 2,18, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
             [ 1, 1, 1, 1, 9, 9, 9, 9, 0, 0, 1, 1, 0,18, 2, 2, 2, 2, 2,18, 9, 9, 9, 9, 0, 0, 1, 1, 0, 0, 0, 0, 0],
             [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,18, 2, 2, 2, 2, 2,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];

        /**-----------------------------------------------------
         * 勇者画像のURLリスト
         * ----------------------------------------------------- */
        private const yuushaImgList:Array = [
            "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaF1.png",    //前向き1
            "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaF2.png",    //前向き2
            "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaB1.png",    //後ろ向き1
            "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaB2.png",    //後ろ向き2
            "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaL1.png",    //左向き1
            "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaL2.png",    //左向き2
            "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaR1.png",    //右向き1
            "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaR2.png"        //右向き2
        ];
        /**-----------------------------------------------------
         * 敵画像のURLリスト
         * ----------------------------------------------------- */
        private const tekiImgList:Array = [
            "http://flash-scope.com/wonderfl/WonderflQuest/shikabane/shikabaneF1.png", //しかばね画像
            "http://flash-scope.com/wonderfl/WonderflQuest/souryo/souryoF1.png",       //僧侶画像
            "http://flash-scope.com/wonderfl/WonderflQuest/map/map16.png",             //タンス
            "http://flash-scope.com/wonderfl/WonderflQuest/majo/majoF1.png"            //魔女画像
        ];
        /**-----------------------------------------------------
         * コンストラクタ。 ここが最初に処理されます。
         * ----------------------------------------------------- */
        public function WonderflQuest():void 
        {    
            prgSpr = new Sprite();//ロード画面
            addChild(prgSpr);
            
            addEventListener(Event.ENTER_FRAME, onEnterFrame);//イベントリスナーの登録
            
            createMap();            //マップを作る
            
            yuushaCharacter = new YuushaCharacter(yuushaImgList);    //勇者を作る
            yuushaCharacter.setParameter("勇者",150,10,2);    //勇者ステータスを初期化
            yuushaCharacter.scaleX = yuushaCharacter.scaleY = SCALE;    //勇者を拡大表示
            yuushaCharacter.x = yuushaCharacter.y = (SIZE-FLDSIZE)/2; //中央に配置
            
            yuushaPos = new Point(16 * FLDSIZE, 29 * FLDSIZE);//勇者初期位置
            moveMap(yuushaPos);        //マップ移動

            tekiCharacter = new TekiCharacter(tekiImgList); //敵画像をまとめて読み込む

            // プレイ時間カウント用タイマーを初期化する
            playTimer=new Timer(1000);
            playTimer.addEventListener(TimerEvent.TIMER, playTimerHandler);
            playTimer.start();

            // バトル画面エフェクト用タイマーを初期化する
            blinkTimer=new Timer(80, 4);
            blinkTimer.addEventListener("timer", blinkTimerHandler);
        }
        
        /**-----------------------------------------------------
         * 毎フレームの処理。
         * ----------------------------------------------------- */
        private function onEnterFrame(event:Event):void {
            if (loaded < MAPSIZE * MAPSIZE) { //フィールドの画像読み込み未完了なら
                drawPrg();
                return; //これ以下を処理しない
            }
            
            //画像読み込み完了後 1回だけ処理
            if (!isInit) {
                removeChild(prgSpr);//ロード画面非表示
                prgSpr = null;
                stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);    //イベントリスナーの登録
                stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);        //イベントリスナーの登録
                addChild(map);        //マップ表示
                addChild(yuushaCharacter);    //勇者表示
                isInit = true;
            }
            
            //15フレーム毎に処理する
            if (frameCount++ > 10) {
                frameCount = 0;
                yuushaCharacter.walk();
            }
            
            //マップ(勇者)をどの方向に動かすか判定
            if (yuushaPos.x % FLDSIZE == 0 && yuushaPos.y % FLDSIZE == 0) {
                var mapPosX:int = int(yuushaPos.x / FLDSIZE), mapPosY:int = int(yuushaPos.y / FLDSIZE);
                walkDirection = 4;         //止まる
                switch(true) {
                    case keyFlags[0]:    //下
                        if(yuushaPos.y < (MAPSIZE-1)*FLDSIZE && !bMapData[mapPosY+1][mapPosX]) walkDirection=0;
                        yuushaCharacter.changeDirection(0);
                        break;
                    case keyFlags[1]:    //上
                        if(yuushaPos.y > 0 && !bMapData[mapPosY-1][mapPosX]) walkDirection=1;
                        yuushaCharacter.changeDirection(1);
                        break;
                    case keyFlags[2]:    //左
                        if(yuushaPos.x > 0 && !bMapData[mapPosY][mapPosX-1]) walkDirection=2;
                        yuushaCharacter.changeDirection(2);
                        break;
                    case keyFlags[3]:    //右
                        if(yuushaPos.x < (MAPSIZE-1)*FLDSIZE && !bMapData[mapPosY][mapPosX+1]) walkDirection=3;
                        yuushaCharacter.changeDirection(3);
                        break;
                }
            }
            
            //次のマスまで自動的に勇者を歩かせる
            switch(walkDirection) {
                case 0:
                    yuushaPos.y += SPEED;
                    break;
                case 1:
                    yuushaPos.y -= SPEED;
                    break;
                case 2:
                    yuushaPos.x -= SPEED;
                    break;
                case 3:
                    yuushaPos.x += SPEED;
                    break;
            }
            if (walkDirection < 4) moveMap(yuushaPos);
        }
        
        /**-----------------------------------------------------
         * キーボードのキーが押された時の処理。
         * ----------------------------------------------------- */
        private function onKeyDown(event:KeyboardEvent):void {
            if(isGameEnd) return; //ゲーム終了時は何も処理を行わない
            switch(event.keyCode) {
                case 40: case 83:    //↓ s
                    if(isBattle) break; //バトル中の勇者移動は行わない
                    keyFlags[0] = true;
            }
            switch(event.keyCode) {
                case 38: case 87:    //↑ w
                    if(isBattle) break; //バトル中の勇者移動は行わない
                    keyFlags[1] = true;
            }
            switch(event.keyCode) {
                case 37: case 65:    //← a
                    if(isBattle) break; //バトル中の勇者移動は行わない
                    keyFlags[2] = true;
            }
            switch(event.keyCode) {
                case 39: case 68:    //→ d
                    if(isBattle) break; //バトル中の勇者移動は行わない
                    keyFlags[3] = true;
            }
            switch(event.keyCode) {
                case 188: case 90:    //, z
                    if(!isBattle) {
                        keyFlags[0] = false;
                        keyFlags[1] = false;
                        keyFlags[2] = false;
                        keyFlags[3] = false;
                        initBattle();
                    } else {
                        if(isBattleEnd) { //バトル画面でバトル終了時にZボタン押下された場合の処理
                            //バトル画面の表示・処理を終了する
                            removeChild(battleInfoView);
                            removeChild(tekiCharacter);
                            removeChild(battleSprite);
                            
                            isYuushaLevelUp = false;
                            isBattle = false;
                            isBattleEnd = false;
                            if (isBossDefeated) { //ボス魔女を倒した場合はゲーム終了設定を行う
                                playTimer.stop();
                                isGameEnd = true;
                                tweetBtn = new CustomButton("ツイート");
                                tweetBtn.x = 180;
                                tweetBtn.y = 130;
                                tweetBtn.addEventListener(MouseEvent.MOUSE_DOWN,onTweetBtnDown);
                                addChild(tweetBtn);
                            }
                            break;
                        }
                        calcBattle(); //バトル画面での計算・表示を行う
                    }
            }
        }
        
        /**-----------------------------------------------------
         * キーボードのキーが離された時の処理。
         * ----------------------------------------------------- */
        private function onKeyUp(event:KeyboardEvent):void {
            switch(event.keyCode) {
                case 40: case 83:    //↓ s
                    keyFlags[0] = false;
            }
            switch(event.keyCode) {
                case 38: case 87:    //↑ w
                    keyFlags[1] = false;
            }
            switch(event.keyCode) {
                case 37: case 65:    //← a
                    keyFlags[2] = false;
            }
            switch(event.keyCode) {
                case 39: case 68:    //→ d
                    keyFlags[3] = false;
            }
        }
        
        /**-----------------------------------------------------
         * マップを作ります。
         * この実装方法は良くないです。遅いし、何回も同じ画像をロードしてます。
         * 画像が別ドメインにある時に、crossdomain.xmlがなくても大丈夫なようにしています。
         * ----------------------------------------------------- */
        private function createMap():void {
            map = new Sprite();
            for (var k:uint = 0; k < MAPSIZE; k++) bMapData[k] = []; //bMapDataを2次元配列にする
            
            for (var j:uint = 0; j < MAPSIZE; j++) {
                for (var i:uint = 0; i < MAPSIZE; i++) {
                    var loader:Loader = new Loader();
                    var field:Field = fieldList[mapData[j][i]];
                    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{loaded++;}); //ロード完了したらloadedをカウントアップ
                    loader.load(new URLRequest(field.url), new LoaderContext(true));
                    loader.x = FLDSIZE * i;
                    loader.y = FLDSIZE * j;
                    loader.scaleX = loader.scaleY = SCALE;
                    if (mapData[j][i] == 19) loader.scaleX = loader.scaleY = FLDSIZE / 73; //Twitterのアイコンの時
                    map.addChild(loader);
                    bMapData[j][i] = field.isObstacle;
                }
            }
        }
        
        /**-----------------------------------------------------
         * マップの座標計算。
         * ----------------------------------------------------- */
        private function moveMap(pos:Point):void {
            map.x = (SIZE-FLDSIZE)/2 - yuushaPos.x;
            map.y = (SIZE-FLDSIZE)/2 - yuushaPos.y;
        }
        
        /**-----------------------------------------------------
         * ロード画面を描く。
         * ----------------------------------------------------- */
        private function drawPrg():void {
            var side:Number = SIZE / MAPSIZE,
                yy:int = int(loaded / MAPSIZE),
                xx:int = loaded - yy * MAPSIZE,
                max:int = MAPSIZE;
            prgSpr.graphics.clear();
            prgSpr.graphics.beginFill(0xFFFFFF);
            prgSpr.graphics.drawRect(0, 0, SIZE, yy * side);
            if(yy%2)prgSpr.graphics.drawRect((MAPSIZE-xx)*side, yy*side, SIZE, side);
            else    prgSpr.graphics.drawRect(0, yy*side, xx*side, side);
            prgSpr.graphics.endFill();
        }

        /**-----------------------------------------------------
         * バトル画面を初期化。
         * ----------------------------------------------------- */
        private function initBattle():void {
            isBattle = true;

            battleSprite = new Sprite();
            battleSprite.graphics.beginFill(0x222222);
            battleSprite.graphics.drawRect(100, 50, 300, 350);
            battleSprite.graphics.endFill();
            addChild(battleSprite);

            // バトル画面情報を表示する
            yuushaCharacter.resetHp(); //勇者のHPを初期状態にする
            isYuushaTurn = true; //勇者の攻撃ターンに設定する

            if (yuushaPos.y > 16*FLDSIZE) { //勇者のY座標が16より大きい場合
                tekiCharacter.setImage(SHIKABANE_IMG_NO);    //しかばねの画像初期化
                tekiCharacter.setParameter("しかばね",100,7,0,100);    //しかばねのステータスを初期化
            } else if (((16*FLDSIZE) >= yuushaPos.y) && (yuushaPos.y > (10*FLDSIZE))) { //勇者のY座標が1より大きい場合かつ16以下の場合
                tekiCharacter.setImage(SOURYO_IMG_NO);    //僧侶の画像初期化
                tekiCharacter.setParameter("僧侶",250,7,0,200);    //僧侶のステータスを初期化
            } else if (((10*FLDSIZE) >= yuushaPos.y) && (yuushaPos.y > (1*FLDSIZE))) {
                tekiCharacter.setImage(TANSU_IMG_NO);    //タンスの画像初期化
                tekiCharacter.setParameter("キラータンス",300,10,0,300);    //タンスのステータスを初期化
            }else { //勇者のY座標が1の場合
                tekiCharacter.setImage(MAJO_IMG_NO);    //ボス魔女の画像初期化
                tekiCharacter.setParameter("ボス魔女",1000,10,3,1000);    //ボス魔女のステータスを初期化
            }
            tekiCharacter.scaleX = tekiCharacter.scaleY = SCALE;    //ボス魔女を拡大表示
            tekiCharacter.x = 220; //とりあえずテキトーに配置
            tekiCharacter.y = 150; //とりあえずテキトーに配置
            addChild(tekiCharacter);

            battleInfoView=new BattleInfoView(yuushaCharacter.getHp(), yuushaCharacter.getMaxHp(), yuushaCharacter.getYuushaLevel(), 
                                              tekiCharacter.getHp(), tekiCharacter.getMaxHp(), tekiCharacter.getName());
            battleInfoView.x = 120; //とりあえずテキトーに配置
            battleInfoView.y = 250; //とりあえずテキトーに配置
            addChild(battleInfoView);
        }
        
        /**-----------------------------------------------------
         * バトル画面処理を行う。
         * ----------------------------------------------------- */
        private function calcBattle():void {
            //ダメージを計算する
            var d:int;  //攻撃力と防御力の差
            var r:int;  //ランダム攻撃値

            if(isYuushaTurn) { //勇者の攻撃ターン
                d = yuushaCharacter.getOffensePoint() - tekiCharacter.getDefensePoint(); //攻撃力と防御力の差を取得
                r = Math.floor(Math.random() * d) + d; //ランダム攻撃値を取得
                tekiCharacter.minusHp(r);  //ランダム攻撃値でモンスターのHPを減算する
                //攻撃エフェクト
                if (tekiCharacter.getHp() < 1) {  //モンスター死亡時
                    tekiCharacter.setHp(0);
                    // バトル画面情報の表示を更新する(バトル終了時)
                    if(yuushaCharacter.calcExpPoint(tekiCharacter.getExpPoint())) isYuushaLevelUp = true; //勇者レベルアップ時の表示のため
                    battleInfoView.battleEndDisp(yuushaCharacter.getHp(), tekiCharacter.getHp(), isYuushaTurn, isYuushaLevelUp);
                    isBattleEnd = true;
                    if(yuushaPos.y == (1*FLDSIZE)) isBossDefeated = true; //ボス魔女を倒したとき
                } else { //攻撃成功時
                    // 攻撃エフェクトを開始する
                    blinkTimer.reset();
                    blinkTimer.start();
                    // バトル画面情報の表示を更新する(バトル中)
                    battleInfoView.battleUpdateDisp(yuushaCharacter.getHp(), tekiCharacter.getHp(), isYuushaTurn);
                }
                isYuushaTurn = false; //攻撃ターンをモンスター側に変更
            } else { //モンスターの攻撃ターン
                d = tekiCharacter.getOffensePoint() - yuushaCharacter.getDefensePoint(); //攻撃力と防御力の差を取得
                r =Math.floor(Math.random() * d) + d; //ランダム攻撃値を取得
                yuushaCharacter.minusHp(r);
                //攻撃エフェクト
                if (yuushaCharacter.getHp() < 1) {  //勇者死亡時
                    yuushaCharacter.setHp(0);  //ランダム攻撃値で勇者のHPを減算する
                    // バトル画面情報の表示を更新する(バトル終了時)
                    battleInfoView.battleEndDisp(yuushaCharacter.getHp(), tekiCharacter.getHp(), isYuushaTurn, isYuushaLevelUp);
                    defeatedCounter++;
                    isBattleEnd = true;
                } else { //攻撃成功時
                    // 攻撃エフェクトを開始する
                    //blinkTimer.reset();
                    //blinkTimer.start();
                    // バトル画面情報の表示を更新する(バトル中)
                    battleInfoView.battleUpdateDisp(yuushaCharacter.getHp(), tekiCharacter.getHp(), isYuushaTurn);
                }
                isYuushaTurn = true; //攻撃ターンを勇者側に変更
            }
        }
        private function onTweetBtnDown(e:MouseEvent):void {
            var tweetMesseage:String = "おめでとうございます! " 
                                     + "あなたはワンダフルクエストを勇者敗北回数" + defeatedCounter + "回、" 
                                     + playTimeCounter +"秒でクリアしました!!!";
            var post:String = tweetMesseage + " " + "http://wonderfl.net/c/f2TL/" + " " + "#wonderfl ";
            navigateToURL(new URLRequest("http://twitter.com/home?status=" + escapeMultiByte(post)), "_blank");
        }
        /**-----------------------------------------------------
         * プレイ時間を記録するタイマー処理を行う。
         * ----------------------------------------------------- */
        private function playTimerHandler(event:TimerEvent):void {
            playTimeCounter++
        }
        /**-----------------------------------------------------
         * バトル画面攻撃エフェクトのためのタイマー処理を行う。
         * ----------------------------------------------------- */
        private function blinkTimerHandler(event:TimerEvent):void {
            if (blinkTimer.currentCount % 2 == 1) {
                tekiCharacter.visible = false;
            }
            else {
                tekiCharacter.visible = true;
            }
        }
    }
}
/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.system.LoaderContext;

/**-----------------------------------------------------
 * 勇者クラスです。勇者を作ったり、足踏させたり、向きを変えたりします。
 * ----------------------------------------------------- */
class YuushaCharacter extends Sprite {
    public var direction:int = 0;        //向き (0:前 1:後 2:左 3:右)
    private var _walkFlag:Boolean = true;//足踏み用
    private var _yuushaImages:Array = [];//勇者の画像集
    private var _imageURL:Array;
    private var _name:String;
    private var _hp:int;               //HP
    private var _hpMax:int;            //HP最大値
    private var _offensePoint:int;     //攻撃力
    private var _defensePoint:int;     //防御力
    private var _totalExpPoint:int = 0;   //経験値合計
    private var _yuushaLevel:int = 1;     //勇者レベル
    private const LEVEL2:int = 500;       //レベル2に必要な経験値合計
    private const LEVEL3:int = 1000;      //レベル3に必要な経験値合計
    private const LEVEL4:int = 2500;      //レベル4に必要な経験値合計
    private const LEVEL5:int = 5000;      //レベル5に必要な経験値合計
    /**-----------------------------------------------------
     * コンストラクタ。
     * ----------------------------------------------------- */
    public function YuushaCharacter(imgList:Array):void {
        _imageURL = imgList;
        for (var i:uint = 0; i < 8; i++) {
            var loader:Loader = new Loader();
            loader.load(new URLRequest(_imageURL[i]), new LoaderContext(true));
            _yuushaImages.push(loader);
            if(i) _yuushaImages[i].visible = false;
            addChild(_yuushaImages[i]);
        }
    }
    /**-----------------------------------------------------
     * パラメータを設定します。
     * ----------------------------------------------------- */
    public function setParameter(name:String, hpMax:int, offensePoint:int, defensePoint:int):void {
        _name = name;
        _hpMax = hpMax;
        _hp = hpMax;
        _offensePoint = offensePoint;
        _defensePoint = defensePoint;
    }
    /**-----------------------------------------------------
     * 経験値の値を加算・計算してレベルアップを判定します。
     * ----------------------------------------------------- */
    public function calcExpPoint(plusExpPoint:int):Boolean {
        _totalExpPoint += plusExpPoint;
        if(_totalExpPoint > 6000) {_totalExpPoint = 6000; return false;} //経験値6000以上の場合は6000に修正して何も行わない 
        if(_totalExpPoint > LEVEL2 && _yuushaLevel == 1) {
            plusMaxHp(50);
            plusOffensePoint(2);
            plusDefensePoint(1);
            _yuushaLevel = 2;
            return true;
        } else if (_totalExpPoint > LEVEL3 && _yuushaLevel == 2) {
            plusMaxHp(50);
            plusOffensePoint(2);
            plusDefensePoint(1);
            _yuushaLevel = 3;
            return true;
        } else if (_totalExpPoint > LEVEL4 && _yuushaLevel == 3) {
            plusMaxHp(50);
            plusOffensePoint(2);
            plusDefensePoint(1);
            _yuushaLevel = 4;
            return true;
        } else if (_totalExpPoint > LEVEL5 && _yuushaLevel == 4) {
            plusMaxHp(50);
            plusOffensePoint(2);
            plusDefensePoint(1);
            _yuushaLevel = 5;
            return true;
        } else {
            return false;
        }
    }
    /**-----------------------------------------------------
     * 勇者のレベルを返します。
     * ----------------------------------------------------- */
    public function getYuushaLevel():int {
        return _yuushaLevel;
    }
    /**-----------------------------------------------------
     * 名前を設定します。
     * ----------------------------------------------------- */
    public function setName(name:String):void {
        _name = name;
    }
    /**-----------------------------------------------------
     * 名前を返します。
     * ----------------------------------------------------- */
    public function getName():String {
        return _name;
    }
    /**-----------------------------------------------------
     * HP最大値を設定します。
     * ----------------------------------------------------- */
    public function setMaxHp(hpMax:int):void {
        _hpMax = hpMax;
    }
    /**-----------------------------------------------------
     * HP最大値を返します。
     * ----------------------------------------------------- */
    public function getMaxHp():int {
        return _hpMax;
    }
    /**-----------------------------------------------------
     * HP最大値を加算します。
     * ----------------------------------------------------- */
    public function plusMaxHp(plusPoint:int):void {
        _hpMax += plusPoint;
    }
    /**-----------------------------------------------------
     * HPの値を設定します。
     * ----------------------------------------------------- */
    public function setHp(hp:int):void {
        _hp = hp;
    }
    /**-----------------------------------------------------
     * HPの値を返します。
     * ----------------------------------------------------- */
    public function getHp():int {
        return _hp;
    }
    /**-----------------------------------------------------
     * HPをHP最大値に再設定します。
     * ----------------------------------------------------- */
    public function resetHp():void {
        _hp = _hpMax;
    }
    /**-----------------------------------------------------
     * 攻撃力の値を設定します。
     * ----------------------------------------------------- */
    public function setOffensePoint(offensePoint:int):void {
        _offensePoint = offensePoint;
    }
    /**-----------------------------------------------------
     * 攻撃力の値を返します。
     * ----------------------------------------------------- */
    public function getOffensePoint():int {
        return _offensePoint;
    }
    /**-----------------------------------------------------
     * 攻撃力の値を加算します。
     * ----------------------------------------------------- */
    public function plusOffensePoint(plusPoint:int):void {
        _offensePoint += plusPoint;
    }
    /**-----------------------------------------------------
     * 防御力の値を設定します。
     * ----------------------------------------------------- */
    public function setDefensePoint(defensePoint:int):void {
        _defensePoint = defensePoint;
    }
    /**-----------------------------------------------------
     * 防御力の値を返します。
     * ----------------------------------------------------- */
    public function getDefensePoint():int {
        return _defensePoint;
    }
    /**-----------------------------------------------------
     * 防御力の値を加算します。
     * ----------------------------------------------------- */
    public function plusDefensePoint(plusPoint:int):void {
        _defensePoint += plusPoint;
    }
    /**-----------------------------------------------------
     * HPを渡された値で減算します。
     * ----------------------------------------------------- */
    public function minusHp(minusPoint:int):void {
        _hp -= minusPoint;
    }
    /**-----------------------------------------------------
     * 足踏みさせます。
     * ----------------------------------------------------- */
    public function walk():void {
        _walkFlag = !_walkFlag;
        for (var i:uint = 0; i < 8; i++) {
            if (i == 2*direction+int(_walkFlag)) _yuushaImages[i].visible = true;
            else _yuushaImages[i].visible = false;
        }
    }
    /**-----------------------------------------------------
     * 向きを変更します。
     * numは勇者の向きを表します。(0~3)
     * ----------------------------------------------------- */
    public function changeDirection(num:int):void {
        direction = num;
        for (var i:uint = 0; i < 8; i++) {
            if (i == 2*direction+int(_walkFlag)) _yuushaImages[i].visible = true;
            else _yuushaImages[i].visible = false;
        }
    }
}
/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.system.LoaderContext;

/**-----------------------------------------------------
 * 敵クラスです。敵を作ったり、敵ステータスを保持したりします。
 * ----------------------------------------------------- */
class TekiCharacter extends Sprite {
    private var _tekiImages:Array = [];//敵の画像集
    private var _imageURL:Array;
    private var _name:String;
    private var _hp:int;               //HP
    private var _hpMax:int;            //HP最大値
    private var _offensePoint:int;     //攻撃力
    private var _defensePoint:int;     //防御力
    private var _expPoint:int;         //経験値
    /**-----------------------------------------------------
     * コンストラクタ。
     * ----------------------------------------------------- */
    public function TekiCharacter(imgList:Array):void {
        _imageURL = imgList;
        for (var i:uint = 0; i < 4; i++) {
            var loader:Loader = new Loader();
            loader.load(new URLRequest(_imageURL[i]), new LoaderContext(true));
            _tekiImages.push(loader);
            if(i) _tekiImages[i].visible = false;
            addChild(_tekiImages[i]);
        }
    }
    /**-----------------------------------------------------
     * パラメータを設定します。
     * ----------------------------------------------------- */
    public function setParameter(name:String, hpMax:int, offensePoint:int, defensePoint:int, expPoint:int):void {
        _name = name;
        _hpMax = hpMax;
        _hp = hpMax;
        _offensePoint = offensePoint;
        _defensePoint = defensePoint;
        _expPoint = expPoint;
    }
    /**-----------------------------------------------------
     * 画像を設定します。
     * ----------------------------------------------------- */
    public function setImage(imageNo:int):void {
        for (var i:uint = 0; i < 4; i++) {
            if (i == imageNo) _tekiImages[i].visible = true;
            else _tekiImages[i].visible = false;
        }
    }
    /**-----------------------------------------------------
     * 名前を設定します。
     * ----------------------------------------------------- */
    public function setName(name:String):void {
        _name = name;
    }
    /**-----------------------------------------------------
     * 名前を返します。
     * ----------------------------------------------------- */
    public function getName():String {
        return _name;
    }
    /**-----------------------------------------------------
     * HPをHP最大値に再設定します。
     * ----------------------------------------------------- */
    public function resetHp():void {
        _hp = _hpMax;
    }
    /**-----------------------------------------------------
     * HP最大値を設定します。
     * ----------------------------------------------------- */
    public function setMaxHp(hpMax:int):void {
        _hpMax = hpMax;
    }
    /**-----------------------------------------------------
     * HP最大値を返します。
     * ----------------------------------------------------- */
    public function getMaxHp():int {
        return _hpMax;
    }
    /**-----------------------------------------------------
     * HPの値を設定します。
     * ----------------------------------------------------- */
    public function setHp(hp:int):void {
        _hp = hp;
    }
    //
    /**-----------------------------------------------------
     * HPの値を返します。
     * ----------------------------------------------------- */
    public function getHp():int {
        return _hp;
    }
    /**-----------------------------------------------------
     * 攻撃力の値を設定します。
     * ----------------------------------------------------- */
    public function setOffensePoint(offensePoint:int):void {
        _offensePoint = offensePoint;
    }
    /**-----------------------------------------------------
     * 攻撃力の値を返します。
     * ----------------------------------------------------- */
    public function getOffensePoint():int {
        return _offensePoint;
    }
    /**-----------------------------------------------------
     * 防御力の値を設定します。
     * ----------------------------------------------------- */
    public function setDefensePoint(defensePoint:int):void {
        _defensePoint = defensePoint;
    }
    /**-----------------------------------------------------
     * 防御力の値を返すします。
     * ----------------------------------------------------- */
    public function getDefensePoint():int {
        return _defensePoint;
    }
    /**-----------------------------------------------------
     * 経験値の値を設定します。
     * ----------------------------------------------------- */
    public function setExpPoint(expPoint:int):void {
        _expPoint = expPoint;
    }
    /**-----------------------------------------------------
     * 経験値の値を返すします。
     * ----------------------------------------------------- */
    public function getExpPoint():int {
        return _expPoint;
    }
    /**-----------------------------------------------------
     * HPを渡された値で減算します。
     * ----------------------------------------------------- */
    public function minusHp(minusPoint:int):void {
        _hp -= minusPoint;
    }
}
/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
/**-----------------------------------------------------
 * Fieldクラスです。画像のURLと、そのフィールドが障害物か否かを保存します。
 * ----------------------------------------------------- */
class Field {
    public var url:String;            //画像のURL
    public var isObstacle:Boolean;    //障害物か否か (true:障害物  false:障害物じゃない(歩ける))
    
    public function Field(s:String, b:Boolean = false):void {
        url = s;
        isObstacle = b;
    }
}
/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;

/**-----------------------------------------------------
 * バトル画面情報表示用クラスです。
 * ----------------------------------------------------- */
class BattleInfoView extends Sprite {
    private var _text:TextField;
    private var _yuushaHpMax:int;
    private var _yuushaLevel:int;
    private var _tekiHpMax:int;
    private var _tekiName:String;
    /**-----------------------------------------------------
     * コンストラクタ。
     * ----------------------------------------------------- */
    function BattleInfoView(yuushaHp:int, yuushaHpMax:int, yuushaLevel:int, tekiHp:int, tekiHpMax:int, tekiName:String) {
        _yuushaHpMax = yuushaHpMax;
        _yuushaLevel = yuushaLevel;
        _tekiHpMax = tekiHpMax;
        _tekiName = tekiName;

        _text=new TextField();
        var format:TextFormat=new TextFormat();
        _text.autoSize = TextFieldAutoSize.LEFT;
        format.color = 0xEEEEEE;
        format.size = 20;
        _text.defaultTextFormat=format;
        addChild(_text);

        battleStartDisp(yuushaHp, tekiHp);
    }
    /**-----------------------------------------------------
     * 戦闘開始時の表示を行います。
     * ----------------------------------------------------- */
    public function battleStartDisp(yuushaHp:int, tekiHp:int):void {
        _text.text = "Level: " + _yuushaLevel + "\n"
                   + "勇者: HP : " + String(yuushaHp) + "/" + _yuushaHpMax + "\n"
                   + _tekiName + ": HP : " + String(tekiHp) + "/" + _tekiHpMax + "\n"
                   + _tekiName + "があらわれた!" + "\n";
    }
    /**-----------------------------------------------------
     * 戦闘時の表示の更新を行います。
     * ----------------------------------------------------- */
    public function battleUpdateDisp(yuushaHp:int, tekiHp:int, isYuushaTurn:Boolean):void {
        _text.text = "Level: " + _yuushaLevel + "\n"
                   + "勇者: HP : " + String(yuushaHp) + "/" + _yuushaHpMax + "\n"
                   + _tekiName + ": HP : " + String(tekiHp) + "/" + _tekiHpMax + "\n";
        if(isYuushaTurn) { //勇者の攻撃ターン
            _text.text = _text.text + "勇者の攻撃!" + "\n" + _tekiName + "にダメージを与えた!" + "\n";
        } else { //モンスターの攻撃ターン
            _text.text = _text.text + _tekiName + "の攻撃!" + "\n" + "勇者にダメージを与えた!" + "\n";
        }
    }
    /**-----------------------------------------------------
     * 戦闘終了時の表示を行います。
     * ----------------------------------------------------- */
    public function battleEndDisp(yuushaHp:int, tekiHp:int, isYuushaTurn:Boolean, isYuushaLevelUp:Boolean):void {
        _text.text = "Level: " + _yuushaLevel + "\n"
                   + "勇者: HP : " + String(yuushaHp) + "/" + _yuushaHpMax  + "\n"
                   + _tekiName + ": HP : " + String(tekiHp)  + "/" + _tekiHpMax + "\n";
        if(isYuushaTurn) { //勇者の攻撃ターン
            _text.text = _text.text + _tekiName + "をたおした!!!" + "\n";
            if(isYuushaLevelUp) _text.text = _text.text + "勇者はレベルアップした!!!" + "\n"; //勇者レベルアップ時
        } else { //モンスターの攻撃ターン
            _text.text = _text.text + "勇者はたおされてしまった" + "\n";
        }

    }
}
/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
import flash.display.*;
import flash.system.*;
import flash.text.*;

/**-----------------------------------------------------
 * カスタムボタン。
 * ----------------------------------------------------- */
class CustomButton extends SimpleButton {
    private var btnName : String = "";//ボタン名
    private var btnNo : int = 0;//ボタン番号
    /**-----------------------------------------------------
     * コンストラクタ。
     * ----------------------------------------------------- */
    public function CustomButton(label:String="",no:int=0) {
        btnName = label;
        btnNo = no;
        //状態
        upState = makeSprite(label,0x00ff00);
        overState = upState;
        downState = makeSprite(label,0x0000ff);
        hitTestState = upState;
    }
    public function getBtnName():String {
        return btnName;
    }
    public function getBtnNo():int {
        return btnNo;
    }
    /**-----------------------------------------------------
     * ボタン用スプライト作成。
     * ----------------------------------------------------- */
    private function makeSprite(text:String,color:uint):Sprite{
        //ボタン用ラベル作成
        var label : TextField = new TextField();
        label.text = text;
        label.autoSize = TextFieldAutoSize.CENTER;
        label.selectable = false;
        //ボタン用スプライト作成
        var sp:Sprite = new Sprite();
        sp.graphics.beginFill(color);
        sp.graphics.drawRoundRect(0, 0, 100, 20, 15);
        sp.graphics.endFill();
        sp.alpha = 0.8;            
        sp.addChild(label);
        //ラベル用フォーマット設定
        var format:TextFormat=new TextFormat();
        format.font = "Courier New";
        format.bold = true;
        format.size = 13;
        label.setTextFormat(format);
        return sp;
    }
}