我想要什么?
我想要在 PHP 中返回一个网格 (9x9) 中生成路径数组的函数或类/方法,请参阅(代码:带路径的网格)。这是条件:
我有什么?
需要额外信息?
如果您需要额外的信息或有什么不清楚的地方?请问我。谢谢!
代码:空网格:
array(
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
)
代码:带路径的网格(1 = 开始,8 = 结束):
array(
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 3, 0, 2, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(6, 0, 0, 7, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
array(0, 0, 0, 8, 0, 0, 1, 0, 0),
array(5, 0, 0, 0, 4, 0, 0, 0, 0),
array(0, 0, 0, 0, 0, 0, 0, 0, 0),
)
最佳答案
这应该让你开始(在 http://tinker.bit-nibble-byte.com/grid.php 放置了一个演示)
请原谅替代语法,我讨厌大括号。
<style>
td {
width: 30px;
height: 30px;
font-size: 15px;
text-align: center;
}
td.S {
color: black;
background-color: orange;
}
td.D {
color: black;
background-color: #44c;
}
td.R {
color: black;
background-color: #c44;
}
td.U {
color: black;
background-color: #cc4;
}
td.L {
color: black;
background-color: #4c4;
}
td.E {
color: black;
background-color: #c4c;
}
</style>
<?php
$data = pathField(50, 25, 50, 10);
dumpField($data['FIELD']);
dumpCoor($data['COOR']);
/**
* @param int $width Width of the playing field
* @param int $height Height of the playing field
* @param null $steps Number of direction changes
* @param int $legChange Odds of changing direction (1-99)
* #param null $minLegLength Minimum length of a straight line (or until it hits a wall)
* @param null $startX Start X Position
* @param null $startY Start Y Position
* @return array
*/
function pathField($width = 10, $height = 10, $steps = null, $legChange = 50, $minLegLength = 3, $startX = null, $startY = null)
{
$coord = array(); // Coordinates where direction was changed
if (!$startX):
$startX = rand(1, $width); // Random X start position
endif;
if (!$startY):
$startY = rand(1, $height); // Random Y start position
endif;
if (!$steps):
$steps = $width * $height; // Will cause run until "painted in a corner"
endif;
$coord[] = array('X' => $startX, 'Y' => $startY); // Set First/Start coordinate
$field = array_fill(1, $height, array_fill(1, $width, null)); // Create the empty playing field
$field[$startY][$startX] = 'S'; // Flag start position
$pos = array('X' => $startX, 'Y' => $startY, 'D' => null, 'L' => $minLegLength + 1); // Set current position
while (count($coord) < $steps): // Go until we have enough steps
$go = array ( // Calculate the directions positions for
'left' => (($pos['X'] - 1) < 1) ? $width : ($pos['X'] - 1), // Left
'right' => (($pos['X'] + 1) > $width) ? 1 : ($pos['X'] + 1), // Right
'up' => (($pos['Y'] - 1) < 1) ? $height : ($pos['Y'] - 1), // Up
'down' => (($pos['Y'] + 1) > $height) ? 1 : ($pos['Y'] + 1), // Down
);
$validMoves = array(); // Reset valid moves
if ($field[$pos['Y']][$go['left']] == null): // Check if we can move left
$validMoves['L'] = array(
'X' => $go['left'],
'Y' => $pos['Y'],
'D' => 'L',
'P' => rand(1,$width)
);
endif;
if ($field[$pos['Y']][$go['right']] == null): // Check if we can move right
$validMoves['R'] = array(
'X' => $go['right'],
'Y' => $pos['Y'],
'D' => 'R',
'P' => rand(1,$width)
);
endif;
if ($field[$go['up']][$pos['X']] == null): // Check if we can move up
$validMoves['U'] = array(
'X' => $pos['X'],
'Y' => $go['up'],
'D' => 'U',
'P' => rand(1,$height)
);
endif;
if ($field[$go['down']][$pos['X']] == null): // Check if we can move down
$validMoves['D'] = array(
'X' => $pos['X'],
'Y' => $go['down'],
'D' => 'D',
'P' => rand(1,$height)
);
endif;
if (count($validMoves) == 0): // If there are no valid moves, it means...
break; // Painted myself into a corner!
endif;
// Keep going in the same direction or are we changing?
if (array_key_exists($pos['D'], $validMoves) && (($pos['L'] < $minLegLength) || (rand(1, 100) < $legChange))):
$moveDir = $validMoves[$pos['D']]; // Get Last Direction
$pos['L']++; // Increase Leg Length
else:
$moveDir = $validMoves[array_rand($validMoves, 1)]; // Get A Random Direction
endif;
// If we're changing directions record the point in the coordinate array
if ($moveDir['D'] != $pos['D']):
$coord[] = array(
'X' => $moveDir['X'],
'Y' => $moveDir['Y']
);
$pos['L'] = 1; // Reset leg Length
endif;
// Update our current position
$pos = array('X' => $moveDir['X'], 'Y' => $moveDir['Y'], 'D' => $moveDir['D'], 'L' => $pos['L']);
// Update the playing field
$field[$pos['Y']][$pos['X']] = $moveDir['D'];
endwhile;
$field[$pos['Y']][$pos['X']] = 'E'; // Flag the end point
return array('FIELD' => $field, 'COOR' => $coord); // Return the fields and the coors
}
function dumpCoor(array $coor)
{
foreach($coor as $point):
echo $point['X'] . ', ' . $point['Y'] . '<br>';
endforeach;
}
function dumpField(array $field)
{
$height = count($field);
$width = count($field[1]);
echo $width . 'x' . $height;
echo "<table border='1'>";
foreach ($field as $key => $row):
echo "<tr>";
foreach ($row as $key => $cell):
if ($cell):
echo "<td class=\"$cell\">$cell</td>";
else:
echo "<td> </td>";
endif;
endforeach;
echo "</tr>";
endforeach;
echo "</table>";
}
关于php - 在网格中生成随机坐标路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26381569/
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa
我想从rubyrake脚本运行一个可执行文件,比如foo.exe我希望将foo.exe的STDOUT和STDERR输出直接写入我正在运行rake任务的控制台.当进程完成时,我想将退出代码捕获到一个变量中。我如何实现这一目标?我一直在玩backticks、process.spawn、system但我无法获得我想要的所有行为,只有部分更新:我在Windows上,在标准命令提示符下,而不是cygwin 最佳答案 system获取您想要的STDOUT行为。它还返回true作为零退出代码,这可能很有用。$?填充了有关最后一次system调
Organization和Image具有一对一的关系。Image有一个名为filename的列,它存储文件的路径。我在Assets管道中包含这样一个文件:app/assets/other/image.jpg。播种时如何包含此文件的路径?我已经在我的种子文件中尝试过:@organization=...@organization.image.create!(filename:File.open('app/assets/other/image.jpg'))#Ialsotried:#@organization.image.create!(filename:'app/assets/other/i
我想在ruby中生成一个64位整数。我知道在Java中你有很多渴望,但我不确定你会如何在Ruby中做到这一点。另外,64位数字中有多少个字符?这是我正在谈论的示例......123456789999。@num=Random.rand(9000)+Random.rand(9000)+Random.rand(9000)但我认为这是非常低效的,必须有一种更简单、更简洁的方法来做到这一点。谢谢! 最佳答案 rand可以将范围作为参数:pa=rand(2**32..2**64-1)#=>11093913376345012184putsa.
fruit=["apple","red","banana","yellow"]=>["apple","red","banana","yellow"]Hash[*fruit]=>{"apple"=>"red","banana"=>"yellow"}为什么splat会导致数组被如此整齐地解析为Hash?或者更准确地说,Hash如何“知道”“apple”是键,“red”是其对应的值?仅仅是因为它们在水果数组中的位置是连续的吗?这里使用splat有关系吗?否则哈希不能直接从数组中定义自己吗? 最佳答案 作为documentation状态:H
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIgeneratealistofnuniquerandomnumbersinRuby?我想做的事:Random.rand(0..10).timesdoputsRandom.rand(0..10)end但如果随机数已经显示过,则无法再次显示。如何最轻松地做到这一点?
我试图在每次运行时以随机顺序将一个名称数组拆分为多个数组。我知道如何拆分它们:name_array=["bob","john","rob","nate","nelly","michael"]array=name_array.each_slice(2).to_a=>[["bob","john"],["rob","nate"],["nelly","michael"]]但是,如果我希望它每次都以随机顺序吐出它们怎么办? 最佳答案 在做同样的事情之前,打乱数组。(Array#shuffle)name_array.shuffle.each_s