刽子手实现[重复]
Posted
技术标签:
【中文标题】刽子手实现[重复]【英文标题】:Hangman implementation [duplicate] 【发布时间】:2013-07-18 10:59:30 【问题描述】:情况
我开始在客户端机器上仅使用 javascript 和 html 实现游戏“HANGMAN”。我已经完成了所有合乎逻辑的工作。现在只剩下美学了。我被困住了,因为我们无法在 JS 中写入字符串。
a = "abcd"; a[0] = "e";
-- 这种事情是不允许的。
我做了什么
代码
我试过的代码,这不起作用:
See here
我现在有以下三个数组:
a
-- 包含单词字母的数组(对于gel
,这将是g,e,l
)
gai
-- 该数组由用户输入并存在于单词中的字母组成。(如g
或e
)
ag
-- 该数组由用户输入的字母组成,无论它们是否存在于要猜测的单词中。
我需要做什么
我需要生成显示字母的输出,以防它被用户猜到并且在单词中(数组中的字母gai
)和_
代替尚未出现的字母由用户输入。
我想要什么
将返回所需输出的函数,如下例所述。
示例
设要猜的词是:
together
用户输入e
:
函数应该返回:_ _ _ e _ _ e _
然后用户输入d
,我的程序会提示他说单词中没有这个字母。
用户输入r
函数应该返回:_ _ _ e _ _ e r
等等……
希望你能理解!
如果你不明白(由于我的错误解释或其他原因!!)
你可以在这里玩刽子手游戏:Hangman
只需观看屏幕底部的输出...这就是我希望此函数生成的内容。
请帮我解决这个问题!
【问题讨论】:
你已经描述了你做了什么,但是没有提供代码?在 jsfiddle.net 上重新创建它会有所帮助,或者您必须提供我们重新创建查看问题所需的全部功能所需的所有信息。这包括所有 HTML/CSS/JavaScript 代码。如果您有实时页面,请链接到它。 当然可以写入数组 A=[10,20,30]; A[1]=15;控制台.log(A);产生 [10,15,30] @Paul 你不能写入字符串,但是 @JanDvorak 你可以间接使用split
和join
。
或者用replace新建一个
【参考方案1】:
仅阅读问题的开头(因为没有提供其他代码),有一个问题可以使用本机 javascript 函数解决。
var strarr = "Hello world!".split(''); // this will give you an array of characters to be manipulated
strarr[6] = "X"; // so you can do this
console.dir(strarr.join('')); // test it!
作为一个想法(不是我的,它来自 cmets),甚至可以将这个简单的代码包装为缺少的 toCharArray() 函数并使用它。
另一件事是,即使对于相对大量的文本,这种方法也足够快。对于一个测试,我使用了 lorem ipsum 和 1000 个单词。在我相当旧的开发机器上,操作在几毫秒内执行。
有关详细信息,请参阅this discussion。
【讨论】:
@bukko 我希望可以对 cmets 投反对票。 Bukko 消失了,但他的 Java 风格的想法还不错。可以将这个简单的代码包装为缺少的 toCharArray() 函数并使用它。 @Aadit 不需要恶意,我们都会犯错......【参考方案2】:您也可以使用此函数在字符串的指定索引处设置字符:
function setCharAt(str,index,chr)
if(index > str.length-1) return str;
return str.substr(0,index) + chr + str.substr(index+1);
【讨论】:
【参考方案3】:您可以使用正则表达式来屏蔽单词中的字母 String.replace
。
var word = "together"
, correct = "";
function guess(c)
if (word.indexOf(c) > -1)
correct += c;
console.log(word.replace(new RegExp("[^" + correct + "]", "g"), "_"));
【讨论】:
以上是关于刽子手实现[重复]的主要内容,如果未能解决你的问题,请参考以下文章