制限時間内のキー入力検査
Posted feedbacks - Ruby
curses初めて使いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | require 'curses'
require 'timeout'
def inputChecker(n, str)
Curses.init_screen
Curses.setpos(0, 0)
Curses.addstr("input(#{str}) => ")
Curses.refresh
result = nil
begin
input = ""
c = Curses.getch.chr
timeout(n){
until c == "\n"
input += c
c = Curses.getch.chr
end
result = input == str ? "OK" : "NG"
}
rescue Timeout::Error
result = "TIME OUT"
end
Curses.setpos(1, 0)
Curses.addstr("result => #{result}")
Curses.refresh
end
inputChecker(5, "ABCDEF")
|
僕も6番思いっきりシカトでした。 3回連続実行も。これで大丈夫と思うのですが。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | require 'curses'
def inputChecker(n, str)
Curses.addstr("input(#{str}) => ")
Curses.refresh
input = ""
timeout = false
until (c = Curses.getch.chr) == "\n"
timer ||= Thread.new{ sleep(n); timeout = true }
input += c
end
result = timeout ? "TIME OUT" : input == str ? "OK" : "NG"
Curses.setpos(Curses.stdscr.cury+1, 0)
Curses.addstr("result => #{result}")
Curses.refresh
Curses.setpos(Curses.stdscr.cury+2, 0)
end
if __FILE__ == $0
Curses.init_screen
3.times{ inputChecker(5, "ABCDEF") }
Curses.close_screen
end
|





raynstard
#3420()
Rating0/2=0.00
関数 InputCheckerは、以下の仕様を満たしてください。
たとえば、「InputCheker(5, "ABCDEF")」と指定した場合、 出力例はこんな感じです。
1. input(ABCDEF) =>と出力して入力待ちをし、ユーザーが「ABCDEF<ENTER>」を入力したとき、 入力開始から5秒以内ならば「OK」、5秒をこえていれば「TIME OUT」を出力します。 このとき、ユーザーがキーを押下しなければ1. を出力してから たとえ10秒たっていても「TIME OUT」にはならないので注意してください。 時間計測はあくまでユーザーが入力を開始してからです。
このお題はraynstardさんの投稿です。ご協力ありがとうございます。
[ reply ]