見出し画像

PowerShellで脳トレゲーム(クレペリン検査)

PowerShellで脳トレゲームを作ってみました。

クレペリン検査です。


クレペリン検査とは

 一桁の数字を順番に足し算していくという単純作業を行い「能力特徴」と「性格特徴」を測る検査のことです。最近は聞かないのですが、昔は採用試験でよく使われていました。採用試験に使うくらいですから脳トレにもいいかも、と思って作ってみました。
検査はこんな感じです。
1 6 9 4 8 9 5 4 5 8 6 6 7 7 3 9 8 2 7 2 3 が問題だったら計算して
 7 5 3 2 7 4 9 9 3 4 2 3 4 0 2 7 0 9 9 5 と解答します。
数字の列が出てくるので隣り合う2つの数字を足して、答えの一の位を回答していく検査です。
足し算なので簡単そうに思うでしょうけど100問くらいやると結構疲れます。


こんなゲーム

 PowerShellのコンソール画面で遊びます。表示は文字のみ。
遊ぶときはコードをPowerShellコンソールに都度都度貼り付けて遊ぶか、後説する独自コマンドに登録しておいて、仕事中にコッソリ遊びます。
(コンソール上のゲームなので楽しくないかも)

問題がこれだと
1 6 9 4 8 9 5 4 5 8 6 6 7 7 3 9 8 2 7 2 3
回答するときは
7、スペース、5、スペース、3、スペース、2、スペース、7、
というように入力していき、一列終わったら、エンターキーを押します。

function Kraepelin() {

    # ゲームスタート画面
    # ゲーム説明
    write-host "***** ***** ***** *****"
    write-host "***** クレペリン検査"
    write-host "***** ***** ***** *****"
    # メニュー画面
    # ゲームをする、スコアを見る
    while($True){
        $input_ = read-host "1:遊ぶ 9:やめる >"
        if($input_ -eq "1"){
            write-host "1:遊ぶ"
            play_Kraepelin
        } elseif($input_ -eq "9"){
            write-host "9:やめる"
            break
        }
    }
}

function play_Kraepelin() {

    # 総正解数
    $total_correct_cnt = 0
    # 総プレイ時間
    $total_playtime = 0
    # 総回答数
    $total_answerslist_cnt = 0
    # 一列の問題数
    $questions_cnt = 20
    # 総問題数
    $total_questions_cnt = 20

    write-host ""
    write-host "問題の数字列が表示されたら、隣り合う数字の合計値の一の位を入力してスペースキーを押してください。"
    write-host "「3 6 7 8 2」と並んでいたら3+6 6+7 7+8 8+2と計算して「9 3 5 0」と入力します。"
    write-host "一列入力したらEnterを押します。入力は半角小文字です。"
    write-host ""

    #問題の繰り返し回数
    $playloop_cnt = 0
    while(-not (($playloop_cnt -ge 1) -and ($playloop_cnt -le 4))){
        $playloop_cnt = [int](read-host "問題数を選んでください 1=20問 2=40問 3=60問 4=80問>")
    }
    write-host "$($playloop_cnt * $questions_cnt) 問) "
    read-host "Enterキーを押すと始まります>"


    # ゲームを始めた時間
    $start_date = Get-Date 

    for($i = 0;$i -lt $playloop_cnt;$i++) {

        # 問題作成
        $randomlist = Get-Random ((1..9)*(($questions_cnt/10)+1)) -count ($questions_cnt+1)

        # 問題一覧と解答一覧を作る
        $problemslist = ""  # 問題一覧
        $answerslist = @()  # 解答一覧 

        # 表示用問題を作成、解答を計算する
        $oldnum=-1
        foreach($j in $randomlist){
          $problemslist+=" $j"
          if($oldnum -ne -1){ 
            $answerslist+=[Math]::abs($oldnum+$j)%10
          }
          $oldnum=$j
        }

        # 問題を表示
        Write-host " $problemslist"

        # 解答入力
        $input_ = read-host ">"

        write-host "  " -noNewline

        $correct_cnt = 0  # 正解数
        $answerslist_cnt = 0  # 解答数と問題数の少ない方(ループ)
        if($answerslist.length > $input_.split(" ").length){
            $answerslist_cnt = $input_.split(" ").length
        } else {
            $answerslist_cnt = $answerslist.length
        }
        # 正誤判定
        for($j=0;$j -lt $answerslist_cnt;$j++) {
            if($answerslist[$j] -eq $input_.split(" ")[$j]){
                write-host " o" -noNewline
                $correct_cnt+=1
            } else {
                write-host " x" -noNewline
            }
        }

        write-host " "
        write-host " "
        
        # 総正解数
        $total_correct_cnt+=$correct_cnt

    }

    # 総プレイ時間
    $total_playtime+=(Get-Date) - ($start_date)
    $total_playtime = [Math]::Round($total_playtime.TotalSeconds,2)

    # 正解率計算
    $score = ( $total_correct_cnt / ($questions_cnt*$playloop_cnt) ) * 100
    $score = [Math]::Round($score,2, [MidpointRounding]::AwayFromZero)
    write-host ""
    write-host "正解数$total_correct_cnt 正解率$score% タイム $total_playtime 秒 1問当たり$($total_playtime/($questions_cnt*$playloop_cnt))秒"

    return
}


Kraepelin



いつでも遊べるようにするには

 PowerShellに独自のコマンドレットを追加することができるので下の記事を参考に追加するといつでも遊べるようになります


#PowerShell #コマンドレット #プログラミング初心者 #プログラミング学習 #脳トレ #クレペリン #つくってみた


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?