当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 周五乐趣 - 尝试一下 PowerShell

作者:精品下载站 日期:2024-12-14 07:44:12 浏览:14 分类:玩电脑

周五乐趣 - 尝试一下 PowerShell


[玩转系统] 周五乐趣 - 尝试一下 PowerShell

首先,抛硬币。

抛硬币本质上是一个对/错游戏。或者另一种看待方式是偶数/奇数。我最喜欢的方法是使用模运算符。

PS C:\> 5%2
1
PS C:\> 6%2
0

这些值可以表示为布尔值。

PS C:\> 5%2 -as [boolean]
True
PS C:\> 6%2 -as [boolean]
False

所以我需要的只是一个随机数并执行模运算。这是我创建的函数。

Function Invoke-CoinToss {

[cmdletbinding(DefaultParameterSetName="_AllParameterSets")]
Param(
[Parameter(ParameterSetName="Boolean")]
[switch]$AsBoolean,
[Parameter(ParameterSetName="EvenOdd")]
[switch]$EvenOdd
)

Write-Verbose "Using parameter set $($PSCmdlet.ParameterSetName)"

#get a random number between 1 and 100 to test
$i = Get-Random -Minimum 1 -Maximum 100
Write-Verbose "Random result = $i"

#use the modulo operator
if ($i%2) {
    Write-Verbose "Odd/Heads/True"
    Switch ($PSCmdlet.ParameterSetName) {
     "Boolean" { $True}
     "EvenOdd" {"Odd" }
     Default {"Heads"}
    } #switch
} #if
else {
    Write-Verbose "Even/Tails/False"
    Switch ($PSCmdlet.ParameterSetName) {
     "Boolean" { $False}
     "EvenOdd" {"Even" }
     Default {"Tails"}
    } #switch
} #else

} #end Invoke-CoinToss

我使用了一个有效的动词,但也会定义一个更用户友好的别名。

Set-Alias -Name Flip-Coin -Value Invoke-CoinToss

因为您可能需要几种不同类型的输出,这不一定是函数的最佳主意,但这可能是一个例外。请记住,这应该是有教育意义的,不一定是实用的。我的函数使用参数集,并根据参数集决定写入管道的结果类型。

[玩转系统] 周五乐趣 - 尝试一下 PowerShell

而且看起来效果很好。

[玩转系统] 周五乐趣 - 尝试一下 PowerShell

接下来,让我们掷骰子。我将再次使用 Get-Random 。一次掷骰子就这么简单:

get-random -Minimum 1 -Maximum 7

要掷多个骰子,您可以这样做:

$Dice = 4
1..$Dice | foreach {
 Get-Random -Minimum 1 -Maximum 7
 }

自然地,我编写了一个带有更多花哨功能的函数,因为我喜欢闪亮的玩具。

Function Invoke-Dice {

[cmdletbinding()]
Param(
[ValidateRange(1,10)]
[int]$Dice = 2,
[ValidateRange(6,12)]
[int]$Sides = 6,
[Alias("Total")]
[switch]$Sum
)

Write-Verbose "Rolling $dice $sides-sided dice"

#generate a list of all possible numbers then select all random numbers at once
$result = (1..$Sides)*$Dice | Get-Random -Count $Dice

if ($sum) {
    write-Verbose "Totaling the result"
    Write-Verbose $($result -join ",")
    ($result | Measure-Object -sum).Sum
}
else {
    $result
}

} #end roll-dice

Set-Alias -name Roll-Dice -value Invoke-Dice

此功能可让您选择要掷骰子的数量。请注意,我使用 ValidateRange 属性来限制骰子的数量。如果您正在玩《龙与地下城》游戏,其中有一些额外的骰子,我也给了您这个选项。

[玩转系统] 周五乐趣 - 尝试一下 PowerShell

在某些游戏中,您需要总数,因此我也添加了该总数。我改变的一件事是我的滚动技术。在此版本中,我预先生成所有可能值的数组,然后获取指定数量的随机值。

$result = (1..$Sides)*$Dice | Get-Random -Count $Dice

并不是说它非常关键,而是这种技术更快。

$dice = 8
$sides = 7
 Measure-Command {
  1..$Dice | foreach {
  Get-Random -Minimum 1 -Maximum ($sides+1)
  }
 }

 Measure-Command {
  (1..$Sides)*$Dice | Get-Random -Count $Dice
 }

这是结果

[玩转系统] 周五乐趣 - 尝试一下 PowerShell

如果您正在争论脚本或函数中的不同技术,请使用 Measure-Command 查看它们的执行情况。

现在您已经有了一些工具来构建您自己的 PowerShell 游戏,并且也许可以在这个过程中学到一些新东西。如果你这样做,我希望你能分享。享受!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯