我在逐步计算PHP中的值时遇到问题。
这只是一个例子。用户可以升级,当他达到level 5
时,他可以解锁执行任务的能力。新生成的任务的难度由一个数字定义:从1
这是一个简单的任务到10
,这是一项非常艰巨的任务。见表:
o 5: 1, 1, 2, 2, 3, 3, 3, 3, 3, 3 and so on
o 6: 1, 2, 2, 2, 3, 3, 3, 3, 3, 3
o 7: 2, 2, 2, 3, 3, 3, 3, 3, 3, 3
o 8: 2, 2, 3, 3, 4, 4, 4, 4, 4, 4
o 9: 2, 3, 3, 4, 4, 4, 4, 4, 4, 4
o 10: 3, 3, 4, 4, 5, 5, 5, 5, 5, 5
o 11: 3, 4, 4, 5, 6, 6, 6, 6, 6, 6
o 12: 4, 4, 5, 6, 7, 7, 7, 7, 7, 7
o 13: 4, 5, 6, 7, 8, 8, 8, 8, 8, 8
o 14: 5, 6, 7, 8, 9, 9, 9, 9, 9, 9
o 15: 6, 7, 8, 9, 10, 10, 10, 10, 10, 10
o 16: 7, 8, 9, 10, 10, 10, 10, 10, 10, 10
o 17: 8, 9, 10, 10, 10, 10, 10, 10, 10, 10
o 18: 9, 10, 10, 10, 10, 10, 10, 10, 10, 10
o 19: 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
o 20: same as 19
这意味着:在level 5
中,第一个任务是非常容易(难度1),第二个任务也是如此,第三个任务是难度2 。当玩家为level 18
时:第一个任务难度 9 ,第二个任务和后续任务难以 10 。
<?php
$current_player_level
$current_mission_in_level
?>
所以:
<?php
$current_player_level=8;
$current_mission_in_level=3;
//This should return: 3
?>
所以我需要一个能够在提供上述两个变量时返回难度的函数。
我没有任何代码,因为我不知道如何开始。
答案 0 :(得分:2)
我建议将困难存储在二维数组中(有时也称为“矩阵”)。代码看起来像这样:
$matrix_val = array(5 => array(1, 1, 2, 2, 3),
6 => array(1, 2, 2, 2, 3),
7 => array(2, 2, 2, 3, 3),
8 => array(2, 2, 3, 3, 4),
9 => array(2, 3, 3, 4, 4),
10 => array(3, 3, 4, 4, 5),
11 => array(3, 4, 4, 5, 6),
12 => array(4, 4, 5, 6, 7),
13 => array(4, 5, 6, 7, 8),
14 => array(5, 6, 7, 8, 9),
15 => array(6, 7, 8, 9, 10),
16 => array(7, 8, 9, 10, 10),
17 => array(8, 9, 10, 10, 10),
18 => array(9, 10, 10, 10, 10),
19 => array(10, 10, 10, 10, 10));
然后你所要做的就是:
$difficulty = $matrix_val[$current_player_level][$current_mission_in_level];
注意:“当前级别任务”假设0是第一个索引。因此,第13级中的第三个任务将被引用为$matrix_val[13][2]
(注意[2]
)。如果你想转移它,你可以为每个级别添加单独的键,或者只是在每个内部数组的开头“填充”无意义的条目。 (如果这令人困惑,请告诉我,我会扩大。)
作为参考,请查看official Array PHP documentation,然后您也可以read up on 2-dimensional arrays。
答案 1 :(得分:1)
你应该使用数组。
您可以使用2D数组(如表格)存储您的关卡和难度,然后根据您想要的位置获得正确的值。
例如:
$table = array(
5 => array(1, 1, 2, 2, 3),
6 => array(1, 2, 2, 3, 3),
7 => array(2, 2, 3, 3, 4)
);
我没有在这里显示所有数组。
因此,如果你想知道例如difficuly,你可以使用:
$current_difficulty = $table[$current_player_level][$current_mission_in_level];
这里没有太多数学,只知道arrays。
答案 2 :(得分:1)
// Filling 2D array with linear gradient from left top to right bottom
// There are some math for this. But i'm not sure it is needed
$MIN = 5.0; // min difficalty
$MAX = 9.0; // max difficalty
$M = 15.0; // Level legnth - 1
$N = 7.0; // Levels count -1
$res = array();
for($y = 0; $y <= $N; $y++)
for($x = 0; $x <= $M; $x++)
{
$y1 = ($N*$y-$M*$x+$M*$M)*$N/($M*$M+$N*$N);
$res[$N-$y][$x] = round($MAX - $y1/$N*($MAX-$MIN));
}
for($i=0; $i <= $N; $i++) {
$line = $res[$i];
echo implode(' ', $line)."\n";
}
输出:
5 5 5 6 6 6 6 7 7 7 7 7 8 8 8 8
5 5 6 6 6 6 6 7 7 7 7 8 8 8 8 8
5 5 6 6 6 6 7 7 7 7 7 8 8 8 8 8
5 6 6 6 6 6 7 7 7 7 7 8 8 8 8 9
5 6 6 6 6 7 7 7 7 7 8 8 8 8 8 9
6 6 6 6 6 7 7 7 7 7 8 8 8 8 9 9
6 6 6 6 6 7 7 7 7 8 8 8 8 8 9 9
6 6 6 6 7 7 7 7 7 8 8 8 8 9 9 9