- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ActionScript3で乱数を取得しなおかつ隣とかぶらない)
ActionScript3で乱数を取得しなおかつ隣とかぶらない
このQ&Aのポイント
- ActionScript3で乱数を取得しなおかつ隣とかぶらないソースのコーディング方法を教えてください。
- 2つのテキストエリアとボタンがあり、ボタン1を押すとテキスト1に1~10の数字がランダムに表示されます。同様にボタン2を押すとテキスト2に表示されますが、テキスト2の数字はテキスト1の数字と重複せず、かつ前回と同じ数字が出ないようにしたいです。
- 良い方法があれば教えてください。制作環境はActionScript3とFlash CS4です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
回答No.1
お礼
これ1週間近く悩んだんですよね... ありがとうございます、これで100%かぶらない乱数の取得の仕方がわかりました。 ↓この辺の処理の仕方がとても参考になりました。 //今のデータ2を過去のデータ2に代入 past2 = now2; //臨時の配列を初期化 tmpArr = new Array(); //臨時の配列の要素0~9に 1~10 の数を代入 for (var i:int=0; i<=9; i++) { tmpArr[i] = i + 1; } //臨時の配列のpast2要素を抜きとる tmpArr.splice(past2-1,1); //臨時の配列のnow1要素を抜きとる for (i=0; i<=tmpArr.length-1; i++) { if (tmpArr[i] == now1) { tmpArr.splice(i,1); } } でこの処理を一つの関数にすればソースすっきりできるのではないかと思い以下のようにしてみましたが変数の値が保存されません。やはり関数に変数の値を渡す場合値が保存されないのでようか? function btnClickAction(aaa:int,bbb:int,ccc:int,txt:TextField,ddd:int):void { var past:int=aaa; var now:int=bbb; var nowPartner:int=ccc; var txtArea:TextField=txt; var max:int=ddd; past=now; //臨時の配列を初期化 var tmpArr:Array=new Array ; //臨時の配列の要素0~9に数を代入 for (var i:int=0; i<=max-1; i++) { tmpArr[i]=i+1; } //臨時の配列のpast要素を抜きとる tmpArr.splice(past-1,1); //臨時の配列のpartPartner要素を抜きとる for (i=0; i<=tmpArr.length-1; i++) { if (tmpArr[i]==nowPartner) { tmpArr.splice(i,1); } } //今のデータを作成 var rnd:int=Math.floor(Math.random()*tmpArr.length); now=tmpArr[rnd]; //今のデータを表示 txtArea.text=String(now); } にして btn1.addEventListener(MouseEvent.CLICK, btn1Click); function btn1Click(evt:MouseEvent):void { btnClickAction(past1,now1,now2,txt1,10); } とするとpast1,now1,now2の値が保存されないのです?なぜでしょうか?