▼ActionScript 2.0メモ▼
パズルゲーム


パズルゲームを作成する。マウスで操作します。携帯端末ではポインティングデバイスがないので操作できません。




画像の準備

0.png〜24.png


25.png

26.png


ソースコード
PuzzleGame.as
//パズルゲーム
class PuzzleGame extends MovieClip {
    //変数
    private var image:Array=new Array(27);//イメージ
    private var piece:Array=new Array(25);//ピース

    //コンストラクタ
    function PuzzleGame() {
        var ref:Object=this;
        var i:Number;
        var mouseListener:Object=new Object();

        //イメージ
        for (i=0;i<27;i++) {
            image[i]=addMovie("image"+i,"image"+i);
            image[i]._visible=true;
        }
        image[26]._x=20;
        image[26]._y=120;
        
        //ピース
        for (i=0;i<25;i++) piece[i]=i;

        //マウスイベント
        Mouse.addListener(mouseListener);
        mouseListener.onMouseDown=function() {
            var x:Number=Math.floor(ref._xmouse);
            var y:Number=Math.floor(ref._ymouse);
            //ピース
            if (0<x && x<120 && 0<y && y<120) {
                ref.clickPiece(Math.floor(x/24)+Math.floor(y/24)*5);
            }
            //スタート
            if (20<x && x<100 && 120<y && y<140) {
                ref.start();
            }
        }

        //描画
        draw();
    }

    //ゲームの開始
    private function start():Void {
        var i:Number;
        //シャッフル
        for (i=0;i<300;i++) clickPiece(Math.floor(Math.random()*24));
        //再描画
        draw();
    }

    //描画
    private function draw():Void {
        var i:Number;
        var complete:Boolean=true;//完成フラグ
        var freePos:Number  =0;   //空白位置

        //ピースの描画
        for (i=0;i<25;i++) {
            if (piece[i]!=i)  complete=false;
            if (piece[i]==24) freePos=i;
            image[piece[i]]._x=Math.floor(i%5)*24;
            image[piece[i]]._y=Math.floor(i/5)*24;
        }

        //空白の描画
        if (complete) {
            image[25]._visible=false;
        } else {
            image[25]._x=Math.floor(freePos%5)*24;
            image[25]._y=Math.floor(freePos/5)*24;
            image[25]._visible=true;
        }
    }
    
    //ピースをクリック
    private function clickPiece(pos:Number):Void {
        //上
        if (pos>=5 && piece[pos-5]==24) {
            piece[pos-5]=piece[pos];
            piece[pos]=24;
        }
        //下
        else if (pos<=19 && piece[pos+5]==24) {
            piece[pos+5]=piece[pos];
            piece[pos]=24;
        } 
        //左
        else if (pos%5!=0 && piece[pos-1]==24) {
            piece[pos-1]=piece[pos];
            piece[pos]=24;
        } 
        //右
        else if (pos%5!=4 && piece[pos+1]==24) {
            piece[pos+1]=piece[pos];
            piece[pos]=24;
        }
        //再描画
        draw();
    }

    //ムービーの追加
    private function addMovie(name:String,linkageID:String):MovieClip {
        createEmptyMovieClip(name,getNextHighestDepth());
        this[name].attachMovie(linkageID,linkageID,getNextHighestDepth());
        this[name]._visible=false;
        return this[name];
    }
}


application.xml
<?xml version="1.0" encoding="iso-8859-1"?>

<!-- バージョン=7,サイズ=120140,フレームレート=30フレーム/秒 -->
<movie version="7" width="120" height="140" framerate="30">

    <!-- 背景色=白 -->
    <background color="#ffffff"/>

    <!-- class.swfを含める -->
    <clip import="classes.swf" />
    
    <frame>
        <library>
            <!-- アプリケーション -->
            <clip id="Application" class="PuzzleGame" />

            <!-- 画像ファイル -->
            <clip id="image0" import="0.png" />
            <clip id="image1" import="1.png" />
            <clip id="image2" import="2.png" />
            <clip id="image3" import="3.png" />
            <clip id="image4" import="4.png" />
            <clip id="image5" import="5.png" />
            <clip id="image6" import="6.png" />
            <clip id="image7" import="7.png" />
            <clip id="image8" import="8.png" />
            <clip id="image9" import="9.png" />

            <clip id="image10" import="10.png" />
            <clip id="image11" import="11.png" />
            <clip id="image12" import="12.png" />
            <clip id="image13" import="13.png" />
            <clip id="image14" import="14.png" />
            <clip id="image15" import="15.png" />
            <clip id="image16" import="16.png" />
            <clip id="image17" import="17.png" />
            <clip id="image18" import="18.png" />
            <clip id="image19" import="19.png" />

            <clip id="image20" import="20.png" />
            <clip id="image21" import="21.png" />
            <clip id="image22" import="22.png" />
            <clip id="image23" import="23.png" />
            <clip id="image24" import="24.png" />
            <clip id="image25" import="25.png" />
            <clip id="image26" import="26.png" />
        </library>

        <!-- アプリケーションをXY座標(0,0)、深度1000に配置 -->
        <place id="Application" name="app" x="0" y="0" depth="1000" />
    </frame>
</movie>


コンパイル
mtasc -version 7 -swf classes.swf -header 1:1:30 PuzzleGame.as
swfmill simple application.xml PuzzleGame.swf




−戻る−