我正在编写一个函数来计算高尔夫球比赛的球员得分(不是标准的高尔夫球,而是自定义比赛)。
这是实际得分,洞的差点和球员的差点。
例如:如果玩家射击6,并且该玩家的差点为6且漏洞差距为4,则该玩家将在该洞获得5分。原因如下:
如果球员的差点小于或等于球洞的差点,则他们从实际得分中得到-1分。在18洞高尔夫球场上,球洞的差距在1到18之间。因此,如果球员的差点为18,他们将从每个洞的得分中获得-1分。因此,只要玩家的差点为18或更低,我就很容易理解。我遇到的问题是如果球员的差点超过18,如何计算这个数。一名球员的差点在1到99之间。
因此,如果一名球员的差点是21,他们将在所有18洞获得-1分。那些障碍的洞是1,2和& 3他们在这些洞上还会得到额外的-1分。因此,如果球员的差点是36,那么所有球洞的得分都会为-2分。
这是我到目前为止的功能:
function handicapCalc($hole,$player,$score){
if($player <= 18){
if($hole <= $player){
$finalScore=$score-1;
}else{
$finalScore=$score;
}
}else{
//FIGURE SCORE IF HANDICAP IS LARGER THEN 18
}
return $finalScore;
}
$ hole是球洞差点的变量,$球员是球员的差点&amp; $得分是玩家的得分。
我需要计算一个允许超过18的差点的计算。
感谢您提供任何帮助。
编辑[已解决]
function handicapCalc($holeHandicap,$playerHandicap,$holes,$score){
$perHoleHandicap=floor($playerHandicap/$holes);
$leftOvers=$playerHandicap % $holes;
if($perHoleHandicap >= 1){
$firstScore=$score-$perHoleHandicap;
if($leftOvers >= $holeHandicap){
$finalScore=$firstScore-1;
}else{
$finalScore=$firstScore;
}
}else{
if($perHoleHandicap >= $holeHandicap){
$finalScore=$score-1;
}else{
$finalScore=$score;
}
}
return $finalScore;
}
答案 0 :(得分:2)
如果我正确理解规则,你只需要一些模数:
per-hole-handicap: floor($player_handicap / $number_of_holes)
left_over_points = $player_handicap modulo $number_of_holes
e.g。
15岁的差点,打18洞:per-hole-handicap: floor(15/18) -> 0
left_over_points = 15 mod 18 -> 15
so you've got 15 points to distribute, giving a -1 for the first 15 holes
37洞的差点,打18洞:
per-hole-handicap: floor(37 / 18) -> floor(2.055) -> -2 points for all holes
left_over_points = 37 mod 18 -> 1 -> 1 extra point, so -1 for the first hole
答案 1 :(得分:1)
尝试此编辑后的变体
function handicapCalc($hole, $player, $score){
$finalScore = $score - floor($player / 18) -
((($player % 18) > 0 && ($player % 18) <= $hole) ? 1 : 0);
return $finalScore;
}