我有这个数组,我用表格显示如何使用用户输入进行移动 当前为每个数组分配0,但我计划为数组分配其他值:
我的问题是 - 我如何使用用户输入向上,向下,向右,向左和向内移动
Array ( [0] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 )
[1] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 )
[2] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 )
[3] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 )
[4] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 )
[5] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 )
[6] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 )
[7] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 )
);
array(0,0,0,0,0,0,0,0),
array(0,0,0,0,0,0,0,0),
array(0,0,0,0,0,0,0,0),
array(0,0,0,0,0,0,0,0),
array(0,0,0,0,0,0,0,0),
array(0,0,0,0,0,0,0,0),
array(0,0,0,0,0,0,0,0),
array(0,0,0,0,0,0,0,0),
这是一个跳棋游戏没有mysql。
我已经可以将数组序列化为文本文件,但是文本文件需要包含起始位置,当每个玩家进行移动时,将文件移动到文本文件中的位置然后回调显示
我已将数组显示到html表中
我也试图限制移动到非法广场但这是我需要自己工作的逻辑问题
此循环将使用下面的代码
$row = 0;
print "<form>";
print "<table border = 1>";
while ($row < 8){ // Counts to 8. (from 0...7 = 8 times. 0 ... 8 = 9 times)
print "<tr>";
$row++;
$col = 0; // reset column to 0 each time printing one row.
while ($col < 8){
print "<td>";
if($board[$row][$col] == 0)
{
print "<input type=\"checkbox\" name=\"box[]\" value=\"$value\">";
// Add \ before " otherwise it will treat as the end of the quote.
}
print "</td>";
$col++;
}
print "</tr>";
}
print "</table>";
print "</form>";
我已经创建了一个用于保持分数的数据库,但这将在此之后完成
答案 0 :(得分:2)
你需要定义游戏的可用移动,在这种情况下,从玩家的角度来看,你可以说玩家可以移动游戏:
请注意,列表中的最后两个元素是一个吃另一个元素的元素。一旦你知道你可以获取该片的当前位置并将其移动到新片。我将假设对于普通棋子你会使用“N”而对于皇后“Q”虽然我不会在我的例子中使用皇后。 我将使用正常的动作然后实际吃一个:
//Piece at $board[$x][$y] moves diagonally to the left.
$board[$x-1][$y+1] = $board[$x][$y]; // This space is occupied
$board[$x][$y] = 0; //Now the space is empty
现在吃的部分。让我们想象一下$board[$x][$y]
上的那条想要吃对角线左边的那条。
//Eating action from $board[$x][$y]
$board[$x-1][$y+1] = 0; //It's been eaten!
$board[$x-2][$y+2] = $board[$x][$y]; // This space is occupied
所以你可以从用户那里得到一个输入,包括他想要移动的部分,以及他想做什么样的动作(我假设,你只会允许正确的动作,所以我不会进入那)。如果您从表单提交中读取它,例如,您可以将移动,位置和播放器(用于方向)作为$_POST
变量。
然后根据这些值修改$board
数组。为此,您可以使用条件或开关,这取决于您。
$way = ($_POST['player'] === 'up')? 1:-1;
最后一行将允许您为移动重复使用相同的代码,将您必须添加的值乘以$way
变量以将其添加到新位置。例如,沿对角线向左走:
//if player is 'up' then the value of $way is 1 so
$board[$x+(-1*$way)][$y+(1*$way)] = $board[$x][$y]; // 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[$x][$y]; // position 2,2 becomes 3,1
这应该给你一个起点,所有代码都没有经过测试,所以我猜可能会有一些拼写错误。
<强>更新强>
如果你想要的只是从X,Y移动到X 1 Y 1 那么:
$board[$var3][$var4] = $board[$var1][$var2];
$board[$var1][$var2] = 0;
就是你所需要的一切。 :)
答案 1 :(得分:1)
您可以使用坐标访问电路板的每个字段:
$array[$y][$x]
所以,如果你想提升一些东西,你可以这样做:
$array[$y-1][$x] = $array[$y][$x];
$array[$y][$x] = 0;
答案 2 :(得分:1)
我想首先应该用1和2填充与每种类型的瓷砖相对应的单元格。然后,您可以将数字3和4分配给加冕的数字。
1.你可以问每个玩家例如盯着x,y和结束x,y
然后,为了进行动作,首先需要检查是否允许。显然,为玩家1开始$ array [$ x] [$ y]应该包含1.然后你需要为此制定规则,例如,如果你是玩家1,你只能从$ array [$ x] [$ y ]到$ array [$ x-1] [$ x-1],$ array [$ x-1] [$ y * 1]等当你想去的地方是空的(装满0)然后你可以检查如果允许更复杂的动作就像吃其他玩家牌一样(例如,如果你是玩家1则需要检查$ array [$ x-2] [$ y-2]等于0和$ array [$ x-1] [$ y-1]等于2.然后对你应该写的加冕的那些进行一系列更复杂的验证。(除了总是记住你在数组维度的范围内移动)。
最后,您应该更改应使用相应新值修改的数组单元格。