结束游戏的逻辑操作 Javascript

logical operations for ending a game Javascript

本文关键字:操作 Javascript 游戏 结束      更新时间:2023-09-26

我似乎遇到了某种类型的问题,进入我的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);
    }
  }
});