加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在多维数组中运动

发布时间:2020-12-13 17:05:04 所属栏目:PHP教程 来源:网络整理
导读:我有这个数组,我用表格显示如何使用用户输入进行移动 当前为每个数组分配0但我计划为数组分配其他值: 我的问题是 – 如何使用用户输入在阵列中向上,向下,向右,向左和向下移动 Array ( [0] = Array ( [0] = 0 [1] = 0 [2] = 0 [3] = 0 [4] = 0 [5] = 0 [6] =
我有这个数组,我用表格显示如何使用用户输入进行移动
当前为每个数组分配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),array(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>";

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

解决方法

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

>左上角
>右上
>左上 – 左上
>右上 – 右上

请注意,列表中的最后两个元素是一个吃另一个元素的元素.一旦你知道你可以获取该片的当前位置并将其移动到新片.我将假设对于普通棋子你会使用“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

这应该给你一个起点,所有代码都没有经过测试,所以我猜可能会有一些错别字.

UPDATE

如果你想要的只是从X,Y移动到X1Y1那么:

$board[$var3][$var4] = $board[$var1][$var2];
$board[$var1][$var2] = 0;

是你所需要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读