我正在构建游戏,我已经完成了这个:
var names=["Adam Black", "Brad White"];
var namePicked = var namePicked = names[Math.floor(Math.random() * names.length)]; //pick a random name
var nameArray = namePicked.split(""); //turn name string into array of letters
var nameHidden = [];
window.onload = function() {
//replace each of the letters with underscore and space with dash
for (var i = 0; i < nameArray.length; i++) {
if (nameArray[i] == " ") {
nameHidden += "- ";
}
else {
nameHidden += "_ ";
}
}
document.getElementById("nameDisplay").innerHTML = nameHidden;
}
//get key pressed by user
document.onkeypress = function(evt) {
evt = evt || window.event;
var charCode = evt.keyCode || evt.which;
var charStr = String.fromCharCode(charCode);
nameArray = nameArray.map(function(x) {return x.toLowerCase()}); //lowercase all letters so uppercase letters get caught when key pressed
// check letter entered with letters of names
for (var i = 0; i < nameArray.length; i++) {
if (charStr == nameArray[i]) {
}
}
}
我被困在这里。如何将值切换/替换回字母?
例如:“Adam Black”将转换为4个下划线1个破折号和5个下划线,当用户按下键a时,两个字母a都将显示: A _ a _ - _ _ _ _
按下右键时,我无法将nameHidden[i]
更改回nameArray[i]
。我可以通过console.log获取键的值。
我试过循环,新变种,布尔......
另外,如何确定一个键被预先设定(即“a”),用户可以再次按下它但没有任何反应?
答案 0 :(得分:3)
你并不是那么遥远,但是将更新HTML的部分变成一个函数会更容易,只需用给定的字符调用该函数,比如
var names = ["Adam Black", "Brad White"];
var namePicked = names[Math.floor(Math.random() * names.length)]; //pick a random name
var nameArray = namePicked.split(""); //turn name string into array of letters
var updated = []; // keep track of values that are already updated
function display(char) {
//replace each of the letters with underscore and space with dash
char = char || '_'; // set to default when no char given
var nameHidden = [];
for (var i = 0; i < nameArray.length; i++) {
if (updated[i] || (char.toLowerCase() === nameArray[i].toLowerCase())) {
nameHidden += nameArray[i];
updated[i] = true;
} else if (nameArray[i] == " ") {
nameHidden += "- ";
} else {
nameHidden += "_ ";
}
}
document.getElementById("nameDisplay").innerHTML = nameHidden;
}
//get key pressed by user
document.addEventListener('keypress', function(evt) {
evt = evt || window.event;
var charCode = evt.keyCode || evt.which;
var charStr = String.fromCharCode(charCode);
display(charStr); // call when typing
});
display(); // call onload
<div id="nameDisplay"></div>
<br /><br /><br />
<p>Focus here, and hit keys !</p>
答案 1 :(得分:1)
另一种方法是定义一个函数,将常规名称转换为隐藏名称(带下划线和短划线),知道已在数组中按下的字符。
function convertToHidden(name, charsPressed) {
var hiddenName = "";
// iterate over each character in the |name| string
for (var n=0; n<name.length; n++) {
var currCharInName = name[n];
// now check if that character has been pressed
var hasBeenPressed = false;
for (var p=0; p<charsPressed.length; p++) {
if (charsPressed[p] == currCharInName) hasBeenPressed = true;
}
if (hasBeenPressed) hiddenName += currCharInName;
else hiddenName += "_";
hiddenName += " ";
}
return hiddenName;
}
然后你可以在按键功能中使用它,如下所示:
var charsPressed = [];
document.onkeypress = function(evt) {
evt = evt || window.event;
var charCode = evt.keyCode || evt.which;
var charStr = String.fromCharCode(charCode);
if (! charsPressed.includes(charStr)) charsPressed.push(charStr);
var nameHidden = convertToHidden(namePicked, charsPressed);
// display |nameHidden|
}