PHP在多维数组第2部分中移动检查器块

时间:2010-11-18 23:46:01

标签: php multidimensional-array

我已经在阵列中绘制了部分并且打印得很好

    $board = array(
             array('1','rs','1','rs','1','rs','1','rs'),
             array('rs','1','rs','1','rs','1','rs','1'),
             array('1','rs','1','rs','1','rs','1','rs'),
             array('rs','bs','rs','bs','rs','bs','rs','bs'),
             array('bs','rs','bs','rs','bs','rs','bs','rs'),
             array('2','bs','2','bs','2','bs','2','bs'),
             array('bs','2','bs','2','bs','2','bs','2'),
             array('2','bs','2','bs','2','bs','2','bs')
              );

1 =黑色件 2 =红件
rs =红色正方形
bs =黑色方块

此代码解析播放器的输入:示例FROM F2到(0,0)坐标

function parseSquareFrom($square) {
    if (strlen($square) != 2) {
        return FALSE;
    }

    $coords = array(ord('A') - ord($square[0]), $square[1] - 1);

    // Perform bounds-checking.
    if ($coords[0] < 0 || $coords[0] > 7 || $coords[1] < 0 || $coords[1] > 7) {
        return FALSE;
    }

    return $coords;
}

我为TO输入重复了相同的功能(玩家想要移动棋子的地方

我的问题是下一个代码是使用上述函数移动的有效方法

    $board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]];
    $board[$coords[0]][$coords[1]] = 0;

    //eating action
    $board[$coords1[0]][$coords1[1]] = 0;
    $board[$coords1[0]-2][$coords1[1]+2] = $board[$coords[0]][$coords[1]];

$way = ($_POST['way'] === 'up')? 1:-1;

$way = ($_POST['way'] === 'down')? -1:+1;



    //if player is 'up' then the value of $way is 1 so
      $board[$x+(-1*$way)][$y+(1*$way)] = $board[$coords[0]][$coords[1]]; // position 2,2 becomes 1,3
   //if player is not 'up' then the value of $way is -1 so
      $board[$x+(-1*$way)][$y+(1*$way)] = $board[$coords[0]][$coords[1]]; // position 2,2 becomes 3,1

我打算有一个功能来更新屏幕中的磁贴移动,这样当它突出显示移动到下一个方块时,该移动就会移动

这是使用序列化到文件来保持开始位置,动作,国王和皇后位置

2 个答案:

答案 0 :(得分:1)

我将假设$coords是一个$_POST变量,就像这个问题第一部分的建议一样。如果是这种情况,代码的第一部分是正确的:

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]];
$board[$coords[0]][$coords[1]] = 0;

这会在棋盘上向右一步对角移动一块。 另一方面,第二部分跳过了实际的“进食”动作。除非,用户指定的位置是敌人所在的位置。在这种情况下,您的代码将起作用。

<小时/> 至于你做的绑定检查,你不是防弹,因为在吃饭时添加2,而边缘旁边的一块会导致你的代码试图将这块放在板外。所以你可以检查边界,取决于移动,所以如果移动是标准的对角线,你应该检查结束位置是否在限制范围内,而不是起始位置,因为你假设之前的位置处于正确的位置。

答案 1 :(得分:1)

我认为你有一些问题

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]];

如果$ coords [1] == 7(似乎是允许的话)那么$ coords [1] +1 == 8这是超出界限的。更不用说我们后面会看到的电线+/- 2。

您可能不希望存储中存在'bs'/'rs',所有这些都可以推断出来。

$getSquareColor = function($x,$y){return ($x+$y)/2 == 1 ? 'red' : 'black';}  //or better yet, const or enum


function getSquareColor($x, $y)  //alternatively
{
    if ( ($x+$y) % 2 == 0) return 'black';
    else return 'red';
}

ps - 如果你放弃那些美元符号,这个功能在javascript中同样出色