用于显示编码单词的简单刽子手游戏的逻辑

时间:2013-10-31 14:21:37

标签: javascript

我正在用数据库构建一个刽子手游戏。我的目标是将所有猜到的字母存储在我的字段中,如“aesdfr”。单个字符串,没什么了不起的。

然后我将这些字母分成一系列猜测的字母。

考虑到这一点,如果我有以下

var word = "frog";
var stored_guesses = "frsd"; // hard coded for now
var guessed_letters = stored_guesses.split("");

我如何浏览猜测的字母,并在屏幕上显示“_”,表示他们没有猜到的每个字母,并为他们所做的字母显示正确的字母?

我在考虑在stored_guesses中循环每个字母,并为每个不存在的字母替换原始单词。但我很困惑。

我确信我甚至可以这样做。有没有更好的方法来存储猜测的字母并显示编码的单词?

2 个答案:

答案 0 :(得分:3)

您甚至不需要打扰数组,您可以使用简单的字符串替换(使用包含猜测字母的否定字符类的全局正则表达式)来执行此操作:

var word = "Long word incoming";
var guessed = " aongc";

var regexp = new RegExp('[^' + guessed + ']','g');
var display = word.replace(regexp, '_');

console.log(display);

DEMO:http://jsbin.com/UxixOdA/1/edit

PS:如果你想在猜测的字符串中允许特殊符号(字母除外),你可能需要在创建正则表达式时将它们转义,否则你会有惊喜:

// Guesses: a, -, z
var guessed = " a-z"
var regexp = /[^ a-z]/g // matches anything except lowercase letters

答案 1 :(得分:2)

ES5单行:

word.split("").map( function(l) { return stored_guesses.indexOf(l) !== -1 ? l : "_" } ) .join("")

如果您需要较旧的浏览器支持,可以使用标准for循环来完成:

var w = word.split("");
var display = "";
for (var i = 0; i< w.length; i++) {
    display += stored_guesses.indexOf(w[i]) !== -1 ? w[i]  : "_";
}
console.log(display);