2012-01-17 23 views
1

私は現在、3つの数字を生成する乱数ジェネレータスクリプトに取り組んでいます。最初の2つの数字は、行と列を参照して「表」内の「セル」を選択するために使用されます。各セルには2つの番号があります。 3番目の番号は、2つの番号のどちらを選択するかを決定します。私はこれのほとんどを把握していますが、私は最後の部分で問題を抱えています。ネストされた配列からのJavascript印刷

マイ「溶液」20個の配列を作成することであり、各アレイ内の20の以上のアレイです。ここで第一の配列の例である:

スクリプトの最初の2つの数字を生成するために:私は、次ているヘッダで

var randOne20 = Math.floor(Math.random()*20); 
var randTwo20 = Math.floor(Math.random()*20); 

をここで20個の配列の最初の行です。

var lvl1Roll1 = [[ 1,0 ],[ 1,1 ],[ 1,2 ],[ 1,3 ],[ 1,4 ],[ 1,5 ],[ 1,6 ],[ 1,7 ],[ 1,8 ],[ 1,9 ],[ 1,10 ],[ 1,11 ],[ 1,12 ],[ 1,13 ],[ 1,14 ],[ 1,15 ],[ 1,16 ],[ 1,17 ],[ 1,18 ],[ 1,19 ]]; 

第二行は「lvl1Roll2」であろうと三等「lvl1Roll3」までのすべての方法であろう「lvl1Roll20。」

var randOne = randOne20 + 1; 

document.write(window['lvl1Roll'+randOne][randTwo20]); 

randOne変数が適切な行を選択するために使用される:私は次のスクリプトを有する本体で

Iは、(randTwo20変数を使用して)特定のセルを選択する方法を見つけ出すことができるが、私は、各セル内の第一又は第二の数を選択する方法は考えています。今

、ちょうど明確にする瞬間に、私はちょうど、各セル内の数第一または第二のいずれかを選択する方法を把握しようとしていますので、私は第三乱数生成コードをリストされていません。一度それを理解すると、if/elseステートメントを使うことができます。また

、私は番号をプリントアウトが、私はそれをどのように行うだろう変数として、それを選択したくなかった場合は?

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

....

CIAO、 ジョンの世話をし、素晴らしい一日持っています。

+0

さらに、別のブラケット付きインデックスを式に追加するのはどうでしょうか? – Pointy

答えて

2

:-)私は本当にあなたが何をしようとしてわからないんだけど、...配列の2番目の要素の最初を取得するようなので、arr[0]arr[1]のように簡単です:

// First: 
document.write(window['lvl1Roll'+randOne][randTwo20][0]); 

// Second: 
document.write(window['lvl1Roll'+randOne][randTwo20][1]); 

は、以前のようにただ従って、同じパターンをランダム化するが、代わりにMath.floorMath.roundを使用してによって増殖しないために20:

var randOne20 = Math.floor(Math.random()*20); 
var randTwo20 = Math.floor(Math.random()*20); 
var randOne = Math.round(Math.random()); 

document.write(window['lvl1Roll'+randOne20][randTwo20][randOne]); 

別の変数を別の行に配置する必要はありません。あなたはそれ一つの大きな配列することができます:

var lvl1Roll = [ 
    [ 
     [ 1,0 ], [ 1,1 ], [ 1,2 ], [ 1,3 ], [ 1,4 ], [ 1,5 ], [ 1,6 ], [ 1,7 ], [ 1,8 ], [ 1,9 ], [ 1,10 ], [ 1,11 ], [ 1,12 ], [ 1,13 ], [ 1,14 ], [ 1,15 ], [ 1,16 ], [ 1,17 ], [ 1,18 ], [ 1,19 ] 
    ], 
    // [ lvl1Roll2 ], 
    // [ lvl1Roll3 ], etc. 
]; 

や使用後、テーブルから値を選択して、変数resultにそれを置くためにこれを使用する:

var result = lvl1Roll[randOne20][randTwo20][randOne]; 

そして最後に:私はと思われます、私はあなたに "ロール"の背後にある論理を教えてくれました。あなたがこの "テーブル"をまったく必要としないことはかなり妥当です。私は間違っているかもしれませんが、それについて別の質問を投稿する価値があるかもしれませんか?ちょっとした考え。

+0

皆さんにお返事ありがとうございます。 PPvG、arr [0]/arr [1]は私が探していたものです。私はそれを試したと思って、私が探していた結果を得られなかったので、私は大規模な脳のおならを持っていたに違いありません。私はちょうどそれを試して、それは正常に働いた。ありがとう! ランダム関数に関して、私は1と20の間の乱数を生成していると言いました。 – Mock26

+1

(おそらく '[1]'と '[2]'を試しましたか? 。1 + Math.floor(Math.random()* 20) 'あなたが必要とするものを正確に実行しませんか? 1から20の範囲の乱数を生成します。 – PPvG

0

あなたは、2個の数字(0を仮定し、1)の間のランダムな選択をしたい場合:

var i = Math.random() < 0.5? 0 : 1; 

または

var i = Math.random()*2 | 0; 

は、仕事をする必要があります。だから、:あなたは

document.write(window['lvl1Roll'+randOne][randTwo20][i]); 

または

document.write(window['lvl1Roll'+randOne][randTwo20][Math.random() < 0.5? 0 : 1]); 

または

document.write(window['lvl1Roll'+randOne][randTwo20][Math.random()*2 | 0); 

は何をしたいですか?

+0

または単に 'Math.round(Math.random())' – PPvG

0

私が正しく理解したら、これを行う最も簡単な方法は、複数の配列を含む1つの配列を使用することだと思います。最初の配列はtable配列で、配列の各エントリはrowrowの各エントリはcellとなります。これは、テーブル内の任意のセルを参照するのが本当に簡単になります。ここでは3×3の例である:

var table = [ 
    [0,1,2], 
    [3,4,5], 
    [6,7,8], 
]; 

table[0][0]; // First Row, First Column, Equals 0; 
table[1][1]; // Second Row, Second Column, Equals 4; 
table[2][2]; // Third Row, Third Column, Equals 8; 

あなたがしたい場合は、実際にテーブルを作成するために、アレイにあなたの20個の配列をプッシュすることができます:

var table = []; 
table.push(randOne20); 
table.push(randTwo20); 
etc... 

を使用すると、自動的にランダムに配列をロードする場合あなたは簡単にループでそれを行うことができます。

var table = []; 
for (var i = 0; i < 20; i++){ // Create 20 rows 
    var row = []; 
    for (var x=0; i<20; i++){ // Create 20 cells; 
     var cell = [Math.round(Math.random), Math.round(Math.random)]; // Adds a two item array of random 0's or 1's 
     row.push(cell); // Adds the cell to the row 
    } 
    table.push(row); // Adds the row to table 
} 
関連する問題