2013-03-25 105 views
1

我正在为Android的html/javascript游戏工作。这是一个棋盘游戏,它执行以下操作。 它有不同颜色的瓷砖,用户可以在电路板上放置一块瓷砖(以编程方式选择)。如果我们得到4个或更多相同颜色/形状的瓷砖,我们会得到一些点数,这些瓷砖会消失。被移除的瓷砖上方的瓷砖将替换它们,新的瓷砖将被添加到空的地方。下面示出了它的工作原理的图像(这只是一个例子,真实板可具有不同的尺寸):JavaScript棋盘游戏:寻找优化

enter image description here

瓦片<img>元件与它们的ID存储在数组中,我使用的检查比赛和替换。

这一切都工作得很好,但一旦新的瓷砖添加到董事会我需要检查整个董事会,以检查是否有新的匹配可用。我想在这里提供一些建议,因为检查整个董事会可能会非常缓慢。有没有办法可以有效地做到这一点? 这就是我想过做: enter image description here

鉴于前面的例子中,我想到了检查红色区域唯一的元素,即只有已被移动或添加的元素。它可以是有效的,如果瓷砖垂直移动,因为我只需要检查移动/添加的瓷砖,它会给我新的匹配。但是如果水平移除瓷砖,可能会产生问题,因为如果这些瓷砖位于底部,我将不得不检查整个电路板,并面临同样的问题。

任何意见或建议,将不胜感激。

注意:我没有添加任何代码,因为它只是检查给定图块的行和列并查找匹配项。但如果需要,我可以提供。

编辑:之前任何人都可以反对我想告诉我,我刚刚添加这个问题到游戏开发部分,因为我没有收到任何答案:)。

编辑:添加我的代码

function initializeBoard(){ 
    //items is an array which contains tiles/images names 
    for(var i=0; i < totalItems; i++) 
     board[i+1] = Math.floor(Math.random() * (items.length - 1)) + 1; 
    for(var i=0; i < totalItems; i++) 
    { 
     if(!(i % numberShapesXAxis)) 
      document.write("<BR>"); 

     document.write("<img src=\"images/"+ items[board[i+1]]+ ".gif\" style = \"border:0; height:"+ itemSize+ "px; width:"+ itemSize+ "px;\" name=\"t", i+1,"\" onclick = \"replaceAndCheck(", i+1, ")\"><\/a>"); 
    } 
} 
//so basically board contains image ids. 
+0

我希望你存储的行和列不仅仅作为图像的参考?我想是的,你必须提供你的代码(至少那些初始化你的数据结构的部分,以及你当前的移动逻辑)。 – Bergi 2013-03-27 14:14:50

+0

@Bergi我已经添加了我的董事会初始化代码 – Anila 2013-03-27 15:46:29

回答

0

如何检查是否有新的比赛,当你搬石头砸。所以当石头x向下移动时,检查X的新位置是否创建匹配。这样你可以创建一个递归类型的方法。

+0

首先感谢您的答案。如果我使用你的方法,我会看到东西,我会水平移除瓷砖,我会检查一个瓷砖的匹配,然后根据这个瓷砖所做的更改(如果它有匹配的话),我会检查另一个新的瓷砖。而一旦没有匹配的新瓦片,我会开始回来一个级别,并检查第二个瓷砖,并重新开始整个过程​​。如果那就是我必须要做的事情,那不是很慢吗? – Anila 2013-03-27 14:10:45

+0

对于你添加的每一块石头,你只需要检查水平和垂直。所以这不是很多的处理。假设你移动1块。你只需要检查块下面的石头,看看它是否可以创建一个新的行。因为石头上面的石头仍然是相同的(如果它不是上排)。不时要检查整个领域需要更长的时间。 – 2013-03-27 14:28:30

+0

我完全同意你的看法,但是我想说的是我要垂直和水平地检查一块石头,如果有匹配的线条或柱子将被移除,它们上面的瓷砖将向下移动,并且新的瓷砖将采取他们的地方。有可能新的比赛将可用。你同意检查是否有新的比赛存在,我将不得不检查所有新的比赛吗? – Anila 2013-03-27 14:32:23