Saya sedang membangun game dan saya telah melakukan ini:

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]) {
        }
    }
}

Dan aku terjebak di sini. Bagaimana cara mengganti/mengganti nilai kembali ke huruf?

Misalnya: "Adam Black" akan diubah menjadi 4 garis bawah 1 garis bawah dan 5 garis bawah, dan ketika pengguna menekan tombol a, kedua huruf a akan muncul: A _ a _ - _ _ _ _

Saya tidak dapat mengubah nameHidden[i] kembali ke nameArray[i] saat tombol kanan ditekan. Saya bisa mendapatkan nilai dari tombol yang ditekan dengan console.log.

Saya sudah mencoba loop, var baru, boolean...

Juga, bagaimana saya bisa memastikan ketika tombol ditekan (yaitu "a"), pengguna dapat menekannya lagi tetapi tidak ada yang terjadi?

2
Viet 16 Agustus 2017, 22:38

2 jawaban

Jawaban Terbaik

Anda tidak terlalu jauh, tetapi akan lebih mudah untuk membuat bagian yang memperbarui HTML menjadi suatu fungsi, dan panggil saja fungsi itu dengan karakter yang diberikan, seperti

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>
3
adeneo 16 Agustus 2017, 19:56

Pendekatan lain adalah mendefinisikan fungsi yang mengubah nama biasa menjadi nama tersembunyi (dengan garis bawah dan tanda hubung), mengetahui karakter yang telah ditekan dalam array.

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;
}

Kemudian Anda dapat menggunakan ini dalam fungsi penekanan tombol seperti:

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|
}
1
clabe45 16 Agustus 2017, 20:25