javascript刽子手,猜单词时出现问题 嗨,我正在做一个关于hangman的项目,使用纯javascript,我是一个初学者。我正在寻找一个刽子手游戏,目前我有问题,当我猜单词时,当用户猜字母表时。它必须按顺序进行,例如单词猜测是“猫”,游戏目前这样做,用户必须猜测“c”作为第一个猜测,然后猜测“a”作为第二个猜测,然后猜测“t”作为第三个猜测

javascript刽子手,猜单词时出现问题 嗨,我正在做一个关于hangman的项目,使用纯javascript,我是一个初学者。我正在寻找一个刽子手游戏,目前我有问题,当我猜单词时,当用户猜字母表时。它必须按顺序进行,例如单词猜测是“猫”,游戏目前这样做,用户必须猜测“c”作为第一个猜测,然后猜测“a”作为第二个猜测,然后猜测“t”作为第三个猜测,javascript,Javascript,我想让它,以便用户可以猜测任何字母表,而不是它的顺序。这些单词来自csv文件 var readline = require("readline-sync"); class Word { constructor(word, definition){ this.word = word this.definition = definition } } class WordCollection { constructor(

我想让它,以便用户可以猜测任何字母表,而不是它的顺序。这些单词来自csv文件


var readline = require("readline-sync");

class Word {
    constructor(word, definition){
        this.word = word
        this.definition = definition
    }
}

class WordCollection {
    constructor(pool, words){
        this.pool = [];
        this.readFile();
    }
    readFile() {
        const filePath = 'C:/FoP';
        const filename = filePath + '/input.csv';
        const fs = require('fs');



        try {
            const text =fs.readFileSync(filename, "UTF-8");

            const textByLine = text.split('\r\n');
            var wordline;

            for (var i = 0 ; (i < textByLine.length) ; i++) {
                wordline = textByLine[i].split(',');
                this.pool.push(new Word(wordline[0],wordline[1]));
            }
        } catch(err) {;
            console.log('file ' + " " + filename + " " + 'not found. Program terminated');
            process.exit();
        }        
    }
}
console.clear();

 
var numofwrong = 0;
var lettersremain;
var totallife = 9;
var lifelost = 0;
var answerArray=[];
var guess;


console.log("\n" + "-= Welcome to HangMan =-")
var namein = readline.question("\n" + "Please Enter Your Name :")

//Grab a random word from the array of words
var game = new WordCollection();
var wordrandom = game.pool[Math.floor(Math.random() * game.pool.length)];
var lastchosenword = wordrandom.word;
//console.log(wordrandom);

//Change letters into lowercase 
 var outputchosenword = wordrandom.word.toLowerCase();
 console.log(outputchosenword)
 
// Convert the word to " _ "
var outputunderlineword = new Array(outputchosenword.length);
var checkoutputunderline = new Array();
for (i = 0; i < outputunderlineword.length; i++) {
    outputunderlineword[i] = "_";
} console.log(outputunderlineword.join(" "))

//Display the Alphabets
var Alphabet = ['\nA', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
        'I', 'J', 'K', 'L', 'M','\nN', 'O', 'P', 'Q', 'R', 'S',
        'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
console.log(Alphabet.join(' '))


 
var correctans=[];
for (var i = 0; i < outputunderlineword.length; i++) {
    Enter = readline.question(namein + "'s guess (Enter 9 for lifelines or 0 to pass): ")
    if (Enter == outputchosenword[i] || Enter.match(/[^a-zA-Z]/g)) {
        console.log("Good Job! " + Enter + " is one of the letters")
        correctans.push(Enter)
        console.log(correctans)
    } 
    else if (Enter !== outputchosenword[i] ) {
        console.log("Sorry. " + Enter + " is not a part of the word.")
    }
}
  • 当字母表按顺序排列时输出
  • 以这种方式尝试,但显示错误
  • 在尝试了这些建议之后:)这是我所能做的,我不确定我应该在这之后做什么。有点卡住了:\

  • while(lifelost您对用户输入字母的调用在单词的字母循环中,您需要将其分离出来。在伪代码中

    while user has not correctly guessed word or run out of lives
       get user guess
       if users guess matches any letter in the word
            do something
       else
            do something else
    
    如果无法(轻松地)测试此代码,您可能需要以下内容

    var correctans=[];
    var lifelost = 0
    var totalLife = 9;
    var isEntireWordFound = false; // set this to true somewhere!!
    
    while (lifelost <= totallife && !isEntireWordFound) {
        var enter = readline.question(namein + "'s guess (Enter 9 for lifelines or 0 to pass): ")
        if (outputchosenword.includes(enter)) { 
            console.log("Good Job! " + enter + " is one of the letters");
            correctans.push(enter);
            console.log(correctans);
        } else {
            console.log("Sorry. " + enter + " is not a part of the word.");
            lifelost++;
        }
    } 
    

    您正在数组(由
    \uu
    字符组成)上循环。这里应该是允许用户猜测单词的循环数。在循环内,您检查每一轮的字母位置是否与输入匹配。您可以在此处编写:
    if(outputchosenword.includes(Enter)| |…)
    请记住,这只是一个快速解决方案,但可能不是您想要做的。我明白了,非常感谢!目前,这导致了一个问题,即在猜测一个单词时,该单词只允许x个猜测次数=该单词的长度,例如“狮子”(4个字母)因此,即使输入错误的字母表或正确的字母表,也只允许4次尝试猜测单词,我想让它猜测,直到所有4个字母都猜对为止。我想@Jamiec的答案让你走上了正确的轨道,所以我希望现在就解决了。祝你编码愉快!嗨,谢谢你的帮助!我可以问一下读线如何吗元素方法会怎么样?我已经更新了上面的代码,但是我得到了一个error@Nexus我会尝试用更好的代码更新答案,更符合您的情况-但对我来说测试更难,因为我不确定不着急!再次非常感谢!是的,这真的很有帮助!非常感谢much@Nexus在标记t后进行了一些调整他的回答你可能错过了
    var correctans=[];
    while (outputchosenword[i] !== Enter || (lifelost = 9)) {
        Enter = readline.question(namein + "'s guess (Enter 9 for lifelines or 0 to pass): ")
        if ((outputchosenword.includes(Enter) || Enter.match(/[^a-zA-Z]/g))) { 
            console.log("Good Job! " + Enter + " is one of the letters")
            correctans.push(Enter)
            console.log(correctans)
        } else {
            console.log("Sorry. " + Enter + " is not a part of the word.")
        }
    } 
    
    while (outputchosenword[i] !== Enter || (lifelost = 9)) {
                                   ^
    
    ReferenceError: Enter is not defined
    
    while (lifelost <= totallife && !isEntireWordFound) {
        function guessLetter(wordguess, enter){
       if(wordguess.includes(enter)){
          var regex = new RegExp(enter,"g");
          return wordguess.replace(regex,"");
       }
       return wordguess;
    }
    
    wordguess = guessLetter(wordguess,enter);
    console.log("after guessing 'h' word = ",wordguess);
    
        var enter = readline.question(namein + "'s guess (Enter 9 for lifelines or 0 to pass): ")
        if (outputchosenword.includes(enter)) { 
            console.log("Good Job! " + enter + " is one of the letters");
            correctans.push(enter);
            console.log(correctans);
        } 
         
        else {
            console.log("Sorry. " + enter + " is not a part of the word.");
            lifelost++;
        }
    } 
    
    while user has not correctly guessed word or run out of lives
       get user guess
       if users guess matches any letter in the word
            do something
       else
            do something else
    
    var correctans=[];
    var lifelost = 0
    var totalLife = 9;
    var isEntireWordFound = false; // set this to true somewhere!!
    
    while (lifelost <= totallife && !isEntireWordFound) {
        var enter = readline.question(namein + "'s guess (Enter 9 for lifelines or 0 to pass): ")
        if (outputchosenword.includes(enter)) { 
            console.log("Good Job! " + enter + " is one of the letters");
            correctans.push(enter);
            console.log(correctans);
        } else {
            console.log("Sorry. " + enter + " is not a part of the word.");
            lifelost++;
        }
    }