diff --git a/akumazzz.rb b/akumazzz.rb new file mode 100644 index 0000000..4fd2500 --- /dev/null +++ b/akumazzz.rb @@ -0,0 +1,236 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +require 'cgi' +c = CGI.new(:accept_charset => "UTF-8") +print "Content-type: text/html; charset=UTF-8\n\n" + +# + + +nendo=c["nendo"] +gakkou=c["gakkou"] +gakunen=c["gakunen"] +kurasu=c["kurasu"] +han=c["han"] +i=c["i"].to_i +name=c["name"] +var1=c["tenshi"] +var2=c["go"] +time=c["time"] + +open("tenshi.csv","a:utf-8") do |tenshi| + tenshi.printf("%d,%s,%s,%s,%d,%s,%d,%d,%d,%d\n",time,name,var1,var2,nendo,gakkou,gakunen,kurasu,han,i) +end + + +i==0 + + +kekka=Hash.new + +require'csv' +date=CSV.read("tenshi.csv", :headers=>false, encoding: 'utf-8') +date.each do |row| + if row[4]==nendo&&row[5]==gakkou&&row[6]==gakunen&&row[7]==kurasu&&row[8]==han + if kekka.key?(row[1]) == false #その人のデータがまだ代入されていなければ + kekka[row[1]]=Array.new #valueを配列にする + end + kekka[row[1]]<<[row[0],row[9],row[2],row[3]] #<<で配列の末尾に右辺を追加 + i+=1 + end +end + +p kekka + +a=0 +zahyo=[] + +for hoge,akumado in kekka +a+=1 + p a + for result in akumado + if result[1] == "1" + case1 = result + zahyo[a]=[hoge,case1[2].to_i] + elsif result[1] == "2" + case2 = result + zahyo[a] << case2[2].to_i + elsif result[1] == "3" + case3 = result + zahyo[a] << case3[2].to_i + end + end + printf("

%sさんの結果 1回目:悪魔・天使度 %d GO&STOP %s

\n",hoge,case1[2],case1[3]) + printf("

%sさんの結果 2回目:悪魔・天使度 %d GO&STOP %s

\n",hoge,case2[2],case2[3]) + printf("

%sさんの結果 3回目:悪魔・天使度 %d GO&STOP %s

\n",hoge,case3[2],case3[3]) +end + + +if a==1 + zishaku1="zishaku.red.png" + +elsif a==2 + zishaku1="zishaku.red.png" + zishaku2="zishaku.blue.png" + +elsif a==3 + zishaku1="zishaku.red.png" + zishaku2="zishaku.blue.png" + zishaku3="zishaku.green.png" + +elsif a==4 + zishaku1="zishaku.red.png" + zishaku2="zishaku.blue.png" + zishaku3="zishaku.green.png" + zishaku4="zishaku.purple.png" + +elsif a==5 + zishaku1="zishaku.red.png" + zishaku2="zishaku.blue.png" + zishaku3="zishaku.green.png" + zishaku4="zishaku.purple.png" + zishaku5="zishaku.lightblue.png" + +elsif a==6 + zishaku1="zishaku.red.png" + zishaku2="zishaku.blue.png" + zishaku3="zishaku.green.png" + zishaku4="zishaku.purple.png" + zishaku5="zishaku.lightblue.png" + zishaku6="zishak.yello.png" + +end + + +print"
\n" + +print"

1

\n" +print"

2

\n" +print"

3

\n" +print"

4

\n" +print"

5

\n" +print"

6

\n" +print"

7

\n" +print"

8

\n" +print"

9

\n" + +print"
\n" + +print"
\n" + +print"

1

\n" +print"

2

\n" +print"

3

\n" +print"

4

\n" +print"

5

\n" +print"

6

\n" +print"

7

\n" +print"

8

\n" +print"

9

\n" + +print"
\n" + +print"
\n" + +print"

1

\n" +print"

2

\n" +print"

3

\n" +print"

4

\n" +print"

5

\n" +print"

6

\n" +print"

7

\n" +print"

8

\n" +print"

9

\n" + +print"
\n" + +p zahyo + +zishaku_y = [0,25,80,135,190,245,300,355,410,465] +zishaku_x = [0,50,75,100,125,150,175] + +p zishaku_x[zahyo[1][1]] +p zishaku_y[zahyo[1][1]] + + +print"結果\n" +print"\n" + +print"\n" + +print"

#{han}班の結果

\n" + + + + + + + +print"\n" +print"\n" diff --git a/zzzz.rb b/zzzz.rb new file mode 100755 index 0000000..87b4c81 --- /dev/null +++ b/zzzz.rb @@ -0,0 +1,1104 @@ +#!/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"] + eturan = e["閲覧必要レベル"] + + @@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, + "閲覧必要レベル" => eturan + } + + @@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" => ["はじめから","つづきから","ゲーム説明","クレジットタイトル"], + "ロード" => ["ロードする","タイトルに戻る"], + "役職" => ["剣士","魔法使い"], + "性別" => ["男","女"], + "一人称" => ["俺","僕","私"], + "メニュー" => ["ステータスを見る","アイテムを見る","装備を見る","宿屋に行く","武器屋に行く","アイテムショップに行く","教会に行く","探索に行く","Command"], + "使うor使わない" => ["使う","使わない"], + "宿屋" => ["泊まる10G","泊まらない"], + "教会" => ["祈りを捧げる[セーブ]"], + "バトル" => ["攻撃","アイテム","逃げる"], + "進むor戻る" => ["深部に進む","拠点に戻る"], + "ステータスチェック" => ["ステータス省略表示","スキル表示","全ステータスの表示"] + } + + @item = [] + + @@itemlist = [] + + @area = ["エリア1:ポルタ平原"] + + @attack = ["剣技:スラッシュ"] + @support_skill = [] + @special_skill = ["叡智"] + + @@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] #<=管理者特権 + } + + @@support_skill_list = {"HP自動回復・極" => [0,50,0], + "MP自動回復・極" => [0,0,80], + "剣術の極み" => [], + "魔導の極み" => [], + + #いつか作りたい七つの大罪&七つの美徳シリーズ + "傲慢" => [], #全ステータスアップ? + "憤怒" => [], #数ターンATS&DEX超アップその他低下? + "嫉妬" => [], #相手のLvに応じてステータスアップ? + "怠惰" => [], #相手の攻撃命中率&防御力低下? + "強欲" => [], #お金アップ? + "暴食" => [], #アイテムによるステータスアップの効果アップ? + "色欲" => [], #敵方への異常状態絶対成功? + "謙譲" => [], #相手のステータス低下? + "慈悲" => [], #死亡時のペナルティの軽減? + "忍耐" => [], #死んでも耐える的な? + "勤勉" => [], #経験値アップ? + "救恤" => [], #回復技の効果アップ? + "節制" => [], #命中率アップ? + "純潔" => [], #状態異常無効? + + "禁忌" => [] #未定? + } + + @@special_skill_list = ["叡智", + "鑑定Lv.1","鑑定Lv.2","鑑定Lv.3","鑑定Lv.4","鑑定Lv.5", + "鑑定Lv.6","鑑定Lv.7","鑑定Lv.8","鑑定Lv.9","鑑定Lv.10" #モンスター図鑑が見れる? + ] + + @@title_list = {"七つの大罪を犯すもの" => [], + "七つの美徳を守るもの" => [], + "叡智なるもの" => [], + "大迷宮の踏破者" => [], + "迷宮の踏破者" => [], + "スライムハンター" => [], + "草原の覇者" => [], + "森の覇者" => [], + "洞窟の覇者" => [], + "海の覇者" => [], + "火山の覇者" => [], + "到達点に達するもの" => [], + "禁忌なるもの" => [], + "大富豪" => [], + "魔物の天敵" => [], + "魔導神" => [], + "剣神" => [], + "勇者たるもの" => [], + "宿のお得意さん" => [] + + } + + @@unique_skill_list = ["鑑定Lv.1","鑑定Lv.2","鑑定Lv.3","鑑定Lv.4","鑑定Lv.5","鑑定Lv.6","鑑定Lv.7","鑑定Lv.8","鑑定Lv.9","鑑定Lv.10"] + + @@ultimate_skill_list = ["叡智","傲慢","憤怒","嫉妬","怠惰","強欲","暴食","色欲","謙譲","慈悲","忍耐","勤勉","救恤","節制" ,"純潔","禁忌"] + + + + @@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 = {"武器:木刀" => [],"防具:木製の防具" => []} + + @@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 + 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 + 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.split("") + n = 0 + for i in x + if false == number.include?(x[n]) + return false + end + n += 1 + end + return true + end + + + def first + while true + question(@@choices["プレイetc"],"moji") + if @select == "はじめから" + print("\n") + puts("初期設定"+"="*42) + print("\n") + puts("役職は何にしますか?") + puts("PLの名前を決めてください") + name = "" + while name == "" + print("name…") + name = gets.chomp + @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") + 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(mold = "PL") + if mold == "PL" + print("\n") + puts("="*50) + printf("name:%s 役職:%s Lv.%d EXP:%d %dG\n",@status["name"],@status["役職"],@status["Lv"],@status["EXP"],@status["G"]) + printf("HP:%d/%d MP:%d/%d\n",@status["HP"],@status["MAXHP"],@status["MP"],@status["MAXMP"]) + printf("ATS:%d MAT:%d DEF:%d MDF:%d DEX:%d AGI:%d LUK:%d\n",@status["ATS"],@status["MAT"],@status["DEF"],@status["MDF"],@status["DEX"],@status["AGI"],@status["LUK"]) + puts("="*50) + print("\n") + elsif mold == "敵" + x = @special_skill.grep(/鑑定..../) + y = @special_skill.include?("叡智") + if x == [] && y == false + return + end + if y + print("\n") + puts("="*50) + printf("種族:%s\n",@@enemy["name"][@teki]) + printf("HP:%d/%d MP:%d/%d\n",@@enemy["HP"][@teki],@@enemy["MAXHP"][@teki],@@enemy["MP"][@teki],@@enemy["MAXMP"][@teki]) + printf("ATS:%d MAT:%d DEF:%d MDF:%d DEX:%d AGI:%d LUK:%d\n",@@enemy["ATS"][@teki],@@enemy["MAT"][@teki],@@enemy["DEF"][@teki],@@enemy["MDF"][@teki],@@enemy["DEX"][@teki],@@enemy["AGI"][@teki],@@enemy["LUK"][@teki]) + puts("="*50) + print("\n") + return + end + x = x[5..].to_i + if x > @@enemy["閲覧必要レベル"][@teki] + print("\n") + puts("="*50) + printf("種族:%s\n",@@enemy["name"][@teki]) + printf("HP:%d/%d MP:%d/%d\n",@@enemy["HP"][@teki],@@enemy["MAXHP"][@teki],@@enemy["MP"][@teki],@@enemy["MAXMP"][@teki]) + printf("ATS:%d MAT:%d DEF:%d MDF:%d DEX:%d AGI:%d LUK:%d\n",@@enemy["ATS"][@teki],@@enemy["MAT"][@teki],@@enemy["DEF"][@teki],@@enemy["MDF"][@teki],@@enemy["DEX"][@teki],@@enemy["AGI"][@teki],@@enemy["LUK"][@teki]) + puts("="*50) + print("\n") + elsif x >= @@enemy["閲覧必要レベル"][@teki] + else + print("\n") + puts("="*50) + puts("鑑定不能") + puts("="*50) + print("\n") + end + elsif mold == "詳細" + question(@@choices["ステータスチェック"],"moji") + if @select == "ステータス省略表示" + print("\n") + puts("="*50) + printf("name:%s 役職:%s Lv.%d EXP:%d %dG\n",@status["name"],@status["役職"],@status["Lv"],@status["EXP"],@status["G"]) + printf("HP:%d/%d MP:%d/%d\n",@status["HP"],@status["MAXHP"],@status["MP"],@status["MAXMP"]) + printf("ATS:%d MAT:%d DEF:%d MDF:%d DEX:%d AGI:%d LUK:%d\n",@status["ATS"],@status["MAT"],@status["DEF"],@status["MDF"],@status["DEX"],@status["AGI"],@status["LUK"]) + puts("="*50) + print("\n") + elsif @select == "スキル表示" + x = 0 + for i in @attack + x += 1 + print i + if x == 10 + print("\n") + x = 0 + end + end + if not x == 0 + print("\n") + end + x = 0 + for i in @support_skill + x += 1 + print i + if x == 10 + print("\n") + x = 0 + end + end + if not x == 0 + print("\n") + end + x = 0 + for i in @special_skill + x += 1 + print i + if x == 10 + print("\n") + x = 0 + end + end + if not x == 0 + print("\n") + end + x = 0 + + elsif @select == "全ステータス表示" + + end + end + end + #print("\n") + #puts("="*50) + + #puts("="*50) + #print("\n") + + 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 + y = /クリア/ !~ i + if y == false + x += 1 + end + 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 effect #========================================================================== + return + x = @@support_skill_list[i][0] + for i in @support_skill + if @@support_skill_list[i][0] == 0 + x = @time + end + if @time <= x + @status["HP"] += @@support_skill_list[i][1] + @status["MP"] += @@support_skill_list[i][2] + end + end + end + + def game + print("戦闘") + dot(["="]*20,0.01) + print("\n") + @@enemy["HP"][@teki] = @@enemy["MAXHP"][@teki] + printf("%s\e[mが現れた\n",@@enemy["name"][@teki]) + @time = 1 + move = rand(2) + @result = "戦闘" + while true + printf("第%sターン\n",@time) + if @status["DEX"] > @@enemy["DEX"][@teki] + myturn + if syouhai == true + break + end + enemyturn + elsif @status["DEX"] < @@enemy["DEX"][@teki] + enemyturn + if syouhai == true + break + end + myturn + elsif @status["DEX"] == @@enemy["DEX"][@teki] + if move == 0 + myturn + if syouhai == true + break + end + enemyturn + else + enemyturn + if syouhai == true + break + end + myturn + end + end + if syouhai == true + break + end + @time += 1 + print("\n") + effect + end + if not @result == "逃走" + if @status["HP"] <= 0 + @result = "負け" + elsif @@enemy["HP"][@teki] <= 0 + @result = "勝ち" + end + end + end + + def enemyturn + @turn = "敵" + display("敵") + 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 + if @@enemy["HP"][@teki] > @@enemy["MAXHP"][@teki] + @@enemy["HP"][@teki] = @@enemy["MAXHP"][@teki] + end + elsif @turn == "PL" + if mp > @status["MP"] + mp = @@attack_list[@waza][1] + end + if mp > @status["MP"] + mp = @status["MP"] + end + @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 + while true + question(@@choices["バトル"],"moji") + if @select == "攻撃" + x = @attack + ["戻る"] + @waza = question(x,"moji") + if @waza == "戻る" + redo + end + print("\n") + 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 + if not @select == "戻る" + break + end + elsif @select == "逃げる" + x = /ボス/ !~ @@enemy["name"][@teki] + print("\n") + 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 + end + end + end + + def level + if not @status["Lv"] == 99 + 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 command + puts("コマンドを出力してください") + x = gets.chomp + if x == "叡智" + @special_skill << "叡智" + 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 + elsif select == "Command" + command + end + end + end + +end + +x = RPG.new +x.first +