Typing.ps1
#===============================================================================
# Typing: CNNの記事(RSS)を利用してタイピング練習する
#
# パラメータ
# なし
# 使用例
# PS > Typing
#
# copyright HIRO's.NET(http://hiros-dot.net/)
#===============================================================================
function global:Typing
{
#===============================================
# 初期化処理
#===============================================
#背景色を保存
$bgclr = $host.UI.RawUI.BackgroundColor
#前景色を保存
$fgclr = $host.UI.RawUI.ForegroundColor
#問題の色を定義
$questioncolor = [System.ConsoleColor]::Red
$rss_list = @(
@("Top Stories","http://rss.cnn.com/rss/cnn_topstories.rss"),
@("World", "http://rss.cnn.com/rss/edition_world.rss"),
@("Africa","http://rss.cnn.com/rss/edition_africa.rss"),
@("Americas","http://rss.cnn.com/rss/edition_americas.rss"),
@("Asia","http://rss.cnn.com/rss/edition_asia.rss"),
@("Europe","http://rss.cnn.com/rss/edition_europe.rss"),
@("Middle East","http://rss.cnn.com/rss/edition_meast.rss"),
@("U.S.","http://rss.cnn.com/rss/edition_us.rss"),
@("World Business","http://rss.cnn.com/rss/edition_business.rss"),
@("Technology","http://rss.cnn.com/rss/edition_technology.rss"),
@("Science & Space","http://rss.cnn.com/rss/edition_space.rss"),
@("Entertainment","http://rss.cnn.com/rss/edition_entertainment.rss"),
@("World Sport","http://rss.cnn.com/rss/edition_sport.rss"),
@("Football","http://rss.cnn.com/rss/edition_football.rss"),
@("Travel","http://rss.cnn.com/rss/edition_travel.rss"),
@("Video","http://rss.cnn.com/rss/cnn_freevideo.rss"),
@("Most Recent","http://rss.cnn.com/rss/cnn_latest.rss"),
@("Art of Life Blog","http://rss.cnn.com/rss/edition_artoflife.rss"),
@("Business Traveller Blog","http://rss.cnn.com/rss/edition_richardquest.rss"),
@("In the Field Blog","http://rss.cnn.com/rss/edition_inthefield.rss"),
@("World's Untold Stories Blog","http://rss.cnn.com/rss/edition_untoldstories.rss"),
@("The Screening Room Blog","http://rss.cnn.com/rss/edition_screeningroom.rss"),
@("Marketplace Middle East Blog","http://rss.cnn.com/rss/edition_mme.rss"),
@("Inside the Middle East Blog","http://rss.cnn.com/rss/edition_ime.rss")
)
Write-Host "タイピング練習の問題カテゴリーを選択してください"
for ( $icnt = 0; $icnt -lt $rss_list.Length; $icnt++)
{
Write-Host $($($icnt + 1).ToString("0#") + ": " + $rss_list[$icnt][0])
}
#ユーザーが選択したカテゴリ番号を保存
$no = Read-Host
if ( $([int]$no) -le 0 -and $([int]$no) -gt $rss_list.Length )
{
Write-Host "Noを正しく入力してね"
return
}
Write-Host "データダウンロード中..."
$feed = [xml](new-object system.net.webclient).downloadstring($rss_list[$no - 1][1])
$contents =$($feed.rss.channel.item | Select-Object -property DESCRIPTION)
Write-Host "データダウンロード完了"
foreach ( $content in $contents )
{
$a += $content.Description.split(" ")
}
Write-Host "[Enter]キーを押すと始まります"
Read-Host
$start = Get-Date
$i = 0
$score = 0
$miss = 0
#背景色を黒にする
$host.UI.RawUI.BackgroundColor = [System.ConsoleColor]::Black
cls
while ( $(Get-Date).subtract($start).TotalSeconds -lt 60)
{
#問題を出す
if ( $a[$i] -ne " ")
{
Write-Host $a[$i] -foregroundcolor $questioncolor
#ユーザーからの回答入力を取得する
$Host.UI.RawUI.ForegroundColor = $fgclr
$input = Read-Host
cls
#正解したらスコアをカウントアップ
if ( $input -ceq $a[$i] )
{
$score += 10
}
else
{
$miss++;
Write-Host "`a"
cls
}
}
$i++
#問題がなくなったら終了
if ($a.Length -eq $i )
{
break;
}
}
Write-Host $("start: " + $start)
Write-Host $("end: " + $(Get-Date))
Write-Host $("Score: " + $Score)
Write-Host $("Miss:" + $miss)
}