停止重叠以获得更大的单词

时间:2012-09-12 09:05:41

标签: javascript jquery

在我目前的拼写游戏中,网格设计为3个字母的单词。我可以在“wordList”(动态创建网格)中添加更大的单词,但网格的大小会更改并重叠在较大单词所在的行上。

例如,当添加一个四个字母的单词时,网格将在该行的末尾添加一个额外的单元格,而不是判断该单词不适合该行,并在网格中的另一个位置工作

基本上我需要网格保持相同的大小,并且当文字随机放置时,确定一个位置,允许网格保持6x6而不是当它们不适合位置时走出边缘。显然,当添加大于6个字母的单词时,这将不起作用,因为它是6x6,但这不应该是一个问题,因为我认为我们不会延伸到那么大的单词。

通过像这样的html添加单词......

<ul style="display:none;" id="wordlist">
    <li data-word="rat" 
        data-audio="http://www.wav-sounds.com/cartoon/bugsbunny1.wav" 
        data-pic="http://www.clker.com/cliparts/C/j/X/e/k/D/mouse-md.png">
    </li>
</ul>

然后从列表中动态创建网格,就像这样...

var listOfWords = [];
var rndWord = [];
var counter = 0;
var ul = document.getElementById("wordlist");
var i;

for (i = 0; i < ul.children.length; ++i) {

    listOfWords.push({
        "name": ul.children[i].getAttribute("data-word"),
        "pic": ul.children[i].getAttribute("data-pic"),
        "audio": ul.children[i].getAttribute("data-audio")
     });
}

var chosenWords = [];
var copylist = listOfWords.slice();

for (var x = 0; x < ul.children.length; x++) {
    var rand = Math.floor(Math.random() * (copylist.length));
    chosenWords.push(copylist[rand].name);
    copylist.splice(rand, 1);
    if (chosenWords.length < 12) {
        chosenWords.push('   ');
    }

}

var shuffledWords = [];
shuffledWords = chosenWords.sort(function() {
    return 0.5 - Math.random()
});

var guesses = {};
var tbl = document.createElement('table');
tbl.className = 'tablestyle';
var wordsPerRow = 2;

for (var i = 0; i < shuffledWords.length - 1; i += wordsPerRow) {

    var row = document.createElement('tr');
    for (var j = i; j < i + wordsPerRow; ++j) {
        var word = shuffledWords[j];
        guesses[word] = [];

        for (var k = 0; k < word.length; ++k) {
            var cell = document.createElement('td');


            $(cell).addClass('drop-box').attr('data-word', word).attr('data-letter', word[k]);
            cell.textContent = word[k];

            row.appendChild(cell);
         }
    }

    tbl.appendChild(row);
}

$(".container").append(tbl);

这是一个显示我的意思的小提琴。我在“wordList”中添加了两个4个字母的单词来表示我的意思。 http://jsfiddle.net/cTGGA/18/

修改

一旦我将更大的单词调整到网格中,我将在本声明中对其进行准备。

var completeLetters = $('.wordglow2').length;
var completeWords = (completeLetters / 3);
$('.counter').html(completeWords + '/6');

1 个答案:

答案 0 :(得分:2)

我认为您需要从随机数据列表中选择一个单词,该函数返回适合该行剩余空间的下一个未使用的单词。

或者如果你想要每行2个单词,那么行的长度是最长单词的2倍,并且在从列表中选择一个或两个单词后填充空白到行的末尾。