2017-12-29 2 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 턴이있는 게임용 인공 지능을 만들려고합니다. TurnCount 1과 2는 컴퓨터이고 3는 플레이어 턴입니다. 컴퓨터 턴에서는 항상 가장 높은 값을 가진 변수에서 1을 뺍니다. 각 변수에서 1, 2 또는 3을 뺀 9 개의 버튼이 있습니다. 변수의 값보다 뺄 것 인 버튼은 사용할 수 없습니다. 자, 내 문제는 내가 가장 높은 값을 가진 변수가 하나 이상있는 경우 어떤 변수를 뺀 것을 무작위로 지정하고자하는 것입니다.조건을 만족하는 변수를 무작위로 선택하는 방법은 무엇입니까?

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

사용되지 않습니다 그러나이 방법은 항상, a와 b와 동일한 2 것 때문에 버튼 변수 3을 뺄 : 내 접근이이었다. 아무도 어떤 highestValue 변수를 빼서 임의 화하는 방법을 생각해 볼 수 있습니까? 그래서 3 개의 버튼을 뺄 때 3 개의 변수 모두를 사용할 수 있습니까?

+0

Math.random()을 사용할 수 있습니까? –

+0

자바 스크립트를 사용하여 모든 인스턴스를 찾을 수 있습니다 (예 : 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

관련 문제