diff --git a/CalculationGame.rb b/CalculationGame.rb new file mode 100755 index 0000000..b81e4f8 --- /dev/null +++ b/CalculationGame.rb @@ -0,0 +1,92 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +class CalculationGame + def initialize + @@choices = {"メニュー" => ["プレイ"]} + end + + def question(choices,mold) + kaisu = 0 + select = -1 + if mold == "hyozi" + while kaisu < choices.length + printf("%s ",choices[kaisu]) + print("\e[m") + kaisu += 1 + end + else + while kaisu < choices.length + printf("%s(%d) ",choices[kaisu],kaisu) + print("\e[m") + kaisu += 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 choices[select] + elsif mold == "suji" + @select = select + return select + 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 game + while true + puestion(@@choices["メニュー"]) + if @select == "プレイ" + end + end + end + + def play1 + turn = 0 + z = 0 + t = Time.new + while true + a = rand(1..2+turn) + b = rand(1..2+turn) + x = a+b + point = 0 + while true + printf("%d+%d=",a,b) + kaitou = gets.to_f + if kaitou == x && t < Time.new+30+z + puts("正解!") + z+=8 + turn += 1 + point += (1+(turn/10.floor)) + break + elsif t >= Time.new+60+z + return + else + z-=(5+(turn/10).floor(1)) + end + end + end + end + + +end diff --git a/NewRPG.rb b/NewRPG.rb index 16245be..7d21f72 100755 --- a/NewRPG.rb +++ b/NewRPG.rb @@ -38,11 +38,13 @@ "\e[96m_me_:魔王を倒さなければ", "\e[96m_me_:なぜだか わからないけど そんな気がする", "\e[96m_me_:あっ そして ここは どこなんだろう", - "(近くに村人らしき人が見える)", + "\e[96,2m(近くの村人らしき男の人に声をかけた)", "\e[96m_me_:すみません ここが どこか わかりますか", "\e[2m村人:何いってるんだい?", "\e[2m村人:ここは「パクス村」ディーヴァス川のほとりにある小さな農村さ", "\e[2m村人:ここが初めてなら注意しておくけど「ポルタ平原」には魔物が出るから用意なしには行くなよ", + "\e[2m村人:最近プリーンビーストロードってのが現れて魔物が増えたんだけどな", + "\e[2m村人:森にも近づけなくて困ってるんだよ", "\e[2m村人:まぁ旅 人なら宿屋で休んでいきな", "\e[96m_me_:あっ _jibun_ お金持ってないんですけど", "\e[2m村人:なんだお前さん一文無しかよ", @@ -50,29 +52,43 @@ "\e[2m村人:30Gやるから あとは魔物でも倒して自分で稼げ", "(_me_は村人から30Gをもらった)", "\e[2m村人:じゃぁな", - "\e[96m_me_:とりあえずポルタ平原を探索しようかな"] + "\e[96,2m(_me_:とりあえずポルタ平原を探索しようかな)"], + + "プリーンビーストロード戦闘前" => ["\e96m_me_:うわっ", + "\e[96,2m(_jibun_の2倍ほどの四足歩行の巨体が姿を現した)", + "\e[91mプリーンビーストロード:@※ ※※ &※ &@ ×@ @& @%゛$$ ¥※ ※※ #%", + "\e[91mプリーンビーストロード:×% △& @%゛□$ △$ $% %$"], + + "プリーンビーストロード勝利後" => ["\e[96m_me_:今のが\e[91mプリーンビーストロード\e[96mかな", + "\e[96m_me_:死ぬかと思った...", + "\e[96m_me_:この辺りで できることは もうあんまりないし", + "\e[96m_me_:最寄りの町に移動しようかな", + "(パクス村を出てしばらくして)", + "\e[96m_me_:あっ 村だ", + "\e[96,2m(近くに見えた村人らしき女の人に声をかけた)", + "\e[96m_me_:すみません 最寄りの町への道を教えてほしいんですが", + "\e[2m村人:ここから一番近いのは北東に行った先の鉱山都市〇〇だよ", + "\e[2m村人:でも強力な魔物が住み着いちまったみたいで 道中は危険だよ", + "\e[2m村人:かと言って他の町は馬車で一月かかるんだよな", + "\e[2m村人:魔物が住んじまったせいで踏んだり蹴ったりだよ", + "\e[2m村人:しばらく居るつもりなら歓迎するよ", + "\e[2m村人:ここは〇〇村 森の中の小さな農村だよ", + "(そう言って村人は去っていった)", + "\e[96,2m(_me_:町に行くためには無理にでも森を抜けないとな)"] } - x = ["たいあたり"],["突進"],["たいあたり"]*2+["突進"],["魔法:闇の刃"],["魔法:飛礫"]*3+["たいあたり"]+["突進"]*7 - - @@enemy = {"name" => ["スライム","デーモンビースト","\e[93mゴールデンスライム","黒い影","プリーンビーストロード"], - "HP" => [12,15,15,10,50], - "MAXHP" => [12,15,15,10,50], - "MP" => [8,5,20,15,25], - "MAXMP" => [8,5,20,15,25], - "ATS" => [4,10,6,0,25], - "MAT" => [0,0,0,8,20], - "DEF" => [5,10,30,15,40], - "MDF" => [3,8,30,40,30], - "DEX" => [10,25,8,35,50], - "AGI" => [8,15,8,25,30], - "LUK" => [1,1,1,3,10], - "G" => [5,10,30,12,75], - "EXP" => [3,7,10,13,30], - "攻撃" => x - } + x = ["たいあたり"],["たいあたり"]*2+["突進"],["突進"],["魔法:闇の刃"],["たいあたり"]*2+["突進"],["魔法:飛礫"]*3+["たいあたり"]+["突進"]*7,["ヒール"]+["たいあたり"]*2,["パンチ"]*3,["魔法:リーフカッター"],["パンチ"]*13+["魔法:リーフカッター"]*6+["回復:ヒール"] + @@enemy = CSV.read("enemy.csv",:headers => true,:converters => :numeric) + for i in @@enemy["name"] + i.gsub!("|","\e") + end + puts @@enemy["name"] + @@enemy["攻撃"] = x + @@enemy["エンカウント数"] = [0]*@@enemy["name"].length + @@enemy["勝利数"] = [0]*@@enemy["name"].length + @@enemy["敗北数"] = [0]*@@enemy["name"].length - @@probability = [0]*91 + [1]*5 + [3]*3 + [2]*1,[0]*82 + [1]*10 + [3]*5 + [2]*3,[0]*72 + [1]*15 + [3]*8 + [2]*5,[0]*52 + [1]*25 + [3]*15 + [2]*8 + @@probability = [0]*99 + [4],[0]*67 + [2]*30 + [4]*3,[0]*45 + [2]*40 + [3]*20 + [4]*5,[0]*7 + [2]*65 + [3]*20 + [4]*8 @@choices = {"プレイetc" => ["はじめから","つづきから","ゲーム説明","クレジットタイトル"], "ロード" => ["ロードする","タイトルに戻る"], @@ -90,20 +106,26 @@ @@itemlist = [] - @area = ["ポルタ平原"] + @area = ["エリア1:ポルタ平原"] @attack = ["剣技:スラッシュ"] - @@attack_list = {"剣技:スラッシュ" => [1,0,3,0],"たいあたり" => [2,1,1,0],"突進" => [3,1,0,0],"魔法:闇の刃" => [3,0,2,0,0], - "魔法:飛礫" => [3,0,3,2,1],"魔法:マジックミサイル" => [1,0,1,0,1],"パンチ" => [1,1,2,3],"剣技:疾風斬り" => [4,0,5,2],"魔法:ファイアーボール" => [3,0,3,0,0], + @@attack_list = {"剣技:スラッシュ" => [1,0,3,0],"たいあたり" => [2,1,1,0],"突進" => [3,1,0,0], + "魔法:闇の刃" => [3,0,2,0,0],"魔法:飛礫" => [3,0,3,2,1], + "魔法:マジックミサイル" => [1,0,1,0,1],"パンチ" => [1,1,2,3], + "剣技:疾風斬り" => [2,0,2,1],"魔法:ファイアーボール" => [3,0,3,0,0], + "回復:ヒール" => [5,5],"魔法:リーフカッター" => [3,0,3,1,0], + "Command:何もしない" => nil, "回復Command:Soul Regeneration" => [10000,0], "攻撃Command:Delete Life" => [10000,0,10000,10000] #<=管理者特権 } + @@skill = CSV.read("skill.csv",:headers => true) @attack_ckeck = [0,0,-1,-1] - @@pass = {"管理者" => ["管理者","administrator","ADMINISTRATOR"], - "ヒーラー" => ["ヒーラ","HEALER","healer"]} + @@pass = {"スーパーアカウント" => ["ADMINISTRATOR","HEALER"], + "管理者" => ["管理者","administrator","ADMINISTRATOR"], + "ヒーラー" => ["ヒーラー","HEALER","healer"]} @@key = ["name","性別","一人称","Lv","EXP","処理用EXP","前回のLvUP必要EXP","G","HP","MAXHP","MP","MAXMP","ATS","MAT","DEF","DEX","AGI","LUK","バトル数","勝利数","敗北数","逃走数"] @@ -147,26 +169,28 @@ def talk(story,mold = "置き換え") print("\n") - if mold == "置き換え" - for i in @@story[story] - puts(i.gsub("_me_",@status["name"]) - .gsub("_jibun_",@status["一人称"]) - .gsub("_seibetu_",@status["性別"]) - ) - print("\e[m") - gets - end - elsif mold == "読み上げ" - for i in @@story[story] - puts i - print("\e[m") - gets + if not story == "なし" + if mold == "置き換え" + for i in @@story[story] + puts(i.gsub("_me_",@status["name"]) + .gsub("_jibun_",@status["一人称"]) + .gsub("_seibetu_",@status["性別"]) + ) + print("\e[m") + gets + end + elsif mold == "読み上げ" + for i in @@story[story] + puts i + print("\e[m") + gets + end end end end def check(h) - number = ["1","2","3","4","5","6","6","7","8","9","0",nil,"."] + number = ["1","2","3","4","5","6","6","7","8","9","0"] x = h.split("") n = 0 for i in x @@ -210,7 +234,8 @@ "AGI" => 100000000, "LUK" => 100000000 } - @attack << "Command:Delete Life" + @attack << "Command:何もしない" + @attack << "攻撃Command:Delete Life" puts('コード"管理者"を認証しました') puts("スーパーアカウントの使用を許可します") x = "OK" @@ -224,7 +249,7 @@ "前回のLvUP必要EXP" => 0, "G" => 30, "HP" => 100000000, - "MAXHP" => 20, + "MAXHP" => 100000000, "MP" => 3, "MAXMP" => 3, "ATS" => 8, @@ -235,7 +260,8 @@ "AGI" => 15, "LUK" => 1 } - @attack << "Command:Delete Life" + @attack << "Command:何もしない" + @attack << "回復Command:Soul Regeneration" puts('コード"ヒーラー"を認証しました') puts("スーパーアカウントの使用を許可します") x = "OK" @@ -383,7 +409,7 @@ print("Sleeping") dot(["."]*3,1) print("\n") - else + else puts("宿屋の主人:なんだ 泊まんねーのかよ") end end @@ -398,8 +424,8 @@ def tansaku x = @area + ["戻る"] select = question(x,"moji") - if select == "ポルタ平原" - battle(0,3,4) + if select == "エリア1:ポルタ平原" + battle(0,3,select,5,"プリーンビーストロード戦闘前","プリーンビーストロード勝利後") end end @@ -407,11 +433,12 @@ return list[rand(list.length)] end - def battle(s,e,boss) + def battle(s,e,area,boss,t1,t2) for n in @@probability[s..e] @teki = encounter(n) sleep(rand(40)/10) @status["バトル数"] += 1 + @@enemy["エンカウント数"][@teki] += 1 game if @result == "勝ち" print("\n") @@ -422,17 +449,18 @@ @status["処理用EXP"] += x @status["G"] += @@enemy["G"][@teki] + ((@@enemy["G"][@teki]/10).floor * (rand(3) + 1) + (rand(3) + 1)) @status["勝利数"] += 1 + @@enemy["勝利数"][@teki] += 1 level elsif @result == "負け" gameovre #GAMEOVREのメソッド @status["HP"] = @status["MAXHP"] #HP全快 - @status["MP"] = @status["MXAMP"] #MP全快 + @status["MP"] = @status["MAXMP"] #MP全快 @status["G"] -= ((@status["G"]/10).floor + 10)#Gを減らす if @status["G"] < 0 #Gが0未満になった場合 @status["G"] = 0 end @status["敗北数"] += 1 - p @status + @@enemy["敗北数"][@teki] += 1 return elsif @result == "逃走" @status["逃走数"] += 1 @@ -443,11 +471,42 @@ return end end + x = /クリア/ !~ area + if false == x + puts("もう先には行けなさそうだ") + return + end puts("この先から禍々しい気配がする") question(@@choices["進むor戻る"],"moji") - if @select == "深部へ進む" + if @select == "深部に進む" @teki = boss + talk(t1) game + if @result == "勝ち" + print("\n") + printf("%sの主 %s\e[mに勝った!\n",area,@@enemy["name"][@teki]) + print("\n") + x = @@enemy["EXP"][@teki] + ((@@enemy["EXP"][@teki]/10).floor * (rand(3) + 1) + (rand(3) + 1)) + @status["EXP"] += x + @status["処理用EXP"] += x + @status["G"] += @@enemy["G"][@teki] + ((@@enemy["G"][@teki]/10).floor * (rand(3) + 1) + (rand(3) + 1)) + @status["勝利数"] += 1 + @@enemy["勝利数"][@teki] += 1 + level + elsif @result == "負け" + gameovre #GAMEOVREのメソッド + @status["HP"] = @status["MAXHP"] #HP全快 + @status["MP"] = @status["MAXMP"] #MP全快 + @status["G"] -= ((@status["G"]/5).floor + 30)#Gを減らす + if @status["G"] < 0 #Gが0未満になった場合 + @status["G"] = 0 + end + @status["敗北数"] += 1 + @@enemy["敗北数"][@teki] += 1 + return + end + talk(t2) + addition(area) end end @@ -457,7 +516,7 @@ gets Process.kill(:INT,picture) end - + def syouhai if @@enemy["HP"][@teki] <= 0 || @status["HP"] <= 0 || @result == "逃走" return true @@ -472,7 +531,9 @@ @@enemy["HP"][@teki] = @@enemy["MAXHP"][@teki] printf("%s\e[mが現れた",@@enemy["name"][@teki]) turn = rand(2) - while not @@enemy["HP"][@teki] <= 0 && @status["HP"] <= 0 && @result == "逃走" + @result = "戦闘" + while true + p @@enemy["HP"][@teki] if @status["DEX"] > @@enemy["DEX"][@teki] myturn if syouhai == true @@ -500,6 +561,9 @@ myturn end end + if syouhai == true + break + end end if @status["HP"] <= 0 @result = "負け" @@ -510,9 +574,9 @@ def enemyturn @turn = "敵" - x = ["攻撃","剣技","魔法","魔剣技","回復"] + x = ["攻撃","剣技","魔法","魔剣","回復"] @waza = encounter(@@enemy["攻撃"][@teki]) - type = x.index(@waza) + type = x.index(@waza[0..1]) puts @waza if type == 2 magic @@ -523,44 +587,75 @@ else sword end - if rand((@@enemy["AGI"][@teki]*2+@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]/2).floor*2)+@@attack_list[@waza][-2] > rand(((@status["DEX"]*2+@status["AGI"]+@status["LUK"]/2).floor/2).floor) - if rand(((@@enemy["AGI"][@teki]*2+@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]/2).floor/4).floor)+@@attack_list[@waza][-1] > rand((@status["DEX"]*2+@status["AGI"]+@status["LUK"]/2).floor) - @damage = (@damage*1.5).floor + end + + def sword + p @turn + if @turn == "敵" + @damage = @@enemy["ATS"][@teki] + @@attack_list[@waza][0] - ((@status["DEF"] / 2).floor) + @@enemy["HP"][@teki] -= @@attack_list[@waza][1] + if @damage <= 0 + @damae = 0 + @damage += 1 + @damage += (@@attack_list[@waza][0]/10).floor end - @status["HP"] -= @damage - else - @damage = 0 + if rand((@@enemy["AGI"][@teki]*2+@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]/2).floor*2)+@@attack_list[@waza][-2] > rand(((@status["DEX"]*2+@status["AGI"]+@status["LUK"]/2).floor/2).floor) + if rand(((@@enemy["AGI"][@teki]*2+@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]/2).floor/4).floor)+@@attack_list[@waza][-1] > rand((@status["DEX"]*2+@status["AGI"]+@status["LUK"]/2).floor) + @damage = (@damage*1.5).floor + end + @status["HP"] -= @damage + else + @damage = 0 + end + elsif @turn == "PL" + @damage = @status["ATS"] + @@attack_list[@waza][0] - ((@@enemy["DEF"][@teki] / 2).floor) + @status["HP"] -= @@attack_list[@waza][1] + if @damage <= 0 + @damage = 0 + @damage += 1 + @damage += (@@attack_list[@waza][0]/10).floor + end + if rand((@status["AGI"]*2+@status["DEX"]+@status["LUK"]/2).floor*2)+@@attack_list[@waza][-2] > rand(((@@enemy["DEX"][@teki]*2+@@enemy["AGI"][@teki]+@@enemy["LUK"][@teki]/2).floor/2).floor) + if rand(((@status["AGI"]*2+@status["DEX"]+@status["LUK"]/2).floor/4).floor)+@@attack_list[@waza][-1] > rand((@@enemy["DEX"][@teki]*2+@@enemy["AGI"][@teki]+@@enemy["LUK"][@teki]/2).floor) + @damage = (@damage*1.5).floor + end + else + @damage = 0 + end + p @@enemy["HP"][@teki] + @@enemy["HP"][@teki] -= @damage + p @@enemy["HP"][@teki] + p @@enemy["HP"][@teki] - @damage end process end - def sword - if @turn == "敵" - @damage = @@enemy["ATS"][@teki] + @@attack_list[@waza][0] - ((@status["DEF"] / 2).floor) - @@enemy["HP"][@teki] -= @@attack_list[@waza][1] - elsif @turn == "PL" - @damage = @status["ATS"] + @@attack_list[@waza][0] - ((@@enemy["DEF"][@teki] / 2).floor) - @status["HP"] -= @@attack_list[@waza][1] - end - if @damage <= 0 - @damae = 0 - @damage += 1 - @damage += (@@attack_list[@waza][0]/10).floor - end - end - def magic - mp = @attack_list[@waza][2] + rand(4) + mp = @@attack_list[@waza][2] + rand(4) if @turn == "敵" if mp > @@enemy["MP"][@teki] - mp = @@attack_list[2] + mp = @@attack_list[@waza][2] end if mp > @@enemy["MP"][@teki] mp = @@enemy["MP"][@teki] end - @damage = @@enemy["MAT"][@teki] * ((mp/2).floor +1) + @@attack_list[@waza] - (@status["MDF"]/3).floor - (@status["MP"]/5).floor + @damage = @@enemy["MAT"][@teki] * ((mp/2).floor +1) + @@attack_list[@waza][0] - (@status["MDF"]/3).floor - (@status["MP"]/5).floor @@enemy["MP"][@teki] -= mp - @@enemy["HP"][@teki] -= @@attack_list[1] + @@enemy["HP"][@teki] -= @@attack_list[@waza][1] + if @damage <= 0 + @damage = 0 + @damage += 1 + @damage += (@@attacl_list[@waza][0]/10).floor + end + if rand((@@enemy["AGI"][@teki]*2+@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]/2).floor*2)+@@attack_list[@waza][-2] > rand(((@status["DEX"]*2+@status["AGI"]+@status["LUK"]/2).floor/2).floor) + if rand(((@@enemy["AGI"][@teki]*2+@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]/2).floor/4).floor)+@@attack_list[@waza][-1] > rand((@status["DEX"]*2+@status["AGI"]+@status["LUK"]/2).floor) + @damage = (@damage*1.5).floor + end + @status["HP"] -= @damage + else + @damage = 0 + end + elsif @turn == "PL" if mp > @status["MP"] mp = @@attack_list[2] @@ -571,12 +666,21 @@ @damage = @status["MAT"] * ((mp/2).floor +1) + @@attack_list[@waza][0] - (@@enemy["MDF"][@teki]/3).floor - (@@enemy["MP"][@teki]/5).floor @status["MP"] -= mp @status["HP"] -= @@attack_list[@waza][1] + if @damage <= 0 + @damage = 0 + @damage += 1 + @damage += (@@attacl_list[@waza][0]/10).floor + end + if rand((@status["AGI"]*2+@status["DEX"]+@status["LUK"]/2).floor*2)+@@attack_list[@waza][-2] > rand(((@@enemy["DEX"][@teki]*2+@@enemy["AGI"][@teki]+@@enemy["LUK"][@teki]/2).floor/2).floor) + if rand(((@status["AGI"]*2+@status["DEX"]+@status["LUK"]/2).floor/4).floor)+@@attack_list[@waza][-1] > rand((@@enemy["DEX"][@teki]*2+@@enemy["AGI"][@teki]+@@enemy["LUK"][@teki]/2).floor) + @damage = (@damage*1.5).floor + end + else + @damage = 0 + end + @@enemy["HP"][@teki] -= @damage end - if @damage <= 0 - @damage = 0 - @damage += 1 - @damage += (@@attacl_list[@waza][0]/10).floor - end + process end def magic_sword @@ -591,6 +695,19 @@ @damage = ((@@enemy["MAT"][@teki]/3).floor + (@@enemy["ATS"][@teki]/2).floor) * ((mp/2).floor +1) * (@@attack_list[@waza][0]/5).floor - (@status["MDF"]/5).floor - (@status["MP"]/8).floor - (@status["DEF"]/3).floor @@enemy["MP"][@teki] -= mp @@enemy["HP"][@teki] -= @@attack_list[@waza][1] + if @damage <= 0 + @damage = 0 + @damage += 1 + @damage += (@@attacl_list[@waza][0]/10).floor + end + if rand((@@enemy["AGI"][@teki]*2+@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]/2).floor*2)+@@attack_list[@waza][-2] > rand(((@status["DEX"]*2+@status["AGI"]+@status["LUK"]/2).floor/2).floor) + if rand(((@@enemy["AGI"][@teki]*2+@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]/2).floor/4).floor)+@@attack_list[@waza][-1] > rand((@status["DEX"]*2+@status["AGI"]+@status["LUK"]/2).floor) + @damage = (@damage*1.5).floor + end + @status["HP"] -= @damage + else + @damage = 0 + end elsif @turn == "PL" if mp > @status["MP"] mp = @@attack_list[@waza][2] @@ -601,13 +718,21 @@ @damage = (@status["MAT"]/3).floor + (@status["ATS"]/2).floor * ((mp/2).floor +1) * (@@attack_list[@waza][0]/5).floor - (@@enemy["MDF"][@teki]/5).floor - (@@enemy["MP"][@teki]/8).floor - (@@enemy["DEF"]/3).floor @status["MP"] -= mp @status["HP"] -= @@attack_list[@waza][1] - + if @damage <= 0 + @damage = 0 + @damage += 1 + @damage += (@@attacl_list[@waza][0]/10).floor + end + if rand((@status["AGI"]*2+@status["DEX"]+@status["LUK"]/2).floor*2)+@@attack_list[@waza][-2] > rand(((@@enemy["DEX"][@teki]*2+@@enemy["AGI"][@teki]+@@enemy["LUK"][@teki]/2).floor/2).floor) + if rand(((@status["AGI"]*2+@status["DEX"]+@status["LUK"]/2).floor/4).floor)+@@attack_list[@waza][-1] > rand((@@enemy["DEX"][@teki]*2+@@enemy["AGI"][@teki]+@@enemy["LUK"][@teki]/2).floor) + @damage = (@damage*1.5).floor + end + else + @damage = 0 + end + @@enemy["HP"][@teki] -= @damage end - if @damage <= 0 - @damage = 0 - @damage += 1 - @damage += (@@attacl_list[@waza][0]/10).floor - end + process end def heal @@ -619,7 +744,8 @@ if mp > @@enemy["MP"][@teki] mp = @@enemy["MP"][@teki] end - @@enemy["HP"][@teki] += @@attack_list[@waza][0] + mp + rand(4) + @damage = @@attack_list[@waza][0] + mp + rand(4) + @@enemy["HP"][@teki] += @smgw if @@enemy["HP"][@teki] > @@enemy["MAXHP"][@teki] @@enemy["HP"][@teki] = @@enemy["MAXHP"][@teki] end @@ -630,64 +756,66 @@ if mp > @status["MP"] mp = @status["MP"] end - @status["HP"] += @@attack_list[@waza][0] + mp + rand(4) + @damage = @@attack_list[@waza][0] + mp + rand(4) + @status["HP"] += @damage if @status["HP"] > @status["MAXHP"] @status["HP"] = @status["MAXHP"] end end + process("回復") end def myturn display - question(@@choices["バトル"],"moji") - if @select == "攻撃" - x = @attack + ["戻る"] - @waza = question(x,"moji") - puts @waza - @turn = "PL" - x = ["攻撃","剣技","魔法","魔剣技","回復"] - type = x.index(@waza) - if type == 2 - magic - elsif type == 3 - magic_sword - elsif type == 4 - heal - else - sword - end - if rand((@status["AGI"]*2+@status["DEX"]+@status["LUK"]/2).floor*2)+@@attack_list[@waza][-2] > rand(((@@enemy["DEX"][@teki]*2+@@enemy["AGI"][@teki]+@@enemy["LUK"][@teki]/2).floor/2).floor) - if rand(((@status["AGI"]*2+@status["DEX"]+@status["LUK"]/2).floor/4).floor)+@@attack_list[@waza][-1] > rand((@@enemy["DEX"][@teki]*2+@@enemy["AGI"][@teki]+@@enemy["LUK"][@teki]/2).floor) - @damage = (@damage*1.5).floor + while true + question(@@choices["バトル"],"moji") + if @select == "攻撃" + x = @attack + ["戻る"] + @waza = question(x,"moji") + if @waza == "戻る" + redo end - else - @damage = 0 - end - process - @@enemy["HP"][@teki] -= @damage - print("\n") - - elsif @select == "アイテム" - item - elsif @select == "逃げる" - if "ボス".index(@@enemy["name"][@teki]) - if rand((@status["DEF"] + @status["LUK"])*2) > rand(@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]) - puts("逃げ切れた") - @result = "逃走" - return + puts @waza + @turn = "PL" + x = ["攻撃","剣技","魔法","魔剣","回復"] + if not @waza == "Command:何もしない" + type = x.index(@waza[0..1]) + if type == 2 + magic + elsif type == 3 + magic_sword + elsif type == 4 + heal + else + sword + end + end + + print("\n") + return + elsif @select == "アイテム" + item + elsif @select == "逃げる" + x = /ボス/ !~ @@enemy["name"][@teki] + if not x == false + if rand((@status["DEF"] + @status["LUK"])*2) > rand(@@enemy["DEX"][@teki]+@@enemy["LUK"][@teki]) + puts("逃げ切れた") + @result = "逃走" + return + else + puts("逃げ切れなかった") + return + end else puts("逃げ切れなかった") return end - else - puts("逃げ切れなかった") - return end end end def level - if not @status["Lv"] == 99 || @status["Lv"] == "\e[93m\"SPECIAL\"\e[m" + if not @status["Lv"] == 99 && @@pass["スーパーアカウント"].include?(@status["Lv"]) == false while 0 >= @status["LvUP必要EXP"]-@status["処理用EXP"] puts("レベルアップ!") @status["Lv"] += 1 @@ -704,6 +832,11 @@ @status["DEX"] = (@status["DEX"]*1.045).ceil @status["AGI"] = (@status["AGI"]*1.045).ceil @status["LUK"] = @status["Lv"] + if not @@skill[@status["Lv"].to_s][0] == nil + for i in @@skill[@status["Lv"].to_s] + @attack << i + end + end if @status["Lv"] == 99 @status["MP"] = 800 @status["ATS"] = 120 @@ -716,10 +849,26 @@ display end - def process - if @damage == "他" + def addition(mold) + if mold == "エリア1:ポルタ平原" + @area[0] = "エリア1:ポルタ平原(クリア)" + @area[1] = "〇〇森" + end + end + + def achievement + if @@enemy["勝利数"][0]+@@enemy["勝利数"][1]*2 >= 50 + @area << "ダンジョン:スライムの巣" + @area.sort! + end + end + + def process(mold = "無") + if mold == "他" elsif @damage == 0 puts("ミス") + elsif mold == "回復" + printf("回復した\n",@damage) else printf("%dダメージ!\n",@damage) end @@ -740,9 +889,9 @@ elsif select == "武器屋に行く" elsif select == "アイテムショップに行く" - + elsif select == "教会に行く" - kyoukai + kyoukai elsif select == "探索に行く" tansaku end diff --git a/NumberGuessingGame b/NumberGuessingGame deleted file mode 100755 index 52573f3..0000000 --- a/NumberGuessingGame +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -srand() -seikai = rand(10000) + 1 -puts("数字当てゲームが始まるよ!") -puts("1〜10000の数字の中から当ててね!") -puts("間違っていたらその数より大きいか小さいかを教えるよ") -puts("なるべく少ない回数で正解してね!") -kaisuu = 1 -while true - - print "正解だと思う数字を入力してね!" - print"正解は…" - kaitou = gets.chomp.to_i - if seikai == kaitou - printf "正解!かかった回数は%d回だよ!\n", kaisuu - puts "おめでとう!" - break - elsif seikai < kaitou && kaitou > 0 && kaitou < 10001 - printf "間違い!正解は%dより小さいよ!\n", kaitou - kaisuu += 1 - redo - elsif seikai > kaitou && kaitou > 0 && kaitou < 10001 - printf "間違い!正解は%dより大きいよ!\n", kaitou - kaisuu += 1 - redo - else - puts "1〜10000から選んでね" - redo - end -end diff --git a/StudyRPG.rb b/StudyRPG.rb index d3ccf90..187cf20 100755 --- a/StudyRPG.rb +++ b/StudyRPG.rb @@ -388,7 +388,7 @@ r = rand(2) printf("%s\e[mが現れた\n",@@enemy["name"][@who]) print("戦闘開始") - dot(["="]*42,0.101) + dot(["="]*42,0.01) while not @@enemy["HP"][@who] <= 0 && @status["HP"] <= 0 && @result == "逃走" diaplay @@ -405,16 +405,12 @@ a = x+y while k.nil? == true printf("%d+%d=",x,y) - an = gets.chomp + an = gets.chomp.to_i + p a if s+@time <= Time.now+penalty k = "失敗" break end - if false == check(an) - penalty += 0.5 - puts("不正解!") - redo - end an = an.to_i if a == an k = "成功" @@ -435,8 +431,11 @@ end if k == "成功" + counter + printf("%sD",@counter) @@enemy["HP"][@who]-= @counter elsif k == "失敗" + damage @status["HP"] -= @damage end end diff --git a/classtest.rb b/classtest.rb deleted file mode 100755 index 0432402..0000000 --- a/classtest.rb +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env ruby -# coding: utf-8 - -class HERO - # @@ で始まるものは全オブジェクトに共通のクラス変数 - @@max_abil = {"HP" => 20, "MP" => 300} - def initialize(name = "アドル") # initializeメソッドは必須 initializeメソッドはreturnできない - @myname = name # @のものがインスタンス変数 インスタンス変数は各インスタントで個別に設定される - @attr = {} # 属性をHashで # 1つのオブジェクト内共通で使える - printf("%sが生まれた\n", @myname) - end - def setAttr(attr, value) - @attr[attr] = value - if @attr[attr] > @@max_abil[attr] - @attr[attr] = @@max_abil[attr] - end - printf("%sの%sが%sになった\n", @myname, attr, value.to_s) - #to_sメソッドは数値を文字列にできる - end - def name - @myname - end - def getAttr(attr) - @attr[attr] - end - def bokan() - printf("%sが倒れた\n", @myname) - setAttr("HP", 0) - end - def maxAttr(attr) - @@max_abil[attr] - end -end - -x = HERO.new #インタンス化 -#xのインスタンス -y = HERO.new("ポトフ") #nowメソッドに 引数を与える -#yのインスタンス -#nowメソッドを使うとinitializeメソッドが呼び出される - -x.setAttr("HP", 10) -printf("%s のHPは%dだ\n", x.name, x.getAttr("HP")) - -y.setAttr("HP", 100) -y.bokan -printf("%s のHPは%dだ\n", y.name, y.getAttr("HP")) -printf("%s の最大HPは%dだ\n", x.name, x.maxAttr("HP")) -printf("%s の最大HPは%dだ\n", y.name, y.maxAttr("HP")) - -#x.〇〇はxのインスタンス -#y.〇〇はyのインスタンスで処理している diff --git a/enemy.csv b/enemy.csv new file mode 100644 index 0000000..91ae325 --- /dev/null +++ b/enemy.csv @@ -0,0 +1,10 @@ +name,番号,HP,MAXHP,MP,MAXMP,ATS,MAT,DEF,MDF,DEX,AGI,LUK,G,EXP +リトルスライム,0,12,12,8,8,5,0,7,4,12,8,1,5,3 +スライム,1,25,25,12,12,10,8,15,10,28,18,15,12,12 +デーモンビースト,2,20,20,5,5,6,0,10,7,30,10,3,10,7 +黒い影,3,15,15,20,20,0,8,15,20,40,20,5,15,12 +|[93mリトルゴールデンスライム,4,15,15,15,15,8,0,25,25,8,8,5,30,12 +エリアボス:|[91mプリーンビーストロード,5,40,40,20,20,18,10,25,20,60,30,10,40,35 +リトルグリーンスライム,6,20,20,20,20,8,8,10,8,30,20,8,8,6 +ウッドゴーレム,7,25,25,25,25,10,10,18,15,25,25,10,12,12 +エリアボス:|[91mジャイアントウッドゴーレム,8,80,80,60,60,30,20,35,30,50,45,20,60,50 diff --git a/skill.csv b/skill.csv new file mode 100644 index 0000000..0f8d36a --- /dev/null +++ b/skill.csv @@ -0,0 +1,2 @@ +5 +剣技:疾風斬り diff --git a/ui.rb b/ui.rb deleted file mode 100755 index a3df052..0000000 --- a/ui.rb +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -def cyuusen(n) - srand() - m = rand(n) - return m -end - -def kakunin(x,y) - if x >= 0 && x <= y - return "ok" - elsif x == 10 - return 10 - else - return "ng" - end -end - -puts"親指のやつ" -puts"これって名前あるのかなぁ?" -sleep(0.5) - -puts" 説明" -puts"数を言って、親指を立てて、" -puts"立てた親指の数と言った数が2回同じだったら勝つやつです。" -puts"プレイヤーは4人です。" -puts"3人は自動で行動します。残りの一人があなたです。" -puts"4人のうち、誰か1人が勝った時点でゲームを終了します。" -puts"行動は数字で決定します。行動可能なときに選択肢を提示します。" -puts"なお、行動可能なとき、「10」と入力するとゲームをやめることができます。" -puts"このゲームはenterで始めます。説明を読み終えたらenterを押してください。" -gets - -namae = ["Aさん","Bさん","Cさん","あなた"] - -te_a = 2 #変数 プレイヤー系 -te_b = 2 -te_c = 2 -te_you = 2 - -yubi_a = 0 -yubi_b = 0 -yubi_c = 0 -yubi_you = 0 -yubi_max = 8 - -jyunban = 0 #変数 システム系 -kaisu = 1 -check = 0 -n = 0 - -while true - printf(" %d周目\n",kaisu) - sleep (0.5) - printf("%sが数を言う番です\n",namae[jyunban]) - puts "いっせーの!" - if jyunban == 3 - while check != "ok" && check != 10 #あなたの番 - printf("言う数を入力してください(0〜%dまで):",yubi_max) - iu = gets.to_i - check = kakunin(iu,yubi_max) #答えになってないと無限ループ - end - 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.to_i - check =kakunin(yubi_you,te_you) - end - if check == 10 - break - end - printf("%d!\n",iu) - - yubi_a = cyuusen(te_a +1) - yubi_b = cyuusen(te_b +1) - yubi_c = cyuusen(te_c +1) - yubi = [yubi_a,yubi_b,yubi_c,yubi_you] - - puts" 指の数" - while n < 4 - printf("%s:%d ",namae[n],yubi[n]) - n += 1 - end - n = 0 - - kei = yubi_a + yubi_b + yubi_c + yubi_you - printf(" 合計:%d\n",kei) - sleep(2) - if kei == iu - printf("%sが数を当てました!\n",namae[jyunban]) - yubi_max -= 1 - if jyunban == 0 - te_a -= 1 - elsif jyunban == 1 - te_b -= 1 - elsif jyunban == 2 - te_c -= 1 - elsif jyunban == 3 - te_you -= 1 - end - sleep(0.5) - puts" 手の数" - te = [te_a,te_b,te_c,te_you] - while n < 4 - printf("%s:%d ",namae[n],te[n]) - n += 1 - sleep(1) - end - print"\n" - if te_a == 0 || te_b == 0 || te_c == 0 || te_you == 0 - printf("%sの勝ちです!\n",namae[jyunban]) - sleep(0.5) - break - end - end - jyunban += 1 - check = kakunin(jyunban,3) - if check == "ng" - jyunban = 0 - kaisu += 1 - end - n = 0 - check = 0 -end -puts"それではゲームを終了します。また遊ぼうね!" diff --git a/zikken.rb b/zikken.rb index 93c3aec..a5175e5 100755 --- a/zikken.rb +++ b/zikken.rb @@ -2,9 +2,18 @@ # coding: utf-8 require 'csv' -require 'Win32API' -beep = Win32API.new('kernel32', 'Beep', %w(i i), 'i') +data = CSV.read("実験.csv",:headers => true,:converters => :numeric) -hz = 400 * ( 2** (-8/12)) -beep.call(hz,500) +for i in data["実験"] + p i + i.gsub!("|","\e") + p i + puts i +end + +for i in data["実験"] + puts i + print("\n") + p i +end diff --git "a/\345\256\237\351\250\223.csv" "b/\345\256\237\351\250\223.csv" index a87a7e9..ff70221 100644 --- "a/\345\256\237\351\250\223.csv" +++ "b/\345\256\237\351\250\223.csv" @@ -1,2 +1,3 @@ 実験 -"““こんにちは""”" +|[91mあ +1