#!/usr/bin/env ruby # -*- coding: utf-8 -*- def cyuusen(n) srand() m = rand(n) return m end def kakunin(x,y) # 数字絞り込み完成!! x=x.chomp if /\D+/ =~ x || x.to_i == 0 && x != "0" # この人強いw return "ng" #数字でないやつ else x = x.to_i if x >= 0 && x <= y return "ok" elsif x == 10 puts"10が入力されました" return 10 else return "ng" # 指定範囲外の数 end end end if false puts"ゆびすま" #アップデートもがんばる sleep(0.5) #いじってるのでどっか飛ぶかも puts" 説明" puts"数を言って、親指を立てて、" puts"立てた親指の数と言った数が2回同じだったら勝つやつです。" puts"人数は自分を入れて、4人までで選べます。" puts"一人はあなたです。他のプレイヤーは自動で行動します。" puts"誰か1人が勝った時点でゲームを終了します。" puts"行動は数字で決定します。行動可能なときに選択肢を提示します。" puts"なお、行動可能なとき、「10」と入力するとゲームをやめることができます。" puts"このゲームはenterで始めます。説明を読み終えたらenterを押してください。" gets end jyunban = 0 #変数 システム系 kaisu = 1 check = 0 n = 0 memberMax = ["Aさん","Bさん","Cさん","あなた"] namae = [] #ゲームをプレイするメンバー # ついに人数選択が #実装!! #もっといい方法はないものか? while check != "ok" && check != 10 print"人数を決めてください(2〜4人):" ninzuu = gets check = kakunin(ninzuu,4) if ninzuu.to_i <= 1 check = "ng" redo end end ninzuu = ninzuu.to_i (ninzuu -1).times do |n| # 頼んだインタプリタ(?!) namae << memberMax[n] end namae<<"あなた" if ninzuu >= 2 te_you = 2 te_a = 2 yubi_you = 0 yubi_a = 0 end if ninzuu >= 3 te_b = 2 yubi_b = 0 end if ninzuu == 4 te_c = 2 yubi_c = 0 # 実行されなかったifの変数は存在していてnilになるっぽい end yubi = [yubi_a,yubi_b,yubi_c,yubi_you].compact te = [te_a, te_b, te_c,te_you].compact # nil消し # !をつけると変更がないときnilになる yubi_max = te.sum # 来てるよ?来てるよ!? while true printf(" %d周目\n",kaisu) sleep (0.5) printf("%sが数を言う番です\n",namae[jyunban]) puts "いっせーの!" if namae[jyunban] == "あなた" while check != "ok" && check != 10 #あなたの番 printf("言う数を入力してください(0〜%dまで):",yubi_max) iu = gets check = kakunin(iu,yubi_max) #答えになってないと無限ループ end iu = iu.to_i if check == 10 break end else #あなた以外の番(ランダムiu) iu = cyuusen(yubi_max +1) end check = 0 while check != "ok" && check != 10 printf("出す数を入力してください(0〜%dまで):",te_you) yubi_you = gets #kakuninが使うため実は文字列 check =kakunin(yubi_you,te_you) #入力なしに対応!! end yubi_you = yubi_you.to_i #ここで数字になる(言う数〜も同様) if check == 10 break end printf("%d!\n",iu) yubi_a = cyuusen(te_a +1) #ひとりじゃない yubi_b = cyuusen(te_b +1) if !yubi_b.nil? yubi_c = cyuusen(te_c +1) if !yubi_c.nil? yubi = [yubi_a,yubi_b,yubi_c,yubi_you].compact # 徹底的にnil消し puts" 指の数" namae.length.times do |n| printf("%s:%d ",namae[n],yubi[n]) n += 1 end n = 0 kei = yubi.sum printf(" 合計:%d\n",kei) sleep(2) if kei == iu #誰かが当てたとき printf("%sが数を当てました!\n",namae[jyunban]) yubi_max -= 1 case namae[jyunban] when "Aさん" te_a -= 1 when "Bさん" te_b -= 1 when "Cさん" te_c -= 1 when "あなた" te_you -= 1 end sleep(0.5) puts" 手の数" te = [te_a,te_b,te_c,te_you].compact # nil消し愛してる(?) namae.length.times do|n| printf("%s:%d ",namae[n],te[n]) sleep(1) end print"\n" if te_a == 0 || te_b == 0 || te_c == 0 || te_you == 0 #誰かのteが0 printf("%sの勝ちです!\n",namae[jyunban]) sleep(0.5) break end end jyunban += 1 if jyunban == namae.length # これのおかげでいない人の順番は来ない jyunban = 0 kaisu += 1 end n = 0 check = 0 end puts"それではゲームを終了します。また遊ぼうね!"