見出し画像

バッチファイルでタイピング練習

するコードを書いてみました。
最初に、文字を登録するとテキストファイルが仕上がり、それを読み込んでタイプを練習するだけです。
ダラダラ書くのは嫌いなので、コードは下にあります。

YouTubeにもアップしていますので、暇な方はどうぞ。

@echo off
chcp 65001 >nul

setlocal enabledelayedexpansion

echo Showing contents of ty1.txt:
type ty1.txt
pause

:input_loop
REM ユーザーにアルファベットの入力を促す
set /p char=文字を入力してください (終了するには'x'を入力): 

REM 入力が'x'の場合、入力フェーズを終了
if /i "%char%"=="x" goto read_file

REM 入力されたアルファベットをty1.txtに追加
if defined char (
    if exist ty1.txt (
        (echo,%char%)>> ty1.txt
    ) else (
        echo,%char%> ty1.txt
    )
)

goto input_loop

:read_file
REM ty1.txtの内容を読み込む
set "file=ty1.txt"
set "chars="

if exist "%file%" (
    for /f "tokens=1,* delims=," %%A in (%file%) do (
        set "chars=!chars!%%A,"
        if defined chars (set "chars=!chars!%%B")
    )
) else (
    echo %file%が見つかりません。
    exit /b
)

REM カンマで区切られた文字列を配列に分割
set "chars_list="
set "len=0"
for %%C in (%chars%) do (
    set /a len+=1
    call set "chars_list=%%chars_list%% %%C"
)

:quiz_loop
REM ランダムに1つの文字を選択
set /a "rand=!random! %% len"
set /a "index=0"

for %%D in (%chars_list%) do (
    if "!index!"=="!rand!" (
        set "random_char=%%D"
        goto ask
    )
    set /a index+=1
)

:ask
echo.
echo ランダムに選ばれた文字: !random_char!
set /p user_input=同じ文字を入力してください (終了するには'x'を入力): 

REM 終了判定
if /i "%user_input%"=="x" goto end

REM 正誤判定
if "%user_input%"=="!random_char!" (
    echo 正解です!
) else (
    echo 不正解です。正しい文字は !random_char! です。
)

goto quiz_loop

:end
echo 終了します。
pause
endlocal

いいなと思ったら応援しよう!