#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'csv' class RPG def initialize @@story = {"ゲーム説明" => ["ゲーム説明","このゲームはメニューで行動を選択して遊びます", "ステータスを見る・宿屋へ行く・武器屋へ行く・教会へ行く・探索へ行くの中から好きなのを選びます", "ステータスを見るは今の自分のステータスを見ることができます", "HP=体力 MP=魔力・魔法防御力 ATS=攻撃力 MAT=魔法攻撃力 DEF=防御力 DEX=素早さ AGI=器用さ LUK=運", "宿屋はGを支払うとHP・MPが回復します", "武器屋は武器・防具を購入することができます", "教会はセーブをすることができます", "探索は魔物の生息地に行き 戦いをします", "戦いは行動を選択して魔物を倒します", "死んでしまったら'GAMEOVER'でGを失い村・街からやり直しです", "目標は魔王を倒すこと!", "じゃぁクリア目指して頑張ってね", "※このゲームは共同制作作品です"], "クレジットタイトル" => ["クレジットタイトル(スタッフロール)","システム","村井侑平 澤田羽衣", "システムアドバイザー","佐藤隆之助 阿部光峻", "広瀬雄二様 東北公益文科大学の皆様", "シナリオ","村井侑平 高橋真翔 佐藤風斗 佐藤然", "シナリオアドバイザー","佐藤隆之助 澤田羽衣 疋田琉莉 阿部光峻", "グラフィック","村井侑平", "この作品に関わった すべての方に感謝の意を申し上げます", "制作","「#みんなでゲームを作ろう」の会"], "目覚め" => ["\e[96m_me_:う、うっ", "\e[96;2m(強い頭痛を感じ_jibun_は意識を失った)", "\e[96;2m(目覚めると そこは見知らぬ村だった)", "\e[96m_me_:こ、ここは どこ?", "\e[96;2m(その瞬間すべてを思い出した)", "\e[96;2m(剣術や魔法 世界のことわり)", "\e[96;2m(そして魔王を倒さなければ ならないという強い使命感を覚えた)", "\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村人:なんだお前さん一文無しかよ", "\e[2m村人:しかたねーなー ここで会ったのも何かの縁だ", "\e[2m村人:30Gやるから あとは魔物でも倒して自分で稼げ", "(_me_は村人から30Gをもらった)", "\e[2m村人:じゃぁな", "\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+["突進"],["突進"],["魔法:闇の刃"],["たいあたり"]*2+["突進"],["魔法:飛礫"]*3+["たいあたり"]+["突進"]*7,["ヒール"]+["たいあたり"]*2,["パンチ"]*3,["魔法:リーフカッター"],["パンチ"]*13+["魔法:リーフカッター"]*6+["回復:ヒール"] e = CSV.read("enemy.csv",:headers => true,:converters => :numeric) for i in e["name"] i.gsub!("|","\e") end n = e["name"] hP = e["HP"] mP = e["MP"] aTS = e["ATS"] mAT = e["MAT"] dEF = e["DEF"] mDF = e["MDF"] dEX = e["DEX"] aGI = e["AGI"] lUK = e["LUK"] g = e["G"] eXP = e["EXP"] @@enemy = {"name" => n, "HP" => hP, "MAXHP" => hP, "MP" => mP, "MAXMP" => mP, "ATS" => aTS, "MAT" => mAT, "DEF" => dEF, "MDF" => mDF, "DEX" => dEX, "AGI" => aGI, "LUK" => lUK, "G" => g, "EXP" => eXP} @@enemy["攻撃"] = x @@enemy["エンカウント数"] = [0]*@@enemy["name"].length @@enemy["勝利数"] = [0]*@@enemy["name"].length @@enemy["敗北数"] = [0]*@@enemy["name"].length @@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" => ["はじめから","つづきから","ゲーム説明","クレジットタイトル"], "ロード" => ["ロードする","タイトルに戻る"], "性別" => ["男","女"], "一人称" => ["俺","僕","私"], "メニュー" => ["ステータスを見る","アイテムを見る","装備を見る","宿屋に行く","武器屋に行く","アイテムショップに行く","教会に行く","探索に行く"], "使うor使わない" => ["使う","使わない"], "宿屋" => ["泊まる10G","泊まらない"], "教会" => ["祈りを捧げる[セーブ]"], "バトル" => ["攻撃","アイテム","逃げる"], "進むor戻る" => ["深部に進む","拠点に戻る"] } @item = [] @@itemlist = [] @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], "剣技:疾風斬り" => [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] @@shop_list = ["薬草",5,0],["傷薬",10,1],["マジックポーション",20,2],["MPポーション",20,2] @@item_list = {"薬草" => [5,0], "傷薬" => [10,0], "マジックポーション" => [15,5], "MPポーション" => [0,20]} @sobi = [0,0] @@sobi_list = {"武器:木刀" => [],"防具:木製の防具" => []} @@pass = {"スーパーアカウント" => ["\e[93m\"ADMINISTRATOR\"\e[m","\e[92m\"HEALER\"\e[m"], "管理者" => ["管理者","administrator","ADMINISTRATOR"], "ヒーラー" => ["ヒーラー","HEALER","healer"]} @@key = ["name","性別","一人称","Lv","EXP","処理用EXP","前回のLvUP必要EXP","G","HP","MAXHP","MP","MAXMP","ATS","MAT","DEF","DEX","AGI","LUK","バトル数","勝利数","敗北数","逃走数"] 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 #ここでselectがStringになるのでcheckでエラーは起きない redo if select == "" || check(select) == false select = select.to_i end if mold == "moji" @select = choices[select] return choices[select] elsif mold == "suji" @select = select return select else puts"questionメソッドでスペルミスしてるようだ" end end def talk(story,mold = "置き換え") print("\n") 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"] x = h.chars n = 0 for i in x return false if false == number.include?(x[n]) n += 1 end return true end def first while true question(@@choices["プレイetc"],"moji") if @select == "はじめから" print("\n") puts("初期設定"+"="*42) print("\n") puts("PLの名前を決めてください") name = "" while name == "" print("name…") name = gets.chomp if @@pass["管理者"].include?(name) @status = {"Lv" => "\e[93m\"ADMINISTRATOR\"\e[m", "EXP" => 0, "処理用EXP" => 0, "LvUP必要EXP" => 8, "前回のLvUP必要EXP" => 0, "G" => 100000000, "HP" => 100000000, "MP" => 100000000, "ATS" => 100000000, "MAT" => 100000000, "DEF" => 100000000, "MDF" => 100000000, "DEX" => 100000000, "AGI" => 100000000, "LUK" => 100000000 } @attack << "Command:何もしない" @attack << "攻撃Command:Delete Life" puts('コード"管理者"を認証しました') puts("スーパーアカウントの使用を許可します") x = "OK" redo elsif @@pass["ヒーラー"].include?(name) @status = {"Lv" => "\e[92m\"HEALER\"\e[m", "EXP" => 0, "処理用EXP" => 0, "LvUP必要EXP" => 8, "前回のLvUP必要EXP" => 0, "G" => 30, "HP" => 100000000, "MP" => 3, "ATS" => 8, "MAT" => 5, "DEF" => 5, "MDF" => 3, "DEX" => 20, "AGI" => 15, "LUK" => 1 } @attack << "Command:何もしない" @attack << "回復Command:Soul Regeneration" puts('コード"ヒーラー"を認証しました') puts("スーパーアカウントの使用を許可します") x = "OK" redo end end if x.nil? @status = {"Lv" => 1, "EXP" => 0, "処理用EXP" => 0, "LvUP必要EXP" => 8, "前回のLvUP必要EXP" => 0, "G" => 30, "HP" => 20, "MP" => 3, "ATS" => 8, "MAT" => 5, "DEF" => 5, "MDF" => 3, "DEX" => 20, "AGI" => 15, "LUK" => 1 } end @status["name"] = name @status["バトル数"] = 0 @status["勝利数"] = 0 @status["敗北数"] = 0 @status["逃走数"] = 0 @status["MAXHP"] = @status["HP"] @status["MAXMP"] = @status["MP"] print("\n") puts("性別を決めてください") @status["性別"] = question(@@choices["性別"],"moji") print("\n") puts("一人称を決めてください") @status["一人称"] = question(@@choices["一人称"],"moji") talk("目覚め") menu elsif @select == "つづきから" redo puts("セーブデータが ない場合はプログラムが強制終了されますが よろしいですか") question(@@choices["ロード"],"moji") if @select == "タイトルに戻る" redo end data = CSV.read("RPG.csv") @status = data["ステータス"] @item = data["アイテム"] menu elsif @select == "ゲーム説明" talk("ゲーム説明","読み上げ") elsif @select == "クレジットタイトル" talk("クレジットタイトル","読み上げ") end end end def display print("\n") puts("="*50) printf("name:%s Lv.%s ",@status["name"],@status["Lv"]) if @status["EXP"].nil? == false printf("EXP:%d %dG\n",@status["EXP"],@status["G"]) printf("HP:%d/%d MP:%d/%d",@status["HP"],@status["MAXHP"],@status["MP"],@status["MAXMP"]) else print("%sG\n",@status["G"]) print("HP:%s MP:%s",@status["HP"],@status["MP"]) end printf("ATS:%s MAT:%s DEF:%s MDF:%s DEX:%s AGI:%s LUK:%s",@status["ATS"],@status["MAT"],@status["DEF"],@status["MDF"],@status["DEX"],@status["AGI"],@status["LUK"]) print("\n") puts("="*50) print("\n") end def item print("\n") puts("="*50) if @item.length == 0 puts("所持アイテムはありません") else while true x = @item + ["戻る"] question(x,"suji") n = @select i = x[n] if x[n] == x[-1] @select = "戻る" return end if question(@@choices["使うor使わない"],"moji") == "使う" @status["HP"] += @@item_list[i][0] @status["MP"] += @@item_list[i][1] if @status["HP"] > @status["MAXHP"] @status["HP"] = @status["MAXHP"] end if @status["MP"] > @status["MAXMP"] @status["MP"] = @status["MAXMP"] end @item.delete_at(n) puts("="*50) print("\n") break else redo end end end puts("="*50) print("\n") end def kyoukai return # 未完成だから? question(@@choices["教会"]+["戻る"],"moji") if @select == "祈りを捧げる[セーブ]" print("Praying(Saving)") dot(["."]*3,1) items = @item.join("/") data = [] n = 0 for i in @@key data << @status[i] end data << items p data CSV.open("RPG.csv","w") do |c| data.each{|row| c << row} end elsif @select == "戻る" return end end def yadoya puts("宿屋の主人:一泊10Gだよ") if question(@@choices["宿屋"],"moji") == "泊まる10G" if not @status["G"] >= 10 puts("宿屋の主人:お前 金持ってないのか!?") puts("宿屋の主人:冷やかしは帰れ!!") return else @status["G"] -= 10 end @status["HP"] = @status["MAXHP"] @status["MP"] = @status["MAXMP"] print("Sleeping") dot(["."]*3,1) print("\n") else puts("宿屋の主人:なんだ 泊まんねーのかよ") end end def item_shop puts("店の店主:どれを買う?") x = 0 a = [] b = [] for i in @area x += 1 if /クリア/ =~ i end for i in @@shop_list if i[2] <= x a << i[0] b << i[1] end end question(a+["戻る"],"suji") if @select == a.length return end if @status["G"] >= b[@select] @status["G"] -= b[@select] @item << a[@select] puts("店の店主:ありがとな また買ってくれ") else puts("店の店主:こら お金もないのに 買うと言わない!") end end def dot(dot,matu) for i in dot print i sleep(matu) end end def tansaku x = @area + ["戻る"] select = question(x,"moji") if select == "エリア1:ポルタ平原" battle(0,3,select,5,"プリーンビーストロード戦闘前","プリーンビーストロード勝利後") end end def encounter(list) return list[rand(list.length)] end 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") printf("%s\e[mに勝った!\n",@@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"]/10).floor + 10)#Gを減らす if @status["G"] < 0 #Gが0未満になった場合 @status["G"] = 0 end @status["敗北数"] += 1 @@enemy["敗北数"][@teki] += 1 return elsif @result == "逃走" @status["逃走数"] += 1 return end question(@@choices["進むor戻る"],"moji") if @select == "拠点に戻る" return end end x = /クリア/ !~ area if false == x puts("もう先には行けなさそうだ") return end puts("この先から禍々しい気配がする") question(@@choices["進むor戻る"],"moji") 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 def gameovre puts("GAMEOVER") picture = spawn "display -geometry +0+0 gameover.png" gets Process.kill(:INT,picture) end def syouhai if @@enemy["HP"][@teki] <= 0 || @status["HP"] <= 0 || @result == "逃走" return true end return false end def game print("戦闘") dot(["="]*20,0.01) print("\n") @@enemy["HP"][@teki] = @@enemy["MAXHP"][@teki] printf("%s\e[mが現れた",@@enemy["name"][@teki]) turn = rand(2) @result = "戦闘" while true if @status["DEX"] > @@enemy["DEX"][@teki] myturn break if syouhai == true enemyturn elsif @status["DEX"] < @@enemy["DEX"][@teki] enemyturn break if syouhai == true myturn elsif @status["DEX"] == @@enemy["DEX"][@teki] if ture == 0 myturn break if syouhai == true enemyturn else enemyturn break if syouhai == true myturn end end break if syouhai == true end if @status["HP"] <= 0 @result = "負け" elsif @@enemy["HP"][@teki] <= 0 @result = "勝ち" end end def enemyturn @turn = "敵" x = ["攻撃","剣技","魔法","魔剣","回復"] @waza = encounter(@@enemy["攻撃"][@teki]) type = x.index(@waza[0..1]) puts @waza if type == 2 magic elsif type == 3 magic_sword elsif type == 4 heal else sword end end def sword 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 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 @@enemy["HP"][@teki] -= @damage end process end def magic mp = @@attack_list[@waza][2] + rand(4) if @turn == "敵" if mp > @@enemy["MP"][@teki] 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][0] - (@status["MDF"]/3).floor - (@status["MP"]/5).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[2] end if mp > @status["MP"] mp = @status["MP"] end @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 process end def magic_sword mp = @@attack_list[@waza][2] + rand(4) if @turn == "敵" if mp > @@enemy["MP"][@teki] mp = @@attack_list[@waza][2] end if mp > @@enemy["MP"][@teki] mp = @@enemy["MP"][@teki] end @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] end if mp > @status["MP"] mp = @status["MP"] end @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 process end def heal mp = @@attack_list[@waza][1] + rand(4) if @turn == "敵" if mp > @@enemy["MP"][@teki] # ? mp = @@attack_list[@waza][1] end if mp > @@enemy["MP"][@teki] mp = @@enemy["MP"][@teki] end @damage = @@attack_list[@waza][0] + mp + rand(4) @@enemy["HP"][@teki] += @smgw @@enemy["HP"][@teki] = @@enemy["MAXHP"][@teki] if @@enemy["HP"][@teki] > @@enemy["MAXHP"][@teki] elsif @turn == "PL" mp = @@attack_list[@waza][1] if mp > @status["MP"] # ? mp = @status["MP"] if mp > @status["MP"] @damage = @@attack_list[@waza][0] + mp + rand(4) @status["HP"] += @damage @status["HP"] = @status["MAXHP"] if @status["HP"] > @status["MAXHP"] end process("回復") end def myturn display while true question(@@choices["バトル"],"moji") if @select == "攻撃" x = @attack + ["戻る"] @waza = question(x,"moji") redo if @waza == "戻る" 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 break if not @select == "戻る" elsif @select == "逃げる" if not (/ボス/ !~ @@enemy["name"][@teki]) == 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 end end end def level if not @status["Lv"] == 99 && @@pass["スーパーアカウント"].include?(@status["Lv"]) == true while 0 >= @status["LvUP必要EXP"]-@status["処理用EXP"] puts("レベルアップ!") @status["Lv"] += 1 printf("Lv%s→Lv%s\n",@status["Lv"]-1,@status["Lv"]) @status["処理用EXP"] -= @status["LvUP必要EXP"] @status["前回のLvUP必要EXP"] = @status["LvUP必要EXP"] @status["LvUP必要EXP"] = (@status["前回のLvUP必要EXP"]*1.1).ceil @status["MAXHP"] = (@status["MAXHP"]*1.053).ceil @status["MAXMP"] = (@status["MAXMP"]*1.044).ceil @status["ATS"] = (@status["ATS"]*1.05).ceil @status["MAT"] = (@status["MAT"]*1.035).ceil @status["DEF"] = (@status["DEF"]*1.043).ceil @status["MDF"] = (@status["MDF"]*1.04).ceil @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 @status["DEF"] = 150 @status["DEX"] = 250 @status["AGI"] = 200 end end end display end 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 end def menu while true select = question(@@choices["メニュー"],"moji") print("\n") if select == "ステータスを見る" display elsif select == "アイテムを見る" item elsif select == "装備を見る" elsif select == "宿屋に行く" yadoya elsif select == "武器屋に行く" elsif select == "アイテムショップに行く" item_shop elsif select == "教会に行く" kyoukai elsif select == "探索に行く" tansaku end end end end x = RPG.new x.first