• ベストアンサー

Math.ramdom()を特定回数繰り返す

noname#35109の回答

noname#35109
noname#35109
回答No.1

いったい何についてのご質問なのかがよくわかりませんよ。 題名は,random関数に関しての質問で,本文はforの質問になっています。 乱数で,その後を変えたい場合は, 乱数が整数の方が,処理しやすいと思います。 これには,Math.random() だけでは不十分で, Math.floor(Math.random()*10) などで,整数化しておく必要があります。 http://www.macromedia.com/jp/support/flash/ts/documents/fl0173.html を参照のこと。 次ですが, >> forを使って特定回数処理を行おうかと思ったんですが、 >> forって一気に処理しますよね? forは一気に処理しますが,forを使っても使わなくても一気に処理します。 たとえば,3回繰り返し。 a = 乱数; もし a が1だったら,Aは「こんにちは」と言う  もしくは a が2だったら,Aは「さようですか」と言う   もしくは a が3だったら,Aは「いやはやなさけない…」と言う    それ以外,Aは「バイバイ」と言う b = 乱数; もし b が1だったら,Bは「こんばんは」と言う  もしくは b が2だったら,Bは「それはびっくり」と言う   もしくは b が3だったら,Bは「どうしよう…」と言う    それ以外,Bは「バイバイ」と言う a = 乱数; もし a が1だったら,Aは「こんにちは」と言う  もしくは a が2だったら,Aは「さようですか」と言う   もしくは a が3だったら,Aは「いやはやなさけない…」と言う    それ以外,Aは「バイバイ」と言う b = 乱数; もし b が1だったら,Bは「こんばんは」と言う  もしくは b が2だったら,Bは「それはびっくり」と言う   もしくは b が3だったら,Bは「どうしよう…」と言う    それ以外,Bは「バイバイ」と言う a = 乱数; もし a が1だったら,Aは「こんにちは」と言う  もしくは a が2だったら,Aは「さようですか」と言う   もしくは a が3だったら,Aは「いやはやなさけない…」と言う    それ以外,Aは「バイバイ」と言う b = 乱数; もし b が1だったら,Bは「こんばんは」と言う  もしくは b が2だったら,Bは「それはびっくり」と言う   もしくは b が3だったら,Bは「どうしよう…」と言う    それ以外,Bは「バイバイ」と言う forを使っていませんが,コレくらいのスクリプトだったら, 0.00001秒? くらいで済んでしまいます。 人間が何かしゃべったところを見る間もなく,会話は終わります。 だから, 問題はforを使うとか使わないではないと思います。 いったいどういうタイミングで会話がさせたいのか, 時間制御か,ボタンクリックか。 それともアニメーションと同期か。 その辺のところをちゃんと考えて,アニメーションをさせないと,できないと思います。 それと,予感ですが… 具体的にどういうときにどういうことがしたいのか考えられたとしても ---例---------------------------- 左右のキャラが交互にランダム選択の言葉を掛け合う。 それを3回おこなった後に、左右のキャラがフェードアウト。 --------------------------------- の部分を説明できる自信は全くありません。 それで良ければ,補足してください。 他の方が答えてくださるかもしれませんし, わかることでしたら,時間はかかるかもしれませんが,答えるつもりはあります。 まったく自信はなしですが。

coder
質問者

補足

ものすごい説明不足で申し訳ございません。 そうですよね、イベントが起こるタイミングとかそういうものを全く説明してませんね。 【ムービー説明】 1.イベントは左右にキャラクターがいるフレームが再生されたら、発生します。 2.会話は左の人が何かしゃべって、それに対して右の人が何かをしゃべる。この時に話す会話の内容はいくつかあるパターンの中からrandom選択です。 3.ひとつの会話のパターンのアニメーションが終わったら続いて、別のパターンの会話のアニメーションを始める。これを3回繰り返した後に、会話を終了し先のフレームに進む。 こんな感じのムービーです。 ランダム選択のやり方や、さらに配列を組んで同じものが選択されないやり方は分かるんです。 ただ、ランダム選択した会話のアニメーションを「3回だけ繰り返す」というやり方が分からなかったんです。 そこで、最初にfor分を使って3回繰り返すのを考えたのですが、forは1Frでの繰り返し処理で、特定の長さを持つアニメーションの繰り返し処理は出来ないですよね? そういった疑問の質問をさせていただきました。 ものすごく説明不足なのに、こんなにどういう情報が必要なのかというのを教えてくださってありがとうございます。

関連するQ&A

  • Math.randomは0にはならない? 0になる

    ・意味が分からないコードがあるので教えてください ■コード for (var i = 0; i < 10; ++i) {  switch ((Math.random() * 4) | 0) {  case 0: hoge(); break;  case 1: …… ■質問 ・これはどういう処理をするコードでしょうか? ・「Math.random … 0 以上1未満」ということは0にはならないのでしょうか? なぜ「 | 0」? ・breakした場合、switchは抜けるけど、for文は継続?

  • integerクラスとMathクラス

    適当な整数numをキーボードから入力し、その回数だけ0から360までの整数をランダムに発生させ、その整数を角度(弧度法)とみなしたとき、その正接(tan)が最大のとなる整数を表示するプログラム を以下の手順で下記に作成した結果、角度が同じ値になります。これはどうしてですか?また、手順通りのプログラムにするにはどのようなプログラムて適切ですか?     手順      (1)最大値となる角度を代入する整数型の変数maxを初期値-90で定義する。      (2)乱数を発生させる回数を入力する。      (3)0から360までの整数を、乱数を使って1つ発生させ、整数型の変数degに保存。この値を表       示する。      (4)角度degをラジアンに変換し、実数型の変数radに代入し、表示する。変換は             rad = deg * Math.PI/180.0 (Math.PIは円周率を表す)       で行なうことができる。ただし、実際のプログラムでは上式をそのまま書くのではなく、変数       の型に注意して記述すること。      (5)radを用いて正接(tan)を計算する。      (6)maxから計算されるtanの値と比較し、(4)の結果の方が大きければmaxをdegに書き換え       る。      (7)(2)から(5)を入力した回数になるまで繰り返す      (8)maxを表示する。import java.io.*; class Kakudo3 { public static void main(String args[]) throws IOException { int max = -90; System.out.println("整数を入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num = Integer.parseInt(str1); int deg =(int)(Math.random()*360); for(int i=0; i<num; i++){ System.out.print(deg+","); } double rad = deg*Math.PI/180.0; Math.tan(rad); } }

    • ベストアンサー
    • Java
  • 再訪時のランダムな背景について

    FLASH初心者です。 いま,FLASH MX 2004 でホームページを作っています。 再訪時に背景をランダムに表示したくてうまくできないので困っています。どなたかご教授ください。 具体的には,レイヤーの一番下段の「背景」のフレームに img = Math.floor(Math.random()*6+1); this.loadMovie(img+".jpg"); と書くと、ランダムに外部JPG画像が変わるのですが、 「背景」のレイヤーの上段にある文字やボタンが表示されません。 画像もゆっくりフェードインするようにアルファ値で変化させたいのですが,それも受け付けてくれません。 どのようにすればいいのでしょうか。

    • ベストアンサー
    • Flash
  • 特定のものにだけスクリプトを有効にする

    今晩は。JavaScript初心者です。 今、雪を降らせるスクリプトを作っています。 外部のjsファイルに記述したスクリプトを、特定のidを付けたdivにだけ有効にしたいです。 -----html------------------------------ <html> <head> <script type="text/javascript" src="js/snow.js"></script> </head> <body> <div id="snow"> </div> </body> </html> -----JavaScript(snow.js)------------------------------ sx = new Array(); sy = new Array(); sp = new Array(); num = 50; scrnx = 100; scrny = 500; function snowWrite() { styl = "<img src='snow.gif' style='position:relative;width:6px;height:6px;z-index:3;top:"; for (i=0; i<num; i++) { sx[i] = Math.floor(Math.random()*100); sy[i] = Math.floor(Math.random()*500); sp[i] = Math.floor(Math.random()*5) + 1; document.write(styl+sy[i]+"px;left:"+sx[i]+"px;' name='snow"+i+"'>"); } } function moveSnow() { for (i=0; i<num; i++) { sy[i] += sp[i]; if (sy[i] > scrny) sy[i] = -10; document.images["snow"+i].style.top = sy[i]; } } snowWrite(); 「document.getElementById」あたりかなと思ったのですが、それだとして(まったく見当違いかもしれませんが)、どこにどう記述してよいのかわかりません。 ご存知の方がいらっしゃいましたら、ご教授いただきたいです。 よろしくお願い致します。

  • Flash 重複しないムービー再生とその後の処理について

    標題の件、似たようなケースは多く、質問もいろいろ寄せられているの ですが、どうしても自分のケースに応用できなくて質問させていただき ました。 バージョンは「Flash MX 2004」で、やりたいことは以下の内容です。 ------------------------------------------- (1)9つのムービークリップを重複しないようにランダムに再生。  (なので正確にはシャッフルになるのでしょうか。。) (2)全てのムービーを再生後、次のフレームへ移動します。 ------------------------------------------- 以上です。 現在、1フレーム目に“Math.random();”を使ってランダムな数を取得 し、2~10フレームまで任意のフレームへ移動するよう設定していま す。2~10フレームまでは各ムービーを1フレームずつ配置している 状態で、それぞれstop();を設定しています。 各ムービークリップの最後のフレームには“_root.gotoAndStop(1);”を 設定して再びランダムな数を取得するようにしていますが、これだと重複 してしまうし、なおかつループし続けます。 「重複せずに全ムービーを再生後、11フレームへ移行する」という処理 がどうしてもわからず、ここから先が行き詰まってしまいました。 Math.random();のメソッド自体が適切でないのかも知れませんが、それら もふまえて、ご伝授いただけますでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • AS2 ランダムに出現する煙

    初めて質問させてもらいます。 FLASHのActionScriptで画面下から画面上へ昇っていく煙をランダムに出現させるASを作成したのですが、動き的には満足しているのですが開始時に画面に一気に煙がですぎになります。 煙のない状態から始めるには何を付け加えればいいのかわかりません。 どなたかご教授願えるかたお願いいたします。 環境 FLASH cs3.AS2にて製作 ソース ・タイムライン ----------------------------------------------- for (var i = 0; i<10; i++) { snow.duplicateMovieClip("snow"+i, i); } ----------------------------------------------- ・mc ----------------------------------------------- onClipEvent (load) { sw = Stage.width; sh = Stage.height; th = this._height; this._x = Math.random()*sw; this._y = Math.random()*sh; speed = Math.random()*4+1; flick = Math.random()*4+1; rotate = Math.random()*1; } onClipEvent (enterFrame) { this._y -= speed; this._x -= flick; this._rotation +=rotate; if (this._y<-869.8) { this._y = 1400; } if (this._x>sw+th || this._x<-th) { this._x = Math.random()*sw; this._y = -th; } } ----------------------------------------------- よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ActionScript3.0について…

    ある課題で下記の条件を満たしたものを制作するというものがありまして、 制作してみたんですが、回答例と異なっていました。 私が制作したものでは、なにか間違っているのか分かりませんので質問させていただきました。よろしくお願いいたします。 ☆☆☆ 条件 ☆☆☆ ★ _mcの移動幅を5~10もしくは-10~-5の範囲になるようにします。 ★ 縦方向、横方向ともにステージの端まで移動したら反転するようにします。 ※ステージ幅は400px、高さは300pxとします。 ※条件ではありませんが、この問題を解くヒントとして、 「移動幅は2分の1の確率で-1を掛ける」と 「2分の1を表す条件式の例としては[ Math.random < 0.5 ]が考えられます。」とあります。 ☆☆☆ 回答例 ☆☆☆ var stepX:int = Math.floor(Math.random() * 6) + 5; var stepY:int = Math.floor(Math.random() * 6) + 5; if (Math.random() < 0.5){ stepX *= -1; } if (Math.random() < 0.5){ stepY *= -1; } _mc.addEventListener(Event.ENTER_FRAME, xEnterFrame); function xEnterFrame(evt) { _mc.x += stepX; _mc.y += stepY; if (_mc.x >= 400 || _mc.x <= 0){ stepX *= -1; } if (_mc.y >= 300 || _mc.y <= 0){ stepY *= -1; } } ☆☆☆ 私が書いたもの ☆☆☆ var stepX:int = Math.floor(Math.random() * 6) + 5; var stepY:int = Math.floor(Math.random() * 6) + 5; _mc.addEventListener(Event.ENTER_FRAME, xEnterFrame); function xEnterFrame(evt) { _mc.x += stepX; _mc.y += stepY; if(_mc.x > 400 || _mc.x < 0){ stepX *= -1; } if(_mc.y > 300 || _mc.y < 0){ stepY *= -1; } } あくまでもヒントでしたので、私が書く際にはヒントを見ずに書きました。

    • ベストアンサー
    • Flash
  • ぐるぐるーぷ。

    作りたい内容ですが、 (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
  • ムービークリップを特定の組み合わせでランダム再生

    Adobe Flash Pro CS6 でAction Script 3を使っています。 今現在複数あるループムービーを特定の組み合わせでランダム再生する方法を考えています。 使用するムービークリップの数は全部で5つです。 mcA,mcB,mcC,mcD,mcEと5つあります。クリップの再生時間はmcDのみが20フレームでほかはすべて10フレームです。これらのムービークリップをある程度のランダム性を持たせて特定の順番で再生したいのです。特定の順番は以下のとおりです。 mcA - mcB mcA - mcB - mcB mcC - mcD - mcE mcC - mcD - mcD - mcE mcC - mcD - mcD - mcD - mcE この四通りの再生方法でムービークリップをランダムで再生し続けたいのです。 それぞれのクリップはループになっているのでmcBからmcA or mcC、mcEからmcA or mcCに繋がってもシームレスに再生し続けられる感じになっています。 どういった方法を用いるのが最善でしょうか? 今現在一つのレイヤーに (mcA - mcB)( mcA - mcB - mcB )(mcC - mcD - mcE)(mcC - mcD - mcD - mcE)(mcC - mcD - mcD - mcD - mcE) と言った感じにすべてのムービークリップを再生する順番に配置して、それぞれの区切りでフレームラベルを用意して、配列にフレームラベルをすべて入れて、その配列とMath.randomを組み合わせてフレームラベルをランダムで選び、再生位置を飛ばして再生し続けていますが、これだとレイヤーの管理がしにくいのでいまいちしっくりきません。

    • ベストアンサー
    • Flash
  • ソート(?)がうまくいかない。

    こんにちは、今おみくじスクリプトを作成しているのですが、うまくいかない点があります。 大吉や吉といったランクごとに、健康運や恋愛運といった6つの部分が◎○△×のどれかにランダムでなるというスクリプトをつくりました、うまく実行はされるのですが、処理が重く、IEで「実行をとめますか?」とエラーが出ています。 何か、おかしな点があれば、教えていただけませんか? for(cnt=0;cnt<w.ura;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "◎"; else{ cnt -=1; } } for(cnt=0;cnt<w.urb;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "○"; else{ cnt -=1; } } for(cnt=0;cnt<w.urc;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "△"; else{ cnt -=1; } } for(cnt=0;cnt<w.urd;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "×"; else{ cnt -=1; } } w.ura等は、ランクごとの◎などの数が格納されたストラクトです。 やっていることは、◎の数まわして、空の配列であれば、◎をいれるといったことです。 よろしくご教授ください。