Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建随机的计算机选项,除了您已经选择的选项之外?_Javascript_Html_Random - Fatal编程技术网

Javascript 如何创建随机的计算机选项,除了您已经选择的选项之外?

Javascript 如何创建随机的计算机选项,除了您已经选择的选项之外?,javascript,html,random,Javascript,Html,Random,我正在做一场拳击比赛。用户可以选择三个拳击手。计算机可以在其余两个您没有选择的选项中进行选择。 我的HTML是 <p id="printNames0"></p> <div id="jouwbokser"> <h1>Kies Jouw Bokser!</h1> <img id="bokser1" onClick="gevecht1()" src="img/bokser1.png" alt="bokserlinks" /&

我正在做一场拳击比赛。用户可以选择三个拳击手。计算机可以在其余两个您没有选择的选项中进行选择。 我的HTML是

<p id="printNames0"></p>

<div id="jouwbokser">
<h1>Kies Jouw Bokser!</h1>
<img id="bokser1" onClick="gevecht1()"  src="img/bokser1.png"     alt="bokserlinks" />
<img id="bokser2" onClick="gevecht2()"  src="img/bokser2.png" alt="boksermidden" />
<img id="bokser3" onClick="gevecht3()"  src="img/bokser3.png" alt="bokserrechts" />

</div>
我的javascript是:

var bokser = ['bokser1', 'bokser2', 'boker3' ];
var userChoice;
var comChoice;



//functie die laat zien welke bokser je hebt gekozen.
function greet(){
return ("Je hebt" + userChoice.toLowerCase() + "gekozen");
}

//functie die tekst showt in html
function printToPage(test){
var content = document.getElementsByTagName('body')[0];
content.innerHTML = ("<p>" + test + "</p>" + content.innerHTML);

}


//bokser object
var bokser1 = {
hitpoints: 100,
attack1: 2,
attack2:5,
attack3:8,
attack4:12
};

var bokser2 = {
hitpoints:100,
attack1:2,
attack2:5,
attack3:8,
attack4:12
};

var bokser3 = {
hitpoints:100,
attack1:2,
attack2:5,
attack3:8,
attack4:12
    };



//kies bokser
//andere boksers worden display none als bokser gekozen is
//kies bokser1
function gevecht1(){
document.getElementById("bokser2").style.display = "none";
document.getElementById("bokser3").style.display = "none";
userChoice = bokser[0];
printToPage(greet());
}

//kies bokser2
function gevecht2(){
document.getElementById("bokser1").style.display = "none";
document.getElementById("bokser3").style.display = "none";
userChoice = bokser[1];
printToPage(greet());
}

//kies bokser3
function gevecht3(){
document.getElementById("bokser1").style.display = "none";
document.getElementById("bokser2").style.display = "none";
userChoice = bokser[2];
printToPage(greet());
}

除了您以前选择的计算机选项之外,有人知道如何创建计算机随机选项吗。

实际上,您只需执行以下操作即可:

user_choice = getUserChoice();

choices.splice(choices.indexOf(user_choice),1);

computer_choice = choices[ Math.round(Math.random()*(choices.length-1)) ];
编辑:看起来这可能更简单。见上文

你要找的是排列盒子,除了那些已经被选中的盒子。下面是一个使用以下函数排列的函数:

像这样使用它

user_choice = getUserChoice(); // somehow

possible_choices = permute(user_choice, possible_choices);
var computer_choice_i_1 = possible_choices.pop();

user_choice = getUserChoice(); // somehow

possible_choices = permute_except(user_choice, possible_choices);
var computer_choice_i_2 = possible_choices.pop(); 

// ... etc
编辑:

我以为你要找的东西叫做排列。下面的内容描述了,实际上你所寻找的是不同的,请看上面

排列只是一种将一组事物按某种顺序排列的方式,可能与你发现它的方式不同。您希望对方框进行随机排列。 如果未将参数传递给排列,则排列希望足够清晰,返回数组、选项或数组[0,1,2]的排列:

或者,您可以实现一种不同类型的置换函数,如中的算法,它只是在数组中随机选择的索引对上交换值

如果你想获得更多的功能,你可以实现一个非固定的排列,也就是说,没有固定的点。这也被称为a


剩下的就看你了,祝你好运

你的问题基本上就像选择彩票球而不把球放回盒子一样。它被称为Fisher-Yates shuffle F-Y-Knuth shuffle,它使用的是

中描述的算法,就像一把石头纸剪刀。那么,是否可以使用if/else语句来实现呢?唯一不同的是石头、纸、剪刀,comChoice可以在剩下的两种之间进行选择。你可以试试看!
user_choice = getUserChoice(); // somehow

possible_choices = permute(user_choice, possible_choices);
var computer_choice_i_1 = possible_choices.pop();

user_choice = getUserChoice(); // somehow

possible_choices = permute_except(user_choice, possible_choices);
var computer_choice_i_2 = possible_choices.pop(); 

// ... etc
function permute(choices) { 
   choices = choices || [0,1,2];
    var random_choices = [];
    while(choices.length > 0) {
      var choice_index = Math.round(Math.random()*(choices.length-1));
      random_choices.push(choices[choice_index]); 
      choices.splice(choice_index,1);
    }
    return random_choices;
}