Newer
Older
Ruby / sample / sample_yuse1.rb
#!/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