ADVゲームぽいページャもどき on Ruby
ファイルを読み込んで、一文ごとにキー入力待ちしながら標準出力に出力するプログラムです。ただ端末に垂れ流すだけで大した機能はありませんが、ADVゲームぽい雰囲気が味わえます。
あ、そうそう、以下のプログラムは文字コードに依存していますので、文字コードをEUCとして保存してください。
#!/usr/bin/env ruby $KCODE = 'e' require 'kconv' def read_book(input) sepre = /(」|[。!?]+」?)/ book = [] Kconv.toeuc(input.read).gsub(/\r?\n/, "\r\n").split(sepre).each do |s| if s =~ sepre and book.size > 0 book[-1] << s else book << s end end book end def raw_term trap(15) do `stty echo cooked` exit(1) end begin `stty -echo raw` yield ensure `stty echo cooked` end end def print_sentence(s) s.split(//).each do |c| print c $stdout.flush sleep(0.01) end end def wait_key case $stdin.getc when 3 # Ctrl-C return true when ?q return true end false end book = read_book(ARGF) raw_term do book.each do |s| print_sentence(s) break if wait_key end end
BUGS: 端末の文字コードをEUCで決め打ち。機能不足(早送り、栞、行番号ジャンプなどの機能はありません)。富豪的プログラム(ファイルを全てメモリに読み込んでいます)。