如何创建一个随机的计算机选择,除了你已经选择的选择?

时间:2015-03-27 12:19:39

标签: javascript html random

我正在做拳击比赛。用户可以选择三个拳击手。计算机可以在其余两个(您没有选择)之间进行选择。 https://jsfiddle.net/1ehpxto6/  我的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());
}

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

2 个答案:

答案 0 :(得分:0)

实际上你可以通过这样做来做你想做的事:

user_choice = getUserChoice();

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

computer_choice = choices[ Math.round(Math.random()*(choices.length-1)) ];

编辑:看起来这可能更简单了。见上文。

您要找的是置换盒子,除了已经选择的盒子。这是一个函数(使用函数permute):

function permute_except(user_choice, remaining_choices) {
  // find the choice
  var index = remaining_choices.indexOf(user_choice);
  // remove the choice 
  remaining_choices.splice(index,1);
  // return the remaining ones, permuted
  return permute(remaining_choices);
}

一样使用它
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

编辑:

我认为你要找的东西叫做排列。所以下面描述的是,实际上你正在寻找的是不同的,所以见上文。

排列只是一种以某种顺序排列一组事物的方式(可能与你发现它的方式不同)。你想随机排列你的盒子。 permute(希望足够清楚)返回数组的排列choices(如果你没有将参数传递给{{1},则返回数组[0,1,2]的排列}):

permute

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

如果您想获得更多功能,可以实现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; } 的排列,即没有固定点的排列。这也称为derangement

剩下的,取决于你,祝你好运!

答案 1 :(得分:0)

你的问题基本上就像选择彩票球而不将球送回盒子。它被称为Fisher-Yates shuffle(F-Y-Knuth shuffle),它是http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle中描述的O(n)算法