RTA時間計測ツール:rta.rb
RTAのチェックポイントごとのタイムの記録を取るのを楽にするツールを作りましたので公開します。
(ただし、このツールを使ってお使いのコンピュータに不具合が生じても責任を取ることはできませんのであしからず。)
使い方
まず、チェックポイント一覧を改行で区切って入力したテキストファイルを用意します。
例えばこんな感じ。
南の砦で ギュスターヴの陣営へ エッグを追って ラストバトル開始 エッグ撃破 ラストセーブ
このテキストファイルを保存します。(ここではファイル名をsf2check.txtとします)
次に、チェックポイントが書かれたファイル名を引数にしてスクリプトを起動します(Rubyが必要です)
% ruby rta.rb sf2check.txt
するとプログラムが起動し、"Ready?"と表示されます。ここでReturnを押すと"Start!"と表示され、タイム計測開始です。Returnを押すごとに、押した時間が記録され、また画面には次のチェックポイントが表示されます。すべてのチェックポイントでタイムを計測し終わると記録したタイムの表をタブ区切りテキストの形でチェックポイントが書かれたファイルと同じディレクトリに出力します。
実行した時のターミナルの画面はこんな感じになります。(時間の値は適当です。実測値じゃないです。)
% ruby rta.rb sf2check.txt Ready? Start! 南の砦で 00:04:21 ギュスターヴの陣営へ 00:08:16 エッグを追って 00:09:40 ラストバトル開始 00:22:27 エッグ撃破 00:43:55 ラストセーブ 00:46:23
使い方は以上です。ソースコードは折り畳んでおきます。
ソースコード
#!/usr/bin/env ruby class TimeKeeper def initialize cl @checklist = cl @record = [] end def start @start = Time.now end def top @checklist[0] end def check elapsed = Time.now - @start @record.push [@checklist.shift, elapsed] elapsed end attr_reader :record end def parse src src.split "\n" end def ftime_format ftime int = ftime.truncate sec = int % 60 min = ((int - sec) / 60) % 60 hr = (int - min * 60 - sec) / 3600 format "%02d:%02d:%02d", hr, min, sec end def printrecord rec checkpoint = rec[0] time = ftime_format rec[1] "#{checkpoint}\t#{time}" end class Controller def initialize @keeper = TimeKeeper.new parse ARGF.read end def ready puts 'Ready?' $stdin.gets puts 'Start!' start end private def start @keeper.start while top = @keeper.top print top $stdin.gets fmt = ftime_format @keeper.check puts "\t#{fmt}" end output end def outfilename ARGF.filename + '.out' end def output open outfilename, 'w' do |f| @keeper.record.each do |r| f.puts printrecord r end end end end Controller.new.ready