首页 > 解决方案 > 有什么办法可以改进这个 Powershell 数组洗牌方法吗?

问题描述

我开发了一套纸牌来在 Visio 上玩棋盘游戏,但我和我的朋友们“感觉”纸牌没有很好地洗牌。

我使用的代码如下(我简化了,但我对包含数字的卡片背面使用相同的算法,如果需要我可以添加它):

    # Actions
    $CONFIG_ACTIONS = @{
        "pool"=9
        "interim"=9
        "bis"=9
        "parc"=18
        "sell"=18
        "barrier"=18
    }
    $unshuffeledListAction = [System.Collections.ArrayList]@()
    foreach ($actionToAdd in $CONFIG_ACTIONS.Keys) {
        [int]$howManyTime = $($CONFIG_ACTIONS[$actionToAdd])
        for($i=0;$i -lt $howManyTime;$i++) {
            $unshuffeledListAction.Add($actionToAdd) | out-null
        }
    }
    # Request random number between 0 and 65535
    $requestURI = "https://qrng.anu.edu.au/API/jsonI.php?length=1&type=uint16"
    # Randomize Cards: Try WebService
    Try {
        $random = $(Invoke-RestMethod -Uri $requestURI -Method GET).data 
        $shuffeledListActions = $unshuffeledListAction | Get-Random -Count $unshuffeledListAction.Count -SetSeed ($random[0])       
    } Catch {
        Write-warning "Failed to called QRNG@ANU JSON API switching to local pseudo-random"
        $shuffeledListActions = $unshuffeledListAction | Get-Random -Count $unshuffeledListAction.Count
    }

我对安全没有特殊需求,因为这是供个人使用而没有敏感信息的,所以我可以使用 WebServices 并且我已经尝试过了。

我的第一次洗牌尝试很简单:

$shuffeledListActions = $unshuffeledListAction | Get-Random -Count $unshuffeledListAction.Count

可以改进吗?调用量子随机数生成器服务的第二次尝试是否更好?

标签: arrayspowershellrandom

解决方案


Get-Random -Count很好。我可能会完全放弃网络服务调用。PRNG 非常好,从其他地方获取种子在这里并没有太大变化。


推荐阅读