Javascript bot未定义变量
问题描述:
我正在使用Kik API创建一个bot。应该发生什么,当我输入!hangman时,游戏初始化。 hang子手boolean会这样做,然后变得无效。然后,人们可以使用!hang子手信来猜测这个词。够简单。但是,有一个奇怪的错误。第一次使用hangman,它可以正常工作。然而,第二次,代码崩溃,声称状态和错误信息未定义,尽管我确实定义了它们。任何帮助表示赞赏!Javascript bot未定义变量
var hangmanIsActive = false;
var hangmanBootup = true;
bot.onTextMessage((message) => {
if (message.body.startsWith("!help")) {
message.reply("I know the following commands:\n- !Hangman");
}
if (message.body.startsWith("!hangman")) {
if (hangmanBootup == true){
hangmanBootup = false;
message.reply("Welcome to hangman!");
var triesleft = "Tries left: "
var inttriesleft = 10
var alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
"t", "u", "v", "w", "x", "y", "z"];
var stage0 = triesleft + inttriesleft;
var stage1 = "\n"
"\n"
"\n"
" " + triesleft + {} + "\n"
"\n"
"\n"
"\n"
"_|___ \n";
var stage2 = "\n"
" |\n"
" |\n"
" | " + triesleft + {} + "\n"
" |\n"
" | \n"
" |\n"
"_|___ \n";
var stage3 = " _______\n"
" |/\n"
" |\n"
" | " + triesleft + {} + "\n"
" |\n"
" |\n"
" |\n"
"_|___ \n";
var stage4 = " _______\n"
" |/ |\n"
" |\n"
" | " + triesleft + {} + "\n"
" |\n"
" | \n"
" |\n"
"_|___ \n";
var stage5 = " _______\n"
" |/ |\n"
" | (_)\n"
" | " + triesleft + {} + "\n"
" |\n"
" |\n"
" |\n"
"_|___ \n";
var stage6 = " _______\n"
" |/ |\n"
" | (_)\n"
" | | " + triesleft + {} + "\n"
" | | \n"
" |\n"
" |\n"
"_|___ \n";
var stage7 = " _______\n"
" |/ |\n"
" | (_)\n"
" | \| " + triesleft + {} + "\n"
" | | \n"
" |\n"
" |\n"
"_|___ \n";
var stage8 = " _______\n"
" |/ |\n"
" | (_)\n"
" | \|/ " + triesleft + {} + "\n"
" | | \n"
" |\n"
" |\n"
"_|___ \n";
var stage9 = " _______\n"
" |/ |\n"
" | (_)\n"
" | \|/ " + triesleft + {} + "\n"
" | | \n"
" | /\n"
" |\n"
"_|___ \n";
var stage10 = " _______\n"
" |/ |\n"
" | (_)\n"
" | \|/ " + triesleft + {} + "\n"
" | | \n"
" | /\ \n"
" |\n"
"_|___ \n";
var words = ["testword"];
var keyword = "testword";
var currentstage = stage0;
var status = keyword.replace(/a/g, "-").replace(/b/g, "-").replace(/c/g, "-").replace(/d/g, "-").replace(/e/g, "-")
.replace(/f/g, "-").replace(/g/g, "-").replace(/h/g, "-").replace(/i/g, "-").replace(/j/g, "-")
.replace(/k/g, "-").replace(/l/g, "-").replace(/m/g, "-").replace(/n/g, "-").replace(/o/g, "-")
.replace(/p/g, "-").replace(/q/g, "-").replace(/r/g, "-").replace(/s/g, "-").replace(/t/g, "-")
.replace(/u/g, "-").replace(/v/g, "-").replace(/w/g, "-").replace(/x/g, "-").replace(/y/g, "-").replace(/z/g, "-");
var inttriesleft = 10
var incorrectletters = []
};
message.reply("Word: " + status + "\nIncorrect letters: " + incorrectletters);
message.reply(currentstage);
if (message.body.split(" ").length != 2){
message.reply("To suggest a letter, use \"!hangman a\" for example.");
return;
}
var theinput = message.body.split(" ")[1];
if (theinput.length > 1 || theinput.length == 0){
message.reply("To suggest a letter, use \"!hangman a\" for example.");
return;
}
if (alphabet.indexOf(theinput) > -1 == false){ // if the input is NOT in the array
console.log("Not a letter of the alphabet: " + theinput);
message.reply("You're supposed to use a letter of the alphabet!");
return;
}
if (status.indexOf(theinput) > -1 || incorrectletters.indexOf(theinput) > -1){ // if input is already used, either correct or incorrectly
console.log(status)
console.log(incorrectletters)
message.reply("You already used this letter!");
return;
}
if (keyword.includes(theinput)){
var statuslist = status.split("");
for (var l in keyword){
if (keyword[l] == theinput){
statuslist[l] = theinput;
}
}
status = statuslist.join().replace(",", "");
if (status.indexOf("-") > -1 == false){
message.reply("You won!");
}
return;
}
if (keyword.includes(theinput) == false){
var inttriesleft = inttriesleft - 1;
incorrectletters.push(theinput);
if (inttriesleft == 9){
var currentstage = stage1.format(inttriesleft);
return;}
if (inttriesleft == 8){
var currentstage = stage2.format(inttriesleft);
return;}
if (inttriesleft == 7){
var currentstage = stage3.format(inttriesleft);
return;}
if (inttriesleft == 6){
var currentstage = stage4.format(inttriesleft);
return;}
if (inttriesleft == 5){
var currentstage = stage5.format(inttriesleft);
return;}
if (inttriesleft == 4){
var currentstage = stage6.format(inttriesleft);
return;}
if (inttriesleft == 3){
var currentstage = stage7.format(inttriesleft);
return;}
if (inttriesleft == 2){
var currentstage = stage8.format(inttriesleft);
return;}
if (inttriesleft == 1){
var currentstage = stage9.format(inttriesleft);
return;}
if (inttriesleft == 0){
var currentstage = stage10.format(inttriesleft)
message.reply(currentstage);
message.reply("You lost! Thanks for playing.");
message.reply("The word was: " + keyword);
}
}
};
});
答
首先,没有必要把;
之后}
if语句之后。
其次,他们没有第二次定义的原因是因为你在bot.onMessage
函数中定义了它们,这使得它们成为本地函数,因此当函数完成时它们被破坏。相反,你应该像这样开头全局定义他们:
var hangmanIsActive = false;
var hangmanBootup = true;
// Define them up here instead
var triesleft = "Tries left: "
var inttriesleft = 10
var alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
"t", "u", "v", "w", "x", "y", "z"];
var stage0 = triesleft + inttriesleft;
var stage1 = "\n"
"\n"
"\n"
" " + triesleft + {} + "\n"
"\n"
"\n"
"\n"
"_|___ \n";
var stage2 = "\n"
" |\n"
" |\n"
" | " + triesleft + {} + "\n"
" |\n"
" | \n"
" |\n"
"_|___ \n";
var stage3 = " _______\n"
" |/\n"
" |\n"
" | " + triesleft + {} + "\n"
" |\n"
" |\n"
" |\n"
"_|___ \n";
var stage4 = " _______\n"
" |/ |\n"
" |\n"
" | " + triesleft + {} + "\n"
" |\n"
" | \n"
" |\n"
"_|___ \n";
var stage5 = " _______\n"
" |/ |\n"
" | (_)\n"
" | " + triesleft + {} + "\n"
" |\n"
" |\n"
" |\n"
"_|___ \n";
var stage6 = " _______\n"
" |/ |\n"
" | (_)\n"
" | | " + triesleft + {} + "\n"
" | | \n"
" |\n"
" |\n"
"_|___ \n";
var stage7 = " _______\n"
" |/ |\n"
" | (_)\n"
" | \| " + triesleft + {} + "\n"
" | | \n"
" |\n"
" |\n"
"_|___ \n";
var stage8 = " _______\n"
" |/ |\n"
" | (_)\n"
" | \|/ " + triesleft + {} + "\n"
" | | \n"
" |\n"
" |\n"
"_|___ \n";
var stage9 = " _______\n"
" |/ |\n"
" | (_)\n"
" | \|/ " + triesleft + {} + "\n"
" | | \n"
" | /\n"
" |\n"
"_|___ \n";
var stage10 = " _______\n"
" |/ |\n"
" | (_)\n"
" | \|/ " + triesleft + {} + "\n"
" | | \n"
" | /\ \n"
" |\n"
"_|___ \n";
var words = ["testword"];
var keyword = "testword";
var currentstage = stage0;
var status = keyword.replace(/a/g, "-").replace(/b/g, "-").replace(/c/g, "-").replace(/d/g, "-").replace(/e/g, "-")
.replace(/f/g, "-").replace(/g/g, "-").replace(/h/g, "-").replace(/i/g, "-").replace(/j/g, "-")
.replace(/k/g, "-").replace(/l/g, "-").replace(/m/g, "-").replace(/n/g, "-").replace(/o/g, "-")
.replace(/p/g, "-").replace(/q/g, "-").replace(/r/g, "-").replace(/s/g, "-").replace(/t/g, "-")
.replace(/u/g, "-").replace(/v/g, "-").replace(/w/g, "-").replace(/x/g, "-").replace(/y/g, "-").replace(/z/g, "-");
var inttriesleft = 10
var incorrectletters = []
bot.onTextMessage((message) => {
if (message.body.startsWith("!help")) {
message.reply("I know the following commands:\n- !Hangman");
}
if (message.body.startsWith("!hangman")) {
if (hangmanBootup == true){
hangmanBootup = false;
message.reply("Welcome to hangman!");
}
message.reply("Word: " + status + "\nIncorrect letters: " + incorrectletters);
message.reply(currentstage);
if (message.body.split(" ").length != 2){
message.reply("To suggest a letter, use \"!hangman a\" for example.");
return;
}
var theinput = message.body.split(" ")[1];
if (theinput.length > 1 || theinput.length == 0){
message.reply("To suggest a letter, use \"!hangman a\" for example.");
return;
}
if (alphabet.indexOf(theinput) > -1 == false){ // if the input is NOT in the array
console.log("Not a letter of the alphabet: " + theinput);
message.reply("You're supposed to use a letter of the alphabet!");
return;
}
if (status.indexOf(theinput) > -1 || incorrectletters.indexOf(theinput) > -1){ // if input is already used, either correct or incorrectly
console.log(status)
console.log(incorrectletters)
message.reply("You already used this letter!");
return;
}
if (keyword.includes(theinput)){
var statuslist = status.split("");
for (var l in keyword){
if (keyword[l] == theinput){
statuslist[l] = theinput;
}
}
status = statuslist.join().replace(",", "");
if (status.indexOf("-") > -1 == false){
message.reply("You won!");
}
return;
}
if (keyword.includes(theinput) == false){
inttriesleft = inttriesleft - 1;
incorrectletters.push(theinput);
if (inttriesleft == 9){
currentstage = stage1.format(inttriesleft);
return;
}
if (inttriesleft == 8){
currentstage = stage2.format(inttriesleft);
return;
}
if (inttriesleft == 7){
currentstage = stage3.format(inttriesleft);
return;
}
if (inttriesleft == 6){
currentstage = stage4.format(inttriesleft);
return;
}
if (inttriesleft == 5){
currentstage = stage5.format(inttriesleft);
return;
}
if (inttriesleft == 4){
currentstage = stage6.format(inttriesleft);
return;
}
if (inttriesleft == 3){
currentstage = stage7.format(inttriesleft);
return;
}
if (inttriesleft == 2){
currentstage = stage8.format(inttriesleft);
return;
}
if (inttriesleft == 1){
currentstage = stage9.format(inttriesleft);
return;
}
if (inttriesleft == 0){
currentstage = stage10.format(inttriesleft)
message.reply(currentstage);
message.reply("You lost! Thanks for playing.");
message.reply("The word was: " + keyword);
}
}
}
});
它看起来像你使用var
每次你改变一个变量,但你只应该在定义他们使用它。不需要始终使用var
:)
它是否给你任何代码崩溃的行号? –