多维数组内的运动

时间:2010-11-14 21:16:50

标签: php arrays

我有这个数组,我用表格显示如何使用用户输入进行移动 当前为每个数组分配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>";

我已经创建了一个用于保持分数的数据库,但这将在此之后完成

3 个答案:

答案 0 :(得分:2)

你需要定义游戏的可用移动,在这种情况下,从玩家的角度来看,你可以说玩家可以移动游戏:

  1. 左上方
  2. 右上方
  3. up-left-up-left
  4. 向上右上,右
  5. 请注意,列表中的最后两个元素是一个吃另一个元素的元素。一旦你知道你可以获取该片的当前位置并将其移动到新片。我将假设对于普通棋子你会使用“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.然后对你应该写的加冕的那些进行一系列更复杂的验证。(除了总是记住你在数组维度的范围内移动)。

最后,您应该更改应使用相应新值修改的数组单元格。