2017-12-29 14 views
0
a = 3; 
b = 3; 
c = 3; 
turnCount = 1; 
function decrease(x, y) //x represents a, b, c while y subtracts 1, 2, or 3// 
    //stuff I figured out// 

私は3ターンのゲームのためにAIを作成しようとしています。 TurnCount 1と2はコンピュータ、3はプレイヤーの回転です。コンピュータの順番では、常に最も高い値を持つ変数から1を引きます。各変数から1、2、または3を引く9つのボタンがあります。変数の値よりも多くを引くボタンは無効になります。さて、私の問題は、値が大きい変数が2つ以上ある場合、どの変数を減算するかをランダム化したいということです。条件を満たす変化する変数をランダムに選択するにはどうすればよいですか?

function theAI() 
{ 
    highestValue = Math.max(a, b, c); 
    theArray = ["", a, b, c]; 
    varToDecrease = theArray.indexOf(highestValue); 
    decrease(varToDecrease, 1); 
} 

使用されることはありませんしかし、このアプローチは常に、aとb等しい2になりますので、ボタンの変数から3を引くために:私のアプローチはこれでした。誰も3つの変数すべてを処理するために3つのボタンを減算するように、highestValue変数を減算する方法を考えるのを助けてください。

+0

Math.random()を使用できますか? –

+0

javascriptを使用してすべてのインスタンスを見つけることができます。例:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOfインデックスの – nycynik

答えて

1

まず、最大値のすべてのインデックスを見つけてから、math randomを使って配列から要素を選択します。

function theAI() 
{ 
    highestValue = Math.max(a, b, c); 
    theArray = ["", a, b, c]; 
    var idx = array.indexOf(element); 
    while (idx != -1) { 
     indices.push(idx); 
     idx = array.indexOf(element, idx + 1); 
    } 
    varToDecrease = indices[Math.floor(indices.length * Math.random())]; 
    decrease(varToDecrease, 1); 
} 

ここでwhileループを使用して、配列内の最高値の各インスタンスを検索しています。 (実際にdo-while構文に近いです)

最初に、idxを配列の最も高い要素の最初の位置に設定しました。私はMath.maxでmax要素を見つけたので、これが見つからない可能性はありません。したがって、indexOfで何かが見つかった場合、それはインデックスを返し、見つからない場合は-1を返します。

whileループに入り、最も高い要素の現在の位置を配列に追加し、idxを最も高い要素の次のインデックスに設定します。配列に見つかったintが1つしかない場合は-1を返し、whileループは終了します。しかし、idxが-1でない場合は、配列の別の最大要素intが存在することを意味します。したがって、whileループは再びループします。

+0

私はあなたのコードを理解すると思いますが、あなたはwhileの部分を説明できますか? – idontknowanygoodusernames

+0

絶対に!更新しました。 – nycynik

関連する問題