前回のプログラムでは4つの単語からひとつをランダムに選択し回答する仕様にした。今回は単語数を93に増やしたため、単語リストを単独に作成した。また、回答もリストから選んだ単語を返すだけではなく、「~って何(Jas….?)」というも再度利用することに。
1/4の確率でJas….?を、残りの3/4の確率でリストからの単語を返す仕様にした。変更点は主にKotzij.rbのこの部分
1 2 3 4 5 6 7 8 9 10 |
def initialize @responderRandom = RandomResponder.new('Kotz\'ij') @responderWhat = WhatResponder.new('Kotz\'ij') @responder = @responderRandom end def dialogue(input) @responder = rand(4) ==0 ? @responderWhat : @responderRandom; return @responder.response(input) end |
と
Responder.rbの
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class RandomResponder < Responder def initialize(name) super @phrases = [] open('dictionaries/dic01.txt') do |f| f.each do |line| line.chomp! next if line.empty? @phrases.push(line) end end end def response(input) return randomSelect(@phrases) end def randomSelect(ary) return ary[rand(ary.size)] end |
まず、回答方法がランダムに決定され、その後単語を返すこととなった場合、単語リストから単語をひとつランダムで選択。
長くなるけどResponder.rbとKotzij.rbの全体のコードはこうなっている。Tzijonikについては日付を変えただけ。
Responder.rb
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 34 35 36 37 38 39 40 41 |
class Responder def initialize(name) @name = name end def response(input) return '' end def name return @name end end class WhatResponder < Responder def response(input) "Jas #{input}?" end end class RandomResponder < Responder def initialize(name) super @phrases = [] open('dictionaries/dic01.txt') do |f| f.each do |line| line.chomp! next if line.empty? @phrases.push(line) end end end def response(input) return randomSelect(@phrases) end def randomSelect(ary) return ary[rand(ary.size)] end end |
Kotzij.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
require './Responder' class Kotzij def initialize @responderRandom = RandomResponder.new('Kotz\'ij') @responderWhat = WhatResponder.new('Kotz\'ij') @responder = @responderRandom end def dialogue(input) @responder = rand(4) ==0 ? @responderWhat : @responderRandom; return @responder.response(input) end def responder_name return @responder.name end end |
プログラムを実行してみる。
現在の単語リストはこれ。会話になってないけど、少し前進してるかな。