無限ループを回避した乱数表示プログラムの作り方

このQ&Aのポイント
  • 質問者は無限ループを回避しながら乱数を表示するプログラムを作りたいとしています。
  • 質問者はフレーム1で前回の乱数と異なる乱数を表示する必要があります。
  • 質問者は指定回数の乱数表示を満たしたらフレーム3に遷移する必要があります。
回答を見る
  • ベストアンサー

ぐるぐるーぷ。

作りたい内容ですが、 (1)乱数を出して、表示。 (2)ループで前回と違う乱数を表示。 (3)あとは任意の回数表示させて終了。 【フレーム1】 a = 0;//前回のrandam_aを代入する!これで前の数字を出さないようにする。 aa = 0;//aループの条件スイッチ do{ randam_a = Math.floor(Math.random()*9) + 1;//ランダムの整数 if(randam_a == a){ aa = 1;//ここで【doループ】抜けれるようにフラグ } while (aa == 1); aa = 0;//また【フレーム1】に戻っても【doループ】できるように。 規定回数を表示を満たしてないなら gotoAndPlay(2); 規定回数の表示を満たしたなら gotoAndPlay(3); 【フレーム2】 hyouji = randam_a;//ダイナミックテキストに表示。 gotoAndPlay(1); 【フレーム3】 なにもなし。 おおまかに作りましたが 無限ループで抜けれない>< 悪いところは条件文って そこしかないので判るのですが、 どういう表現で、この流れが作れるか お助けくださいませ。

  • Flash
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.1

見た感じ, if文の閉じ括弧( } ) もしくは, do...while文 の閉じ括弧のどちらかが抜けています。 実際にコピペしてみると..., やはり,シンタックスエラーでパブリッシュできませんよ。 do...while文 や if文 以前に, パブリッシュできないので,無限ループにも何もならないのですが。 無限ループ以前に,パブリッシュできてしまう点がすんごく疑問です。 } while (aa == 1); の前に } を追加すれば,パブリッシュできました。 (自動インデントを入れていますが。) ------------------------------------------- a = 0; //前回のrandam_aを代入する!これで前の数字を出さないようにする。 aa = 0; //aループの条件スイッチ do { randam_a = Math.floor(Math.random()*9)+1; //ランダムの整数 if (randam_a == a) { aa = 1; //ここで【doループ】抜けれるようにフラグ } } while (aa == 1); aa = 0; //また【フレーム1】に戻っても【doループ】できるように。 // randam_a を trace trace(randam_a); ------------------------------------------- アクションパネルの上部には, 左から, [+] [虫眼鏡] [ライフルの照準] [チェック] [行揃え] [コメント?] [投げ縄] のようなボタンが並んでいますが, [チェック(Vみたいなの)] と [行揃え] みたいなボタンをうまく活用してください。 [チェック(Vみたいなの)] みたいなボタンはシンタックスチェックで,構文をチェックしてくれます。 [行揃え] みたいなボタンは,自動でインデントを付けてくれるのでコードが見やすくなります。 その他のボタンも, みんなすばらしい機能の持ち主たちです。 「スクリプトアシスト」など最たる物です。 活用してあげてください。 でも,上のように,  } を元から付けてあっても, 確率的には無限ループすとことは絶対にないとは言い切れません。 randam_a が 0 であり続ける場合です。 しかしなんで,パブリッシュできたのでしょう? それが不思議で不思議で。 「教えて!goo」 か 「OKWave」 に質問してみたいところです。

dizzdive
質問者

お礼

お手数おかけしましたm(><)m 現在、質問に投げたソースを randam_aとrandam_b側が欲しかったので 片方のソースを削って、 実際に作りながら、ループ処理をやっていましたー! かっこが足りないのはコピーミス(汗 コピーする時に変数も質問用に改良していたので そのサンプルでエラー出ても不思議じゃないです! ごめんなさいです! スクリプト編集画面の便利なコマンド教えてもらって 助かりました! やっとアクションスクリプトの事も フレームとシーンの違いも理解できてきて、 整理できてきたところです! たくさんご指導してもらってありがとうございます。 おかげでFlashが楽しいです!

その他の回答 (1)

noname#35109
noname#35109
回答No.2

#1です。 フレームのループの指定回数でしたか。失礼しました。 フレーム1 に次のように書いて ---------------------------------- // 規定数の設定(5問) regulation = 5; // もし変数countが未定義であれば if (count == undefined) { // count の初期値を 0 にする var count = 0; } --------------------------------- フレーム2 のスクリプトの最後に 次のように書くと一応できます。 -------------------------------- // count に 1 を加算 count++; // もし count が regulation に達すれば if (count == regulation) { // フレーム3 に行くけど this.gotoAndPlay(3); } else { // それ以外はループ this.gotoAndPlay(1); } -------------------------------- 一応できますというのは, 一応規定回数フレーム移動はしますということです。 実際は,フレーム2 に上のようなことを書くと一瞬で フレーム1 や フレーム3 に行ってしまいますから, フレーム2 に何かが表示されたかされていないかは確認することはできません。 ですから実際には, フレーム2~フレーム○ まで何かを表示させるようにしておいて, フレーム○ に上記2番目のスクリプトを, gotoAndPlay(○+1);  などに書き換えて,用意する必要があるとは思いますが。

関連するQ&A

  • 【数字ランダム】計算問題ランダム計画

    1から10の乱数を使った 足し算、引き算を考えていまして、 ダイナミックテキスト(mondai)に 式と答えを表示。 同じ数字の組み合わせの問題が続けて出るので それを回避するために、 皆様のお知恵をお借りしたいと思いました。 自分が考えている回路図は、 //乱数[0-9] randam_a = Math.floor(Math.random()*10); randam_b = Math.floor(Math.random()*10); //足し算か引き算か計算ちぇっく check = Math.floor(Math.random()*2); ※このあたりに前回のrandam_a & randam_bの 値を調べて同じならば、前回と違う値が入るまで loop処理を加える。 //足し算ならば if (check == 0){   total = randam_a - randam_b ;   mondai = String(randam_a)+"+"+String(randam_b)+"="+String(total); //引き算ならば } else if (check == 1) {    total = randam_a + randam_b ;    mondai = String(randam_a)+"-"+String(randam_b)+"="+String(total); //引き算の処理ならば }else if (check == 1){ (略してます) } という流れを考えてます。 それ以外に、いけそうな処理の流れが あれば、そのチャートも知りたいので 解説して頂けると勉強になります>< 宜しくお願いします!

    • ベストアンサー
    • Flash
  • Flash MX フレーム ランダムに取得する

    現在、あるコンテンツ製作していて、 画面上に5個画像(ムービークリップ)を表示しています。 そのムービークリップのなかには、グラフィックが10個入っていて、 targetFrame = Math.ceil(Math.random()*10); this.gotoAndPlay(targetFrame); というスクリプトで10個のフレーム中からランダムに表示させています。 (画面上の5個の画像は、その1個ずつが10個(フレーム)の中からランダムに選ばれるので、 5個の中には、同じ画像(同じフレーム)が含まれる場合があります。) 画面上に、あと2個画像(ムービークリップ)を追加し、その2個も、 10個のグラフィック(フレーム)中からランダムに表示させたいのですが、 かならず2個とも同じグラフィック(同じフレーム)を選ばせるにはどうすればよいでしょうか? Flash歴は長いのですが、知識はあまりない馬鹿な私に教えてやってください。

    • ベストアンサー
    • Flash
  • 画像がランダムに表示されるFLASHを作りたい

    こんにちは、お世話になります。 下記FLASHを作りたく以前も質問させていただいたのですが、どうしてもうまくいかないところがあり、再度投稿させていただきます。 (1)リロードするたびにランダムで切り替わる画像1~6がある (2)画像の横にボタン1~6があり、マウスオーバーするとそれぞれ画像1、画像2…と表示される (3)ボタン1~6をクリックするとwebページ1~6へジャンプ(リンクさせている) (4)画像1~6をクリックするとwebページ1~6へジャンプ(リンクさせている) まず画像を表示させるために一定区間をループ再生するフレームアクションを画像分(=6個)作りました。 各々frame1、2…とフレームラベル名をつけ、 ボタン1~6には on(rollOver){ this. gotoAndPlay("frame1"); } と記述しています。(ボタン1の例) そして1フレーム目に stop(); button1.onRelease = function(){ getURL("リンク先URL", "_self"); } gazou1に on(release){ getURL("リンク先URL", "_self"); } としています。これにより(2)(3)(4)は実現できています。でも(1)のランダムが全然分かりません。 ループ再生のフレームの前に7フレーム追加し、 1は空白キーフレーム 2はgazou1 3はgazou2… と配置し、フレーム1のアクションに stop(); button1.onRelease = function(){ getURL("リンク先URL", "_self"); } a=Math.ceil(Math.random()*6)+this._currentframe; gotoAndStop(a); と書き加えました。すると、画像が何も表示されないのです。IE7やSafariでは更新ボタンを押せばランダムで画像が現れるのですが、更新ボタンを押さなければ表示されませんし、Operaでは一度ボタンにロールオーバーさせなければ表示できません。 ランダム関数がよく分からずにやっているからダメなのだと思いますが、わからなすぎて何を勉強すればいいのかも分かりません。 とにかく時間がないので困っています。 どこが間違っているのかお教えいただけないでしょうか? 長文で申し訳ありません。どうかよろしくお願いします。

    • ベストアンサー
    • Flash
  • 乱数を一定時間毎に表示させたいのですが・・・

    乱数を生成させることは出来たのですが、 それを0.5秒毎に永遠に表示させることが出来ません (50*Math.random())+200 //乱数生成200~250 setIntervalを検索しても複雑すぎて、ちょっといじるとエラーが出てうまくいきません。 よろしくお願いします。

  • Math.random がNaNになる理由

    ループでMath.random() * a[i] こうするとNaNが返ってきます。なぜでしょうか?

  • 乱数とは・・・?

    質問なんですが、配列の中身が、( AA(10) ) AA(1) = "りんご" AA(2) = "ringo" AA(3) = "みかん" AA(4) = "mikan" …10まで日本語→ローマ字の繰り返し という形で、これを乱数でバラバラにして、AA(1)とAA(2)(同様に3と4)を一塊としてlabel 1,2に時間経過で表示したいのですが、 時間経過で表示は出来たのですが、乱数の使い方がよく分からないのでランダムに表示されません。 もしかしたら、1と2をセットとして表示というのは無理なんでしょうか?

  • テキスト内の正誤判定

    [I]+[II]=[SUM] [合否] テキストボックス[I]、[II]、[SUM]、[合否]の4つを配置して、スペースキーを押した際、[I]+[II]の合計が[SUM]と等しい場合には[合否]の中に○を、等しくない場合は×を表示させたいのです。[I]+[II]は、1桁の値をランダムで作り出し、[SUM]の中に数字を打ち込める用にしています。 今までに出来たスクリプトは以下の通りになってます。 なお、[I]=suuzi1,[II]=suuzi2,[SUM]=hyoujiとし,また、KEYCODE =["", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " ", ""];は長いので略しております。 onClipEvent (keyDown) { if (Key.isDown(Key.SPACE)) { _root.suuzi1 = Math.floor(Math.random()*10); _root.suuzi2 = Math.floor(Math.random()*10); _root.hyouji = ""; } } onClipEvent (load) { // キーが押されたとき KEYCODE = new Array(); KEYCODE = ["", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " ", ""]; } onClipEvent (keyDown) { // キーが押されたとき _root.CODE = Key.getCode(); _root.hyouji = _root.hyouji+KEYCODE[_root.CODE]; }

  • ランダムにjpgを外部読み込みし、リンク先を指定したい

    お世話になります。FlashMX2004使用です。 ページを更新するたびにランダムにjpgを外部から読み込んで、 かつjpgごとにリンク先を指定するFlashを作成中です。 リンク先のURL指定はFlashを触らずとも他の人ができるように、HTML上でJavascript指定にしたいのです。 そこまではできたのですが、問題は、 jpgの枚数を常に一定ではなく、時には30枚、時には50枚と変更したいのです。 今のところjpg枚数が決まっていれば以下のようなスクリプトでできています。 最初のフレームに、 ransu = Math.floor(Math.random()*3); if (ransu == 0) { gotoAndPlay("0"); } else if (ransu == 1) { gotoAndPlay("1"); } else if (ransu == 2) { gotoAndPlay("2"); } と指定し、ラベル"0"フレームには、 loadMovie("img/photo00.jpg", _root.loadwindow); として、loadwindowと名づけたMC枠にphoto00.jpgを読み込むようにしています。これでランダムにjpgが読み込まれます。 更にラベルで区切ったフレームごとに透明ボタンMCを置いて、そこにボタンアクションで、 on (release) { getURL ("javascript:wo00()"); } とし、実際のリンク先URLはHTMLファイルにJavascriptで指定するようにしています。 この方法だと、jpg(とリンク先URL)が3つなら3つと決まっていれば問題ないのですが、枚数を増やすごとにスクリプトも変更しなければなりません。 始めに50枚として設定し、jpgが10枚しかないと、11~50を乱数で選んだときには何も読み込まれず真っ白のままになってしまいます。 jpg(とそのリンク先)の数を後から変更できるように、 Flashで最大数を多めに設定するにはどうしたらいいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • Flash lite1.1で

    携帯用のページでボタンを設置しgotoAndPlayでとあるフレームに飛ばしたとき、複数あるMCをランダムで一つだけ表示する方法はないでしょうか?

    • ベストアンサー
    • Flash
  • ActionScript3.0 gotoAndPlay(currentFrame-1)が遅いのは何故?

    フレームを2つ用意し、2フレーム目に gotoAndPlay(currentFrame-1) と書くことで 1フレーム目をループさせる手法についてです。 ActionScript2.0では問題なく使えるのですが ActionScript3.0だと、1フレーム目が実行される速度が2.0の半分になってしまいました。 fpsを1にすると、1フレーム目に書いたtrace文が2秒に1回しか表示されません。 通常のフレーム移動はfps通りの速度が出ています。 gotoAndPlay(currentFrame-1) を gotoAndPlay(1) と書いても同じです。 これは3.0の仕様変更によるものなのでしょうか? 原因のわかる方おられましたら、ご教授お願いします。 WindowsXP(32ビット) FlashCS3

    • ベストアンサー
    • Flash