我已经在阵列中绘制了部分并且打印得很好
$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
我打算有一个功能来更新屏幕中的磁贴移动,这样当它突出显示移动到下一个方块时,该移动就会移动
这是使用序列化到文件来保持开始位置,动作,国王和皇后位置
答案 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中同样出色