//パズルゲーム
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];
}
}
|