#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'csv' #CSVを使えるようにしている data = CSV.read("intro.csv",:headers => true) #CSVファイルを使って自己紹介の内容を決めている #CSVファイルに書き込めばいくらでも増やせる class INTRO def initialize(data) @@serif = ["_call_の名前は_me_です", "_call_は_number_で_group_です", "_call_は_school_の_grade__class_です", "好きな食べ物は_tabemono_で", "得意なこと_tokui_です", "最近の趣味は_syumi_です", "_hitokoto_"] #自己紹介のセリフ @@atogaki = ["あとがき[プログラム紹介]"+"="*16, "このプログラムは第二回プログラムテスト用に「自己紹介」というお題で制作しました", "初期状態では紹介できる人物は僕(村井侑平)だけになっています", "でも CSVファイルに紹介したい人物を追加していけばいくらでも増やせます", "ぜひ 自分のプロフィールを追加してみうてくだい", "="*40] #あとがきのセリフ @@number = ["1","2","3","4","5","6","7","8","9","0"] #checkメソッド用 @data = data #dataをインスタンス化している @title = spawn "display -geometry +1000+300 intro.png" #画像を出している end def quesion(choices,mold = "moji") #質問を出すメソッド x = 0 #最近このメソッドめっちゃ便利!って感じてきた @select = -1 while x < choices.length #質問を出す printf("%s(%d) ",choices[x],x) x += 1 end print("\n") while @select >= choices.length || @select < 0 #回答を読み込む print("選択:") @select = gets.chomp if @select == "" || false == check(@select) #空白または数字以外の回答をしたらredoする redo end @select = @select.to_i end if mold == "suji" #数字MOLDだったら数字を返す return end @select = choices[@select] #文字MOLDだったら文字を返す return end def check(h) #数字以外が ないかcheckする x = h.split("") #回答をバラしている("こんにちは" => ["こ""ん","に","ち","は"]) n = 0 for i in x if false == @@number.include?(x[n]) #回答が0〜9の中かを確認している return false #a.include?(b)=>aにbが含まれているか end n += 1 end return true end def read(mold,who = "なし") if mold == "あとがき" #あとがきを出す処理 for i in @@atogaki puts i gets end else puts("="*40) print("\n") for i in @@serif puts(@data["名"][who]+":"+i.gsub("_call_",@data["一人称"][who]) .gsub("_me_",@data["名前"][who]) .gsub("_number_",@data["塾生番号"][who]) .gsub("_group_",@data["グループ"][who]) .gsub("_tabemono_",@data["好きな食べ物"][who]) .gsub("_school_",@data["学校"][who]) .gsub("_grade_",@data["学年"][who]) .gsub("_class_",@data["クラス"][who]) .gsub("_tokui_",@data["得意なこと"][who]) .gsub("_syumi_",@data["趣味"][who]) .gsub("_hitokoto_",@data["一言"][who])) #gsubで文字列を置換している print("\n") end puts("="*40) print("\n") end end def process while true quesion(@data["名前"]+["あとがき[プログラム紹介]"]+["プログラムを終了させる"]) #メソッドで誰の自己紹介を聞くかを聞く print("\n") if @select == "あとがき[プログラム紹介]" read("あとがき") redo elsif @select == "プログラムを終了させる" Process.kill(:INT,@title) #画像を消す break #whileのループを終わらせる else who = 0 for i in @data if @data["名前"][who] == @select read("セリフ",who) end who += 1 end end end end end x = INTRO.new(data) x.process