重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

携帯Flashゲームの書籍で勉強中なのですが、
以下のasで理解できないところがありまして、
教えていただけたらとても助かります。


----------------------------------
/*もぐらの数をランダムで*/
m_kazu = random(4)+1;

for (i=1; i<=m_kazu; i++) {
/*出現する場所をランダムにしてmyNumberに格納*/
eval("myNumber" add i) = random(9)+1;

/*ランダムな数字が重ならないように*/
for (j=1; j<=m_kazu; j++) {
while (eval("myNumber" add i) == eval("myNumber" add (i-j))) {
eval("myNumber" add i) = random(9)+1;
}
}
m_basyo = "../mg" add eval("myNumber" add i);
tellTarget (m_basyo) {
gotoAndPlay(2);
}
}
----------------------------------
この
for (j=1; j<=m_kazu; j++) {
while (eval("myNumber" add i) == eval("myNumber" add (i-j))) {
eval("myNumber" add i) = random(9)+1;
}
の部分がわからないのです。どうして"myNumber" add iとmyNumber" add (i-j)が等しかったら
ランダムの数字が同じものだという事になるのでしょうか?
iとjは同じm_kazuを使っているのではないのでしょうか??

プログラム初心者が勉強を始めたばかりなので、
質問も要領を得ていないので、大変申し訳ないのですが
どなたか教えてください~!!

A 回答 (1件)

わからないのは当然だと思います。


元からそのスクリプト(プログラムの考え方)が間違っています。
(間違っているものの説明などできない(する気はしない)ので説明は省略しますが。)

スクリプトが間違っていることの実証として
m_kazu を 4 固定として下のコードで確かめてみました。

//--------------------------
m_kazu = 4;

for (i=1; i<=m_kazu; i++) {
/*出現する場所をランダムにしてmyNumberに格納*/
eval("myNumber" add i) = random(9)+1;
/*ランダムな数字が重ならないように*/
for (j=1; j<=m_kazu; j++) {
while (eval("myNumber" add i) == eval("myNumber" add (i-j))) {
eval("myNumber" add i) = random(9)+1;
}
}
}

trace(myNumber1 add myNumber2 add myNumber3 add myNumber4);
//--------------------------

上記スクリプトの20回試行で
trace 出力より次のようなデータが得られました。

5343←×
8719
5643
1378
2375
9878←×
7685
3512
3647
4578
3615
9514
2183
2495
2779←×
5432
8667←×
8527
7954
9286

同じ数字が出にくくなっているだけのことで実際には同じ数字は出ます。
(また無限ループ(半無限ループ)に陥る可能性も秘めています。)
こんなのダメでしょう。

 

Flash Lite 1.x には function や Array などはありませんからそのままは使えませんが
次のページを参考にする(考え方だけを盗む)と良いと思います。

「FN0212003 - 配列を偏りなくランダムに並替える - Flash テクニカルノート」
http://www.fumiononaka.com/TechNotes/Flash/FN021 …
    • good
    • 0
この回答へのお礼

BlurFiltanさま

わかりやすく解説してくださってありがとうございます!
参考リンクのテンプも本当にありがとうございます!!
読みながら勉強してみます。

BlurFiltanさまのほかの方への回答もとても丁寧でわかりやすいので
いつも参考にさせていただいています。

ありがとうございました!

お礼日時:2012/09/05 10:36

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