结束游戏的逻辑操作 Javascript
logical operations for ending a game Javascript
我似乎遇到了某种类型的问题,进入我的Javascript/J查询刽子手游戏的获胜逻辑操作,我不知道问题到底是什么(如果玩家输了,我的游戏的失败部分似乎工作正常,这只是获胜的部分 - 如果你赢了,有时游戏会显示获胜的图像&css,但有时它什么也不做,不知道为什么 - 似乎工作的时间越长/我玩的时间越长/单词越长,我不确定为什么或发生了什么/为什么它有时会起作用而不是一直有效,或者逻辑上的失误是什么,导致它不起作用。
这是我的键盘控制和endGame((函数的代码:
$(".form-control").keypress(function(event) {
var keycode = (event.keyCode ? event.keyCode : event.which);
if (keycode == 13) {
var space = $(this).val();
play(space);
$(this).val('');
endGame();
return false;
}
});
function endGame() {
if (wrongGuesses.length >= 10) {
$("body").css("background-color", "#ff4500");
$(".form-control").prop('disabled', true);
console.log(rightGuesses);
console.log(word);
} else if (rightGuesses.length == word.length && wrongGuesses.length < 10) {
$(images[i]).hide();
$("#victory").show();
$("body").css("background-color", "#8AFBFF" );
$("body").animate( { backgroundColor: "#0C0D86" }, 2000 );
$("body").animate( { backgroundColor: "transparent" }, 2000 );
}
}
这是我的整个游戏代码:
var wordBank = ["modernism", "situationalist", "sartre", "camus", "hegel", "lacan", "barthes", "baudrillard", "foucault", "debord", "baudrillard"];
var word = [];
var wrongGuesses = [];
var rightGuesses = [];
var images = [gallows, head, body, armL, handL, armR, handR, legL, footL, legR, footR];
var y = 0;
var i = 1;
$(document).ready(function() {
function randomWord() {
var random = Math.floor(Math.random() * wordBank.length);
var toString = wordBank[random];
console.log(toString);
word = toString.split("");
console.log(word);
}
randomWord();
function wordSpaces() {
for (var i = 0; i < word.length; i++) {
$(".word-spaces > tbody > tr").append('<td data-idx=i>' + word[i] + '</td>')
}
}
wordSpaces();
function play(space) {
//indexOf()==inArray()
var lIndex = jQuery.inArray(space, word);
console.log(lIndex);
if (lIndex == -1) {
wrongGuesses.push(space);
var wrong = wrongGuesses.length;
console.log('wrong ' + wrong);
$('.wrongLetters tbody tr td:nth-of-type(' + wrong + ')').text(space);
// $(this).css("background-color", "#ff4500").fadeIn(300).delay(800).fadeOut(300);
$(images[i - 1]).hide();
$(images[i]).show();
i++;
$("html").css("background-color", "#ff4500").fadeIn(300).delay(300).fadeOut(300).fadeIn(100);
console.log(word);
} else {
console.log(word + "word");
console.log(space + "space");
function getInstances(word,space) {
// var string = word[0];
// console.log(string);
// var splitArray=string.split("");
// console.log(splitArray);
var indexes = [], w;
for(w=0; w<word.length;w++ )
if (word[w] === space)
indexes.push(w);
return indexes;
}
console.log(word + "word");
console.log(space + "space");
var indexes = getInstances(word, space);
console.log(indexes);
// rightGuesses.push(space);
console.log(rightGuesses);
// var right = rightGuesses.length;
indexes.forEach(function (index){
$(".word-spaces tbody tr td:nth-of-type(" + (index + 1) + ")").css('color', 'black');
});
rightGuesses.push(space);
// rightGuesses.push(space);
}
}
$(".form-control").keypress(function(event) {
var keycode = (event.keyCode ? event.keyCode : event.which);
if (keycode == 13) {
var space = $(this).val();
play(space);
$(this).val('');
endGame();
return false;
}
});
/*
function endGame() {
if (wrongGuesses.length >= 10 || rightGuesses.length == word.length) {
$("body").css("background-color", "#ff4500");
$(".form-control").prop('disabled', true);
}else{
if (rightGuesses.length == word.length){
}
} }
*/
function endGame() {
if (wrongGuesses.length >= 10) {
$("body").css("background-color", "#ff4500");
$(".form-control").prop('disabled', true);
console.log(rightGuesses);
console.log(word);
} else if (rightGuesses.length == word.length && wrongGuesses.length < 10) {
$(images[i]).hide();
$("#victory").show();
$("body").css("background-color", "#8AFBFF" );
$("body").animate( { backgroundColor: "#0C0D86" }, 2000 );
$("body").animate( { backgroundColor: "transparent" }, 2000 );
}
}
});
任何帮助将不胜感激 - 我觉得我已经在这个游戏上工作了很长时间,以至于我不再看到东西了。谢谢!
我是这样想出来的:首先我创建了另一个空数组全局变量:var right = []; 然后我设置了另一个 .forEach 循环来计算正确字母的数量(以考虑多个字母的计数( - indexes.forEach(function(index( { 答案[索引] = 空格; 右计数++ })然后我把这些值推到空数组中: right.push(rightCount(;然后我对这个数组进行了排序,以获取要在后面的逻辑操作中使用的总和:函数 endGame(( { var sumRight = right.reduce(add, 0(;
function add(a, b) {
return a + b;
}
if (sumRight == word.length) {
$(images[i]).hide();
$("#victory").show();
$("body").css("background-color", "#8AFBFF");
$(".form-control").prop('disabled', true);
$("body").animate({
backgroundColor: "#0C0D86"
}, 2000);
$("body").animate({
backgroundColor: "transparent"
}, 2000);
} else if (wrongGuesses.length >= 10) {
$("body").css("background-color", "#ff4500");
$(".form-control").prop('disabled', true);
$("body").animate({
backgroundColor: "#000000"
}, 2000);
$("body").animate({
backgroundColor: "transparent"
}, 2000);
}
}
问题是您正在检查rightGuesses.length == word.length
如果一个单词有多个相同的字母,我可以用比word.length更少的猜测来完成单词。
我能够通过修改您的最终游戏并按 control+shift+i 查看控制台来解决此问题。
function endGame() {
console.log(wrongGuesses.length, rightGuesses.length, word.length);
if (wrongGuesses.length >= 10 || rightGuesses.length == word.length) {
$("body").css("background-color", "#ff4500");
$(".form-control").prop('disabled', true);
}
}
更新了小提琴以捕获答案并将其与原始单词进行比较:https://jsfiddle.net/8cgx2sfd/4/
var wordBank = [ "marka"];
var word = [];
var answer = [];
var wrongGuesses = [];
var rightGuesses = [];
var images = [gallows, head, body, armL, handL, armR, handR, legL, footL, legR, footR];
var y = 0;
var i = 1;
$(document).ready(function() {
function randomWord() {
var random = Math.floor(Math.random() * wordBank.length);
var toString = wordBank[random];
console.log(toString);
word = toString.split("");
console.log(word);
}
randomWord();
function wordSpaces() {
for (var i = 0; i < word.length; i++) {
$(".word-spaces > tbody > tr").append('<td data-idx=i>' + word[i] + '</td>')
}
}
wordSpaces();
function play(space) {
//indexOf()==inArray()
var lIndex = jQuery.inArray(space, word);
console.log(lIndex);
if (lIndex == -1) {
wrongGuesses.push(space);
var wrong = wrongGuesses.length;
console.log('wrong ' + wrong);
$('.wrongLetters tbody tr td:nth-of-type(' + wrong + ')').text(space);
// $(this).css("background-color", "#ff4500").fadeIn(300).delay(800).fadeOut(300);
$(images[i - 1]).hide();
$(images[i]).show();
i++;
$("html").css("background-color", "#ff4500").fadeIn(300).delay(300).fadeOut(300).fadeIn(100);
console.log(word);
} else {
console.log(word + "word");
console.log(space + "space");
function getInstances(word,space) {
// var string = word[0];
// console.log(string);
// var splitArray=string.split("");
// console.log(splitArray);
var indexes = [], w;
for(w=0; w<word.length;w++ )
if (word[w] === space)
indexes.push(w);
return indexes;
}
console.log(word + "word");
console.log(space + "space");
var indexes = getInstances(word, space);
console.log("indexes", indexes);
indexes.forEach(function(index){
answer[index] = space;
});
console.log("answerswer", answer);
// rightGuesses.push(space);
console.log(rightGuesses);
// var right = rightGuesses.length;
indexes.forEach(function (index){
$(".word-spaces tbody tr td:nth-of-type(" + (index + 1) + ")").css('color', 'black');
});
rightGuesses.push(space);
// rightGuesses.push(space);
}
}
$(".form-control").keypress(function(event) {
var keycode = (event.keyCode ? event.keyCode : event.which);
if (keycode == 13) {
var space = $(this).val();
play(space);
$(this).val('');
endGame();
return false;
}
});
function endGame() {
console.log(wrongGuesses.length, rightGuesses.length, word.length, (word===answer), word, answer);
var diff = $(answer).not(word).get();
console.log('diff', diff);
if (wrongGuesses.length >= 10 || rightGuesses.length == word.length || answer === word) {
$("body").css("background-color", "#ff4500");
$(".form-control").prop('disabled', true);
}
}
});
- 操作javascript变量[HTML]以只显示文本
- 如何使用keyup或input进行操作?javascript(jQuery)
- RubyonRails环境控制器操作JavaScript响应
- 在替换之前,操作javascript正则表达式匹配,例如$1
- 每次 iframe 重新导航时执行操作.(JavaScript)
- 使用下划线操作 JavaScript 对象
- 如何阻止 confirm() 的默认操作 JavaScript
- 结束游戏的逻辑操作 Javascript
- 操作 JavaScript 日期对象
- CSS 样式操作:Javascript 不起作用
- 镜像/复制鼠标操作 JavaScript
- 使用Java操作JavaScript
- 操作JavaScript数组
- 循环遍历无序列表并对每个节点执行操作Javascript
- 操作Javascript数据在D3.js上切换系列
- 如何通过在检查器中操作Javascript来抓取表?页面仅显示当前日期's的数据,但我想回到过去,重新收集
- 从java操作Javascript对象
- 更改默认键操作JavaScript
- 使用Jquery $.each()操作Javascript对象
- 是否有一种方法可以使用JS或jQuery来操作JavaScript表单