我正在尝试学习 JavaScript,因此我正在做这个项目来练习。我试图弄清楚这些物体和所有东西是如何工作的。基本上我想要的是一个人的列表,作为对象,并为每个人分配了某些属性。然后它会问一堆问题,直到猜出你正在想的人。我四处搜寻,但无法真正找到具体如何做到这一点。这是我到目前为止所拥有的:
function person(name,age,eyecolor,gender,eyeglasses)
{
this.name=name;
this.age=age;
this.eyecolor=eyecolor;
this.gender=gender;
this.eyeglasses=eyeglasses;
}
var Dad=new person("Dad",45,"blue","male",true);
var Mom=new person("Mom",48,"blue","female",false);
var Brother=new person("Brother",16,"blue","male",false);
var Sister=new person("Sister",15,"green","female",false);
function askQuestion (){
}
function begin(){
askQuestion();
}
现在我想要的是一种方法,我可以在 askQuestion
函数中,根据我们迄今为止对该人的了解从列表中选择一个问题。然后重新计算可能是谁,然后选择另一个问题来问,直到我们知道是谁。希望我已经说清楚了。我该怎么做呢?
最佳答案
这有点像游戏“Guess Who?”不是吗?好吧,这就是你要做的:
首先,您为一个人创建一个构造函数。你说得对。
function Person(name, age, eyecolor, gender, eyeglasses) {
this.name = name;
this.age = age;
this.eyecolor = eyecolor;
this.gender = gender;
this.eyeglasses = eyeglasses;
}
然后您创建可能的人员列表。列表意味着数组。
var people = [
new Person("Dad", 45, "blue", "male", true),
new Person("Mom", 48, "blue", "female", false),
new Person("Brother", 16, "blue", "male", false),
new Person("Sister", 15, "green", "female", false)
];
然后你不断地问问题来猜测这个人是谁。不断询问意味着使用循环。我们将继续循环,直到列表中只剩下一个人(我们正在寻找的人):
while (people.length > 1) askQuestion();
接下来我们定义askQuestion
函数。首先我们需要选择要问什么问题。所以我们列出了一个问题 list 。这又是一个数组。我们还将存储要测试的属性以及 true
和 false
条件的结果。
var questions = [
["eyecolor", "blue", "green", "Does the person have blue eyes?"],
["gender", "male", "female", "Is the person a male?"],
["eyeglasses", true, false, "Does the person wear eyeglasses?"]
];
您只需知道这三个问题即可确定此人是谁。接下来我们记录当前正在询问哪个问题(0、1 或 2)。
var question_no = 0;
最后我们提出问题来确定此人是谁:
function askQuestion() {
var question = questions[question_no++];
var answer = confirm(question[3]) ? question[1] : question[2];
var predicate = question[0];
people = people.filter(function (person) {
return person[predicate] === answer;
});
}
在这里,我们向用户提出一个问题,确定他选择的答案,并使用该信息来过滤与给定描述相匹配的人员。最后我们得到一个人:
alert("The person you're thinking about is " + people[0].name + ".");
请在此处查看工作演示:http://jsfiddle.net/9g6XU/
关于javascript - 使用 JavaScript 对象的猜人程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134110/