Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从随机字母中创建有效单词_Javascript_Jquery - Fatal编程技术网

Javascript 从随机字母中创建有效单词

Javascript 从随机字母中创建有效单词,javascript,jquery,Javascript,Jquery,这有点让人困惑——我为我的孩子们制作了一个小游戏,它和书呆子和华兹华斯一样。从字母表中随机选择49个字母(存储在一个数组中),孩子们点击相邻的字母组成单词。有一个检查将单词匹配到字典文件(也在一个数组中),如果单词有效,则在网格中选择的字母将替换为更多随机字母。到目前为止一切都很好 我接下来要做的是检查网格,看看是否有任何有效的单词留在其中,如果你愿意,这是一种游戏。问题是我不知道从哪里开始 网格中的字母可以很容易地放入数组中,但我缺乏编写jQuery或javascript代码的技能,这些代码可

这有点让人困惑——我为我的孩子们制作了一个小游戏,它和书呆子和华兹华斯一样。从字母表中随机选择49个字母(存储在一个数组中),孩子们点击相邻的字母组成单词。有一个检查将单词匹配到字典文件(也在一个数组中),如果单词有效,则在网格中选择的字母将替换为更多随机字母。到目前为止一切都很好

我接下来要做的是检查网格,看看是否有任何有效的单词留在其中,如果你愿意,这是一种游戏。问题是我不知道从哪里开始

网格中的字母可以很容易地放入数组中,但我缺乏编写jQuery或javascript代码的技能,这些代码可以检查网格中的有效单词(记住字母必须彼此相邻)。字母以DIV元素显示,而不是以表格显示

到目前为止,我只是简单地将浏览器锁定在大量循环中,问题只会更加严重,因为每次正确找到单词并替换网格中的字母时,代码都需要运行

我知道这更多的是一个解决问题的实验,而不是一个编码问题,所以如果这篇文章违反了这里的任何规则,我深表歉意,但是有人知道如何最好地去做吗


干杯B

从获取一行中的所有字母开始。然后将第一个字母复制成字符串,并将其与字典进行比较。接下来,取两个首字母,并做同样的操作。当长度达到7个字符时,取最后6个字母并与字典进行比较。完成该行中的所有检查后,转到下一行。完成所有行后,对COLLMNS执行相同的操作

psuedo代码:

for ($currentCollumn=1; $gridWidth > $currentCollumn; $currentCollumn++) {
    $collumn = get collumn as string
    for ($i=1;$i!=7;$i++) {
        get first $i characters of $collumn and compare to dictionary
        }
    for ($i=1;$i!=7;$i++) {
        get last $i characters of $collumn and compare to dictionary
        }
}

for ($currentRow=1; $gridHeight > $currentRow; $currentRow++) {
    $row = get row as string
    for ($i=1;$i!=7;$i++) {
        get first $i characters of $row and compare to dictionary
        }
    for ($i=1;$i!=7;$i++) {
        get last $i characters of $row and compare to dictionary
        }
}

编辑:版本2,因为我没有意识到单词不限于直线

从每个可能的地方开始

// define variables:
booleanArray path[x][y] = false;  
p = pointerlocation;  
stack[] = p;  
currentString = "";  
p、 up/.down/.left/.right检查路径[][],其中y+1、y-1、x+1、x-1分别为。如果超出边界,则返回false

堆栈[]的工作方式类似于x86堆栈。后进先出。
push()将新对象添加到堆栈中
获取添加到堆栈中的最后一个对象,并将其从堆栈中移除

function getAllTheStrings(p.x, p.y) {
    while (p) {
        path (p.x, p.y) = true;
        currentString += p.getCharacter();
        // check neighbors
        if (p.up) {
           stack.push(p.up, path, currentString);
        } 
        if (p.down) {
           stack.push(p.down, path, currentString);
        } 
        if (p.left) {
           stack.push(p.left, path, currentString);
        } 
        if (p.right) {
           stack.push(p.right, path, currentString);
        }
        // add current string to list possible words
        foundWords.push(currentString);

        // pop next item from stack
        overwrite variables with stored values of: p, path, currentString

        if (stack is empty) {
        p = false; // end loop
        }
    }
}
这将被称为:

function getWords() {
    for ($y=1; $gridHeight > $y; $y++) {
        for ($x=1; $gridWidth > $x; $x++) {
            getAllTheStrings(x,y);
        }
}
由于该函数必须检查可能路径的每个组合,因此它与网格大小的比例非常差。1x1网格需要进行一次测试。2x2需要28次测试。在3x3时,我在大约270次测试中数不清


循环完成后,
foundWords
将根据整个词典逐字检查。5个找到的单词和字典中的100个单词将进行500次比较。实际上,这本词典至少有1000个单词。

如果你把刚才的代码贴出来,它会使它更具体。也许这不是一个好的解决方案。(也别忘了)我不相信你能用接近合理处理能力的任何东西做你想做的事情-尤其是在接近实时的任何东西上。嗨,本,是的,我开始想我自己——看我的评论再往下一点……就我理解他的问题而言,这些字母需要相邻,而不一定是一排。因此,单词也可以出现在列中。循环的第二个psuedo代码将处理这个问题,除非我误解了您的意思。单词在网格上可能是L形的吗?是的,单词可以由点击相邻字母形成的任何形状组成。谢谢你的意见,等我回家后,我会更深入地研究这个问题。如果是这样的话,我只需要按下一个重置按钮。在合理的时间内,单词的可能位置的数量可能很高,特别是使用单线程javascript。不过我会试试看。嗨,菲利普,我设法让一个循环运行起来,似乎可以完成这项工作,但它太慢了!太慢了,无法在实践中实际工作,因为它明显减慢了整个过程。今天上午我确实考虑到,为初始网格创建字母数组,并在加载旋转器或某些东西的后面工作,这可能是一个想法,但是它只有在字母被替换时才是有效的,从而完全否定了整个事情。谢谢你到目前为止的投入,如果你有什么想法,我很想听,但可以说这可能是一纸空文。学士学位