这有点儿谜题 - 我为我的孩子创造了一个与Bookworm和Wordsworth没有什么不同的小游戏。从字母表中随机选择49个字母(存储在数组中),孩子们点击相邻的字母来制作单词。有一个检查将单词与字典文件(也在数组中)匹配,如果单词有效,则所选字母将在网格中替换为更多随机字母。到目前为止都很好。
我接下来要做的是检查网格,看看是否还有任何有效的单词,如果你愿意,可以选择一种游戏。问题是我不知道从哪里开始!
网格中的字母可以很容易地放入一个数组中,但是我缺乏计算jQuery或javascript代码的技能,可以检查网格中的有效单词(记住字母必须与每个字母相邻)其他)。字母显示在DIV元素中而不是表格中。
到目前为止,我只是设法在多个循环中锁定浏览器,问题只会加剧,因为每次正确找到一个单词并替换网格中的字母时,代码都需要运行。
我知道这更像是一个问题解决实验,而不是编码问题,所以如果这篇文章在这里违反了任何规则,我很抱歉,但有没有人知道如何最好地解决这个问题?
干杯BS
答案 0 :(得分:1)
首先获取一行的所有字母。然后将第一个字母复制到一个字符串中,并将其与字典进行比较。接下来你拿两个第一个字母并做同样的事情。当你达到7个字符长度时,你取6个最后一个字母并将它与字典进行比较。当您完成该行中的所有检查后,请转到下一行。完成所有行后,对柱进行相同的操作。
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。
stack []的工作方式类似于x86堆栈。最后,先出。
push()将新对象添加到堆栈上
pop()获取添加到堆栈的最后一个对象并将其从堆栈中删除
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次比较。实际上,这本词典至少有一千个单词。