【发布时间】:2011-05-26 23:16:41
【问题描述】:
我正在创建一个锦标赛括号创建脚本,但我遇到了玩家人数非 2 的锦标赛。例如,它目前适用于 2、4、8、16、32,。 .. 等等。但是对于 3、5、6、7... 我很难过!
这是我目前所拥有的:
$numrows = 8; // Currently for Testing.
draw_bracket($numrows);
function draw_bracket($numplayers)
{
draw_series_container();
draw_bracket_layer($numplayers, 0);
draw_series_container_end();
}
/* RECURSION, YO! */
function draw_bracket_layer($numplayers, $layer)
{
$levels = floor(log($numplayers, 2));
if ($layer == $levels - 1)
{
draw_player_box();
draw_player_box();
}
else
{
draw_series_container();
draw_bracket_layer($numplayers, $layer + 1);
draw_series_container_end();
draw_series_container();
draw_bracket_layer($numplayers, $layer + 1);
draw_series_container_end();
}
}
我假设我们需要更多的“基本案例”。或者可能更多的 if 语句用于这些关闭的情况。
函数 draw_series_container() 和 draw_player_box 只是用 HTML 代码填充。如果我们需要,我可以给他们看。
有人可以先给我一个 5 或 6 人的支架吗?
谢谢!
【问题讨论】:
-
请解释一下这个公式:
$levels = floor(log($numplayers, 2));- 你真的是说natural logarithm?为什么级别数取决于对数?看起来很奇怪。 -
我从这里得到的:stackoverflow.com/questions/1294412/…。我不完全确定它为什么起作用……但测试多达 32 个表明它确实有效。 :P