電子書籍の厳選無料作品が豊富!

プログラム初心者です。AS3.0で書いています

簡単な15面パズルを作りたいです。
15面パズルは解けない配置があるらしいので、ランダムではなく数字の入れ替えを100回くらい行いたいです。この入れ替えの処理をどう書けばいいのか教えてください
スタートボタンを押したときに4つの隣接するマスをランダムに選び、入れ替えを行うようにすればいいらしいのですがどうやって書けばいいのかわかりません(端のマスは例外処理をいれる)
できれば重複もなくしたいです

よろしくお願いします

メインタイムラインには
mc1~mc16のムービークリップ
mcのなかに入れ子で数字が入っています
no1~no16のテキスト

スタートボタン内のasです
var i:int;

var parentObject:Object=Object(parent);
parentObject.sbtn.addEventListener(MouseEvent.CLICK,Mouse_Down);
function Mouse_Down(event:MouseEvent):void
{
for( i = 1 ; i <= 16 ; i++ ) //カード番号の初期化、左上に1右下に16の規則的な配置
{
Object(root)[ "mc" + i ]["no" + i].text = "";
}


for( i = 1 ; i <= 16 ; i++) //配列の初期化クリア
{
//配列の初期化をクリアできる処理
}

//ここにスタートボタンを押したときに4つの隣接するマスをランダムに選び、100回くらい入れ替えができる処理を入れたいです

if( Object(root)[ "mc" + i ]["no" + i].text == 16 )
{
Object(root)[ "mc" + i ]["no" + i].text = ""; //「no16」の表示をクリアして空のマスを作る
Object(root).soeji = i; //数値をクリアした配列の「添え字」を保存
}
}

A 回答 (1件)

20年ばかり前に、Basio言語で作ったことがありますが、考えかたのみ紹介すると、


(1)配列Aを16個を用意する(25個、36個、49個のレベルも選べるようにしました。)
(2)それぞれの配列に、配列変数と同じ数字を割り当てる。16番目には0を割り当てる。
(3)ランダムに1~4の数字Xを出し、空白のパネル(0が割り当てられている配列)がどちらに進むか決める。
(4)(3)で決めた方向が、適切でないとき(枠外にはみ出る)、(3)をやり直す。
(5)進む方向の配列変数にある数字と、空白のマスの数字(つまりは0)を置き換える。
(6)(3)~(5)を何回か繰り返す。繰り返す回数(置き換える回数)も選べるようにしました。
(7)Play中は、カーソルキーにより進む方向を決め、(3)~(5)を繰り返す。
というものです。つまりは、マスはそのままにし、そこに入る数字だけを入れ替えるというものです。
大体の方針はつかんでらっしゃるみたいですね。(4)は、X=1のとき上のマスと交換としたなら、空白のマスが1~4だったら上はないのでやり直し、というif文書けばいい。(5)は上と交換なら、配列変数-4と交換。
ランダムに選ぶには、宣言が必要ですよ。そうしなければ、いつも同じ数字が出てくることになり、同じ結果になる。
表示は別のObjectで、A(1)~A(16)まで表示すればいい。
とまあ、こんなものです。できあがったら、私のやったみたいに、レベルを変えられるようにしたら、面白いですよ。
    • good
    • 0
この回答へのお礼

貴重な意見ありがとうございました
なんとか作れました

お礼日時:2011/02/13 19:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!