PowerShellでサイコロを作ってみよう【初級編】

PowerShellはWindows環境で強力に動作するシェルスクリプト言語です。

初心者でも簡単に扱える一方、変数操作や条件分岐、ループなどプログラミングの基本を学ぶのにも最適です。

本記事では、PowerShellを使って「サイコロを振る」シンプルなスクリプトを作成しながら、基本的な構文や組み立て方を学びます。最後には演習問題も用意していますので、ぜひ挑戦してみてください。


前提条件

  • Windows 10/11 がインストールされていること
  • PowerShell(バージョン5.1以上)が使えること
  • テキストエディタ(VS Code、メモ帳など)が使えること

サイコロとは?

サイコロは1から6までの目がランダムに出る立方体の遊具です。

プログラムで再現するには「乱数」を使って、1〜6の範囲で数値を生成します。

PowerShellでは Get-Random コマンドレットが乱数生成に便利です。

本記事では主に変数と Get-Random、Write-Host を使います。


サイコロスクリプトの作成

以下のコードをテキストエディタに貼り付け、DiceRoll.ps1 という名前で保存してください。

# DiceRoll.ps1
# PowerShellでサイコロを振るスクリプト(初級編)

param(
    [int]$Rolls = 1  # 振る回数(デフォルト1回)
)

# サイコロの目を格納する配列
$resultList = @()

for ($i = 1; $i -le $Rolls; $i++) {
    # 1〜6の乱数を取得
    $roll = Get-Random -Minimum 1 -Maximum 7
    $resultList += $roll
    Write-Host "Roll #$i: $roll"
}

# 合計と平均を計算して表示
$total = ($resultList | Measure-Object -Sum).Sum
$average = [math]::Round($total / $Rolls, 2)
Write-Host "`n=== 結果 ==="
Write-Host "合計: $total"
Write-Host "平均: $average"

スクリプト解説

  1. param ブロック
    スクリプト実行時にオプションを受け取る。ここでは $Rolls に振る回数を指定可能。
  2. 配列の初期化
    @() で空の配列 $resultList を作成。
  3. for ループ
    1 から $Rolls まで繰り返し、毎回 Get-Random -Minimum 1 -Maximum 7 で1〜6の乱数を生成。
  4. 結果の格納と表示
    生成した乱数を配列に追加し、Write-Host でコンソールに出力。
  5. 集計
    Measure-Object -Sum で合計を計算し、.NETの [math]::Round で平均を小数点以下2桁に丸めて表示。

スクリプトの実行方法

PowerShellを管理者権限で起動し、スクリプト保存先に移動して以下を実行します。

# 実行ポリシーを一時的に緩める(必要に応じて)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

# スクリプトを1回だけ振る
.\DiceRoll.ps1

# 5回振る
.\DiceRoll.ps1 -Rolls 5

カスタマイズのアイデア

  • 複数のサイコロを同時に振る:例えば2個のサイコロの合計を出すように変更。
  • 出目の分布をヒストグラム表示:各目の出現回数をカウントして棒グラフ風に表示。
  • GUI化:WindowsフォームやWPFを使ってボタン操作でサイコロを振る。

演習問題

  1. サイコロ2つを振って合計を表示
    2つの乱数を生成し、その合計を「ダイス1: x, ダイス2: y, 合計: z」の形式で表示するスクリプトを作成してください。
  2. 出目の分布を集計
    $Rolls 回振った後、1〜6のそれぞれの出現回数をカウントし、以下のように表示してください。 出目 回数 1 3 2 5 3 2 … …
  3. ヒストグラム風表示
    演習2の結果を利用し、回数分だけ“■”を並べて簡易ヒストグラムを表示するようにしてください。

解答例

演習1 解答例

param([int]$Rolls = 1)

for ($i = 1; $i -le $Rolls; $i++) {
    $d1 = Get-Random -Minimum 1 -Maximum 7
    $d2 = Get-Random -Minimum 1 -Maximum 7
    $sum = $d1 + $d2
    Write-Host "Roll #$i: ダイス1=$d1, ダイス2=$d2, 合計=$sum"
}

演習2 解答例

param([int]$Rolls = 10)

# カウント用ハッシュテーブル初期化
$countTable = @{1=0;2=0;3=0;4=0;5=0;6=0}

for ($i = 1; $i -le $Rolls; $i++) {
    $roll = Get-Random -Minimum 1 -Maximum 7
    $countTable[$roll]++
}

Write-Host "`n出目`t回数"
foreach ($key in 1..6) {
    Write-Host "$key`t$countTable[$key]"
}

演習3 解答例

param([int]$Rolls = 20)

# カウント用ハッシュテーブル初期化
$countTable = @{1=0;2=0;3=0;4=0;5=0;6=0}

for ($i = 1; $i -le $Rolls; $i++) {
    $roll = Get-Random -Minimum 1 -Maximum 7
    $countTable[$roll]++
}

Write-Host "`n出目`t回数`tヒストグラム"
foreach ($key in 1..6) {
    $bar = '■' * $countTable[$key]
    Write-Host "$key`t$countTable[$key]`t$bar"
}

まとめ

この記事では、PowerShellの基礎を学びながらサイコロを振るスクリプトを作成しました。

変数、ループ、乱数生成、配列操作、集計など、プログラミングの基本が詰まった内容です。

演習問題にもぜひ取り組み、PowerShellの楽しさと奥深さを体感してください!