0

在我的拼写游戏中,有 3-6 个不同大小的单词。一旦在网格中完成了一定数量的单词,网格的其余部分就会消失。我希望它把所有的字长品种加起来,而不是只考虑一个。例如,一旦完成两个单词,我现在就可以淡出。问题是只有当两个、三个字母的单词完整或两个四字母的单词完整等时它才会消失。

var completeLetters = $('.wordglow2').length;
var threeLetter = (completeLetters / 3);
var fourLetter = (completeLetters / 4);
var fiveLetter = (completeLetters / 5);
var sixLetter = (completeLetters / 6);


if (threeLetter == 2) {
    $('table').fadeOut(2000);
}
if (fourLetter == 2) {
    $('table').fadeOut(2000);
}
if (fiveLetter == 2) {
    $('table').fadeOut(2000);
}
if (sixLetter== 2) {
    $('table').fadeOut(2000);
}

有没有一种方法可以让变量组合所有单词,然后为此创建一个 if 语句?

4

1 回答 1

3

首先 - 我建议你这样做是错误的 - 你是从游戏的 HTML/CSS 表示中确定游戏状态。我建议您创建一个表示游戏状态的对象,然后使用该对象来确定您需要对 HTML/CSS 表示进行的操作。这也将使您在这里尝试做的事情变得更加容易。

例如,您最终可能会说...

if (gamestate.wordscomplete == 3) {//fade board//}

...这比浏览 HTML 更令人愉快。但我离题了...

好的,所以当它是正确的时候,这个类wordglow2会被添加到一个字母中。网格中的每个都<tr>可以包含一个单词。所以...

function gamestate() {
  var words = []; //new array to store completed word counts
  var wordscompleted = 0; //overall word count
  //create an entry for 3,4,5, and 6 letter words
  for (var wc = 3; wc <=6 ; wc++) {words[wc] = 0;}

  $('table.tablestyle > tr').each( function(i,el) {
    // get the number of complete letters in this row
    var wordlength = $(el).find('.wordglow2').length; 
    if (wordlength >=3 && wordlength <= 6) { 
      // a completed word should not be outside of this range anyway
      words[wordlength]++; //increment the appropriate counter
      wordscompleted++; //increment overall counter
    }
  });
  //return a gamestate object 
  return { wordscompleted : wordscompleted , words : words };
}; 

上面的函数将查看游戏表中的每一行并计算wordglow2单元格的数量。如果它在 3 和 6 之间,那么总计数器会增加,并且每个字长的计数器也会增加。

它可以如下使用...

var gs = gamestate();

gs.wordscompleted //total words completed
gs.words[3]       //total 3-letter words completed
gs.words[4]       //total 4-letter words completed etc etc

更新

http://jsfiddle.net/HZX6k/6/

这个 fiddle 只是使用一个全局对象来跟踪游戏状态,它会随着 3、4、5、6 个字母计数单词中的每一个而增加计数和计数。

于 2012-09-17T14:09:32.943 回答