プロが教える店舗&オフィスのセキュリティ対策術

はじめまして。
現在flashでクイズを作っています。
一回スタートさせれば問題はランダムに5問でます。
正解し続ければ5問でクリア。
間違えれば終了です。

そこでクイズに使う背景を重複しないものにしたいと思っていますがうまくいきません。

dummy_mcを作ってそこに
現在背景用の1~10swfファイルをランダム表示させています。
ただこれだと同じ背景が続けてでてきたりしてしまいます。
これを一回のゲームで背景が重複しないで表示させたいと思っています。

アニメーション、フレーム移動などは理解していますが
scriptになると正直わからないことだらけです。
現在勉強中でscriptはコピペしながら改造している状態です。

解決法をわかるかたがいらっしゃったらよろしくお願い致します。

A 回答 (4件)

注釈つけておきます。


なるべく理解した方がいいですよ。

numberList = [1, 2, 3];
//配列numberListを1,2,3を入れた状態で生成。

randomList = [];
//配列numberListを空の状態で生成。

for (k=3; k>=1; k--) {
//kの初期値が3で、
//繰り返しごとにkから1引いて、
//kが1以上の内は繰り返せ。
//という処理だけども...※後述

randNum = Math.floor(Math.random()*(k));
//kを元に生成した乱数を変数randNumに代入。

choiceNum = numberList[randNum];
//配列numberListのrandNum番目の要素を、
//変数choiceNumに抽出し代入。

randomList.push(choiceNum);
//choiceNumを配列randomListに追加。

numberList.splice(randNum, 1);
//配列numberListの抽出済み要素を取り除く。
}

※補足
for (k=3; k>=1; k--) {

これはkにnumberListの配列の要素数を
いちいち設定しないといけません。
配列の要素数はlengthで取り出せるので、
for (k = numberList.length; k>=1; k--) {
としておけば、numberListの要素数をどう変えても
自動的に要素数分のシャッフル処理ができるのでお得(?)

まとめると…(コピペタイム)

///////////////////////////////////////////////

MOTO = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
BARA = [];
for (k = MOTO.length; k > 0; k--) {
RAN = Math.floor(Math.random() * (k));
KAE = MOTO[RAN];
BARA.push(KAE);
MOTO.splice(RAN, 1);
}
//以下、出力パネル確認用
trace("BARA= " + BARA);
for (k = 0; k < BARA.length; k++) {
trace("BARA[" + k + "]= " + BARA[k]);
}

///////////////////////////////////////////////

「numberList」とか「choiceNum」とかだと
無駄に敷居が高く見えちゃうもんなので、

元の配列はMOTO
シャッフル後の配列はBARA
乱数はRAN
順序を変更する要素はKAE

に、それぞれして直してみました。

変数名や配列名は任意です。人に見せた時に分かるように、
意味のある英語にしておいた方がいいってだけの事で、
自分しか見ないなら、自分が分かれば何でもいいんです。(´~`)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
おかげさまでなんとか先に進めそうです。
助かりました。
貴重なお時間を頂きましてほんとありがとうございます。

お礼日時:2007/11/11 18:30

> 現在ランダムに数字を出すスクリプトは分かったのですが



なっ 単なるコピペじゃん ヽ(`⌒´)ノ=3

元はコレでしょーっ!
http://hfm-kenchan.com/Lesson/log_qa/D0709023.htm

これは「分かった」とは言いません。「知った」です。
って、まぁ別にいいんですけどね…(´~`;)
ただ、何をやってるかは知っておくべきだと思いますよ…

例えば、

> このランダム数字を配列に入れ直すことが出来ず悩んでます。

悩む必要はありません。だってもう入ってますやん。
randomListってのがソレです。

最終行に
trace(randomList); って入れてみて下さい。
出力パネルで確認できますから。

> 配列に入れ直してそれを順に取り出していけば
> なんとかカタチになるかな~とも思っているのですが
> どうでしょう?

はい、そうです。それでカタチになるです。

シャッフルを実行した後の配列randomListに
仮に[2,3,1]と入ったとします。

randomList[0]と参照すれば2が取り出せます。
randomList[1]と参照すれば3が取り出せます。
randomList[2]と参照すれば1が取り出せます。

要素も数値だと分かりにくいかな?

例えば、仮にSHIMAPIYOという配列に
["ぱんだ","いたち","ひよこ","ごりら"]が入ってたとします。
SHIMAPIYO[0]と参照すれば "ぱんだ" が取り出せます。
SHIMAPIYO[1]と参照すれば "いたち" が取り出せます。
SHIMAPIYO[2]と参照すれば "ひよこ" が取り出せます。
SHIMAPIYO[3]と参照すれば "ごりら" が取り出せます。

という事です。

「ひよこ」ラベルにジャンプしたいなら、
gotoAndStop(randomList[2]);

「bg3.swf」をBGムービークリップに読み込みたいなら、
BG.loadMovie("bg"+randomList[1]+"swf");

「ごりらはぱんだの2倍強い」と
MSGテキストフィールドに表示させたいなら

MSG.text=SHIMAPIYO[3]+"は"+SHIMAPIYO[0]+"の"+randomList[0]+"倍強い";

となります。(・_・) どうでしょ。

おそらく必要なのはswf読み込みのヤツだけでしょうけど。
配列理解の一助として。
    • good
    • 0

> それをランダムに入れ替え


> 現在ランダムに入れ替たところまでは分かったのですが

どうランダムに入れ替えるのでしょうか。
「シャッフルせよ」なんてメソッドはありません。
ここはそんなサクッと流せるところではないのです。

> で、配列もそう使うんだ・・・
> くらいで正直よくわかりません。

じゃあ、配列をまず理解すべきだと思います。
変数は理解していますか。

> とおもってるのですが
> これをどうひとつづつ処理していくのか現在悩んでる状況です。

了解です。でもこれは一旦おいときましょう。
シャッフルについて形になってからでもいいので。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
多分自分自身分かってなかったと思います。
現在変数も確認しながら理解しようとしてる最中です。

現在ランダムに数字を出すスクリプトは分かったのですが

/*numberList = [1, 2, 3];
randomList = [];
for (k=3; k>=1; k--) {
randNum = Math.floor(Math.random()*(k));
choiceNum = numberList[randNum];
randomList.push(choiceNum);
numberList.splice(randNum, 1);
}*/

このランダム数字を配列に入れ直すことが出来ず悩んでます。
配列に入れ直してそれを順に取り出していけば
なんとかカタチになるかな~とも思っているのですが
どうでしょう?

すいません、折角ご回答頂いたのに正直頭の中混乱してます。
もしお付き合いいただけるようであれば助言等いただければ助かります。

ご回答ありがとうございました。

お礼日時:2007/11/11 16:10

最初に表示させる要素を用意します。


  例えば、1,2,3,4,5,6

その順序をランダムに入れ替えます。
  例えば、2,5,6,1,3,4

で、これを頭から順に表示させる、考え方としてはこんな感じです。
これをどうスクリプトにするかを考えてください。
実際のコードはともかくもフローは思い描けるでしょう。
まずはそこからだと思います。

配列は分かりますか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご返信遅くなり申し訳ございませんでした。

いろいろ考えて大体のフローは思いえがけたと思います。

最初に表示させる要素を用意
それをランダムに入れ替え
ランダム要素から(フレームはgotoで戻してるから)
enterframeごとにランダム要素を順番に処理していく

で、配列もそう使うんだ・・・
くらいで正直よくわかりません。

現在ランダムに入れ替たところまでは分かったのですが
ランダムに入れ替えた後
たとえば
vae movie_array=["2.swf","3.swf","1.swf"]
をenterframeごとにひとつづつ処理していけばいいかな・・
とおもってるのですが
これをどうひとつづつ処理していくのか現在悩んでる状況です。

また助言等いただけるものであれば
ご回答いただければ幸いです。
ありがとうございました。

お礼日時:2007/11/11 09:45

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