1

我需要的是创建五个随机整数(比如rand(1,5))。然后,我根据这些数字生成一个分数。例如,如果我得到 then 的结果,1,2,3,4,5那将等于零分,但如果我得到1,1,3,4,5那将是 1,因为我们有一对。类似于扑克类型的计分,因此相同数字的五个将是“满屋”,从而产生最高分。

即使只是数学方程式,我将如何处理评分系统?

更多详情:

1-5 将持有单独的图像,然后将与具有与用户相同的代码的“The House”进行战斗以确定获胜者。以下是一些平局示例和他们将获得的分数:

1,2,3,4,5 = score 0
1,1,2,3,4 = score 1 (1 pair)
1,1,2,2,4 = score 2 (2 pair)
1,1,1,3,4 = score 3 (3 of a kind)
1,1,1,1,5 = score 4 (4 of a kind)
1,1,1,3,3 = score 5 (full house)
1,1,1,1,1 = score 6 (5 of a kind)

数字组合是不敬的,如果他们得 6 分,而房子得 6 分,那就是平局。

    if (isset($_POST['play'])) {
    $rand1 = rand(1, 5);
    $rand2 = rand(1, 5);
    $rand3 = rand(1, 5);
    $rand4 = rand(1, 5);
    $rand5 = rand(1, 5);
    if ($_POST['bet'] <= $user_data['coins']) {
        if ($_POST['bet'] < 999999999) {
            if ($_POST['bet'] > 0.99) {
                if ($user_data['coins'] >= 1) {
                    $array = array($rand1,$rand2,$rand3,$rand4,$rand5);
                    print_r(array_count_values($array));
                    echo $rand1.', '.$rand2.', '.$rand3.', '.$rand4.', '.$rand5;

                    Array( // Here I don't understand
                    1 => 3,//
                    2 => 1,//
                    3 => 1 //
                    );
                }
            }
        }
    }   
}

这输出;数组 ( [5] => 2 [4] => 2 [1] => 1 ) 5, 5, 4, 4, 1

4

3 回答 3

5

为此使用 array_count_value 函数。

$array = array(1,1,1,2,5);

print_r(array_count_values($array));

Array(
1 => 3,
2 => 1,
3 => 1
);
于 2013-04-27T18:08:51.663 回答
1

如果范围很小,可以使用计数排序方法。对于每个数字,提供一个“桶”来计算一个数字出现的次数。扫描一次以填充存储桶。然后再次扫描,但这次是针对存储桶获取最高值。那是你的分数。

于 2013-04-27T18:06:29.593 回答
1

这是我会考虑的方法,以@Lele 的回答为基础。警告:这有点令人困惑,所以请坐下来喝杯茶。

  • 构建一组五个桶,[1]到[5],并扫描一个玩家的号码,使每个号码的计数存储在对应的桶中
  • 然后将剩下的数字计数到一个新的桶系统中,每个位置代表你对某物的计数。

所以,如果你的分数是这样的:

1 1 2 2 4

那么你的第一个桶是:

2 2 0 1 0

那是因为你有两个一、两个二和一个四。你的第二个桶是:

1 2 0 0 0

那是因为你有两个二数和一个一数。在这里,您忽略第一个位置(因为对某事进行一次计数不会得分)并为其他位置得分。所以,测试两个两个,然后给那个两个打分。

如果你的分数是这样的:

5 5 5 5 1

那么你的第一个桶是:

1 0 0 0 4

那是一一四五。所以你的第二个桶是:

1 0 0 1 0

您的查找表可能是:

x 1 0 0 0 -> one pair
x 2 0 0 0 -> two pairs
x 0 1 0 0 -> three of a kind
x 1 1 0 0 -> full house
x 0 0 1 0 -> four of a kind
x 0 0 0 1 -> five of a kind

'x' 表示你在这方面不匹配。因此,您的查找表将四个数字与一个分数相匹配。

我对这个问题很感兴趣,所以我写了一些代码来做上面的事情。你仍然需要做查找表,但这相对来说是微不足道的,对你来说是个好习惯。这是一个带有注释的演示(在此处运行代码):

<?php
    function counting(array $array) {
        // Input figures
        print_r($array);

        // Run the figures twice through the bucket-counter
        $firstBuckets = bucketCounter($array);
        $secondBuckets = bucketCounter($firstBuckets);

        // Ignore counts of 1
        array_shift($secondBuckets);

        // Output, just need to do the lookup now
        echo ' converts to ';
        print_r($secondBuckets);
        echo "<br />";
    }

    /**
     * Bucket counter
     */
    function bucketCounter(array $array) {
        $result = array(0, 0, 0, 0, 0, );
        foreach($array as $value) {
            if ($value > 0) {
                $result[$value - 1]++;
            }
        }

        return $result;
    }

    // Try some demos here!
    counting(array(1, 2, 3, 4, 5));
    counting(array(1, 1, 2, 4, 2));
    counting(array(1, 1, 1, 1, 1));

?>

我包含的演示似乎有效,但要寻找错误!

于 2013-04-27T20:46:06.943 回答