1

我基本上是在尝试制作一个涉及网格的游戏。这是我到目前为止所拥有的(在我解释我需要发生的事情之前先看看比赛会有所帮助):

Javascript(见 jsfiddle 的 html ):

var score = 0;
var points = function(val, box) {
    var noise = Math.round(Math.round(0.1*val*Math.random()*2) - 0.1*val);
    score = score + (val + noise);
    var square = document.getElementById(box);
    square.innerHTML = val + noise;
    square.style.display='block';
    setTimeout(function() {
       square.style.display='none'; 
    }, 400);
    document.getElementById("out").innerHTML = score;
}

http://jsfiddle.net/stefvhuynh/aTQW5/1/

网格左下角的四个红色方块需要作为游戏的起点。当您单击其中一个框时,您可以通过单击相邻框沿网格移动。基本上,我需要让玩家只能从他们刚刚点击的框上、下、左和右移动。当玩家点击他们不应该点击的框时,我不希望调用 points 函数。

此外,我需要让玩家在 400 毫秒后才能点击另一个框。

我对编程比较陌生,所以任何帮助都会很棒。如果有办法做到这一点,我也会感谢有关如何使程序更高效的提示。

4

1 回答 1

0

大概的概念:

我建议为您的所有盒子设置一个类似的 id,例如box_x_y,并存储一个字符串列表,比如说allowedSquares.

然后,您将能够编写一个函数,该函数在单击一个框时会检查它的 id 是否在allowedSquares,如果是,则调用points(val, box)然后更新内容allowedSquares以反映位置的变化。

对所有盒子使用标准 id 约定的要点是,您可以编写getPosition(box)getBox(intX, intY)解析 id 字符串以返回盒子位置,反之亦然。

您甚至可以使该updateAllowedSquares(clickedBox)功能更改相邻框的颜色以显示它们被允许进行下一步。

编辑:一些示例代码:

免责声明:这些不是您要查找的代码行。

这只是一个适合您的起始套件,它假定一个 3x3 网格,起始位置为右下角的一个正方形。您将不得不稍微调整此代码。另外,我预测出界会出问题。我会让你思考一下,因为在这些情况下,我更喜欢提供思考而不是完整的解决方案......

var allowedSquares = ["box_2_2"]; // Initial list

function decodePositionFromID(boxId) {
  return boxId.split("_").slice(1,2);
}

function getIDfromXY(x, y) {
  return "box_" + x + "_" + y;
}

function updateAllowedSquaresList(boxID) {
  // 1 - We clear the array.
  allowedSquares.length = 0; 

  // 2 - We get the adjacent boxes IDs.
  var xyArray = decodePositionFromID(boxId);
  var upperBoxID = getIDfromXY(xyArray[0], xyArray[1]-1);
  // Rince, repeat, and add some gameboard boundaries checks.

  // 3 - We add the new IDs to the list.
  allowedSquares.push(upperBoxID, ...);
} 

function boxClick(val, boxID) {
  // We check if the box is a valid square to play.
  if (allowedSquares.indexOf(boxID) != -1) {
    points(val, boxID);
    updateAllowedSquaresList(boxID);
  }
}  
于 2013-02-14T07:47:27.960 回答