#!/usr/bin/env ruby # -*- coding: utf-8 -*- class RANDOM def initialize @@choices = {"初期設定" => ["役職分けスタート","GM決め","昼夜スタート","詳細設定","リセット","プログラムを終了"], "役職追加" => ["役職を追加","参加者を追加","ホームに戻る"], "リセット" => ["すべて","役職","参加者","戻る"]} #"役職を削除","役職を確認","参加者を確認","参加者を削除", @position = [] @name = [] @gazo = spawn "display -geometry +0+0 タイトル.jpg" end def question(choices,mold = "moji") x = 0 @select = -1 if mold == "hyozi" while x < choices.length printf("%s ",choices[x]) print("\e[m") x += 1 end else while x < choices.length printf("%s(%d) ",choices[x],x) print("\e[m") x += 1 end end print("\n") while @select < 0 || @select >= choices.length #回答の仕分け print("選択:") @select = gets.chomp if @select == "" || check(@select) == false redo end @select = @select.to_i end if mold == "moji" @select = choices[@select] return @select elsif mold == "kazu" return @select else puts("Error") end end def check(h) number = ["1","2","3","4","5","6","6","7","8","9","0"] x = h.split("") n = 0 for i in x if false == number.include?(x[n]) return false end n += 1 end return true end def tuika while true print("設定:") a = gets.chomp if not a == "" return a end end end def ninzu while true print("設定:") number = ["1","2","3","4","5","6","7","8","9","0"] n = gets.chomp x = n.split("") for i in x if number.include?(x) redo end end return n.to_i end end def program while true puts("ZinroGameRandomProgrm") question(@@choices["初期設定"]) print("\n") if @select == "詳細設定" while true question(@@choices["役職追加"]) if @select == "役職を追加" x = [] puts("役職名を教えてください") x << tuika puts("人数はどうしますか?") x << ninzu @position << x elsif @select == "役職を削除" p "製作途中" redo z = @position a = [] while not z == [] a << z.shift b = a[-1] z.delete(b) end elsif @select == "参加者を追加" puts("参加者の名前を教えてください") @name << tuika elsif @select == "参加者を削除" y = @name+["戻る"] question(@name+["戻る"]) @name.delete(@select) elsif @select == "役職を確認" p @position elsif @select == "参加者を確認" p @name elsif @select == "ホームに戻る" break end end elsif @select == "役職分けスタート" if @position == [] puts("役職が設定されていません") redo end y = [] for i in @position y << [i[0]]*i[1].to_i end y.flatten! n = @name n.shuffle! x = 0 if y.length > n.length puts("役職数が参加者人数より多いです") redo end while not y.length == @name.length y << "村人" end while not x >= n.length printf("%s:%s\n",y[x],n[x]) x += 1 end puts("Enterを押せば消えます") gets puts("\e[2J") elsif @select == "リセット" question(@@choices["リセット"]) if @select == "すべて" @position.clear @name.clear elsif @select == "役職" @position.clear elsif @select == "参加者" @name.clear end elsif @select == "昼夜スタート" puts("昼は何分?") hiru = ninzu puts("夜は何分?") yoru = ninzu puts("入力するとき ENDと入力すると終了 OKと入力すると続行 人狼と入力すると人狼の勝利 村人と入力すると村人の勝利 です") if "END" == gets.chomp redo end while true gazo = spawn "display -geometry +0+0 昼のターン.jpg" puts("昼のターンスタート") x = Time.new+(hiru*60) while Time.new < x printf("残り%d秒\n",x-Time.new) sleep(1) print("\e[2J") end Process.kill(:INT,gazo) puts("昼のターンが終了しました") puts("入力してください") while true x = gets.chomp y = nil if x == "END" y = "終わる" break elsif x == "人狼" y = "人狼" elsif x == "村人" y = "村人" elsif x == "OK" break else redo end end if y == "終わる" || y == "人狼" || y == "村人" break end puts("投票と退場が完了したら入力してください") gazo = spawn "display -geometry +0+0 投票画面.jpg" while true x = gets.chomp y = nil if x == "END" y = "終わる" break elsif x == "人狼" y = "人狼" elsif x == "村人" y = "村人" elsif x == "OK" break else redo end end if y == "終わる" || y == "人狼" || y == "村人" break end Process.kill(:INT,gazo) gazo = spawn "display -geometry +0+0 夜のターン.jpg" puts("夜のターンスタート") x = Time.new+(yoru*60) while Time.new < x printf("残り%d秒\n",x-Time.new) sleep(1) print("\e[2J") end Process.kill(:INT,gazo) puts("夜のターンが終了しました") puts("入力してください") while true x = gets.chomp y = nil if x == "END" y = "終わる" break elsif x == "人狼" y = "人狼" elsif x == "村人" y = "村人" elsif x == "OK" break else redo end end if y == "終わる" || y == "人狼" || y == "村人" break end gazo = spawn "display -geometry +0+0 襲撃.jpg" puts("襲撃を行ってください") puts("入力してください") while true x = gets.chomp y = nil if x == "END" y = "終わる" break elsif x == "人狼" y = "人狼" elsif x == "村人" y = "村人" elsif x == "OK" break else redo end end if y == "終わる" || y == "人狼" || y == "村人" break end Process.kill(:INT,gazo) end if y == "人狼" gazo = spawn "display -geometry +0+0 人狼陣営の勝利.jpg" Process.kill(:INT,gazo) elsif y == "村人" gazo = spawn "display -geometry +0+0 村人陣営の勝利.jpg" Process.kill(:INT,gazo) end elsif @select == "GM決め" if @name == [] puts("参加者が設定されていません") redo end puts("今回のGMは何人ですか?(GMに選ばれた人は参加者から消去されます)") x = ninzu if x > @name.length puts("参加者の人数より多いです") redo end z = 0 while not x == z y = @name.shuffle!.shift printf("GM:%s\n",y) z += 1 end elsif @select == "プログラムを終了" Process.kill(:INT,@gazo) return end end end end x = RANDOM.new x.program