diff --git a/RPG.rb b/RPG.rb index 4a679c4..5680073 100755 --- a/RPG.rb +++ b/RPG.rb @@ -12,7 +12,7 @@ lv = [1,0] #レベル関連 #Lv(レベル)EXP(経験値) -g = 0 #お金(Gold) +g = 30 #お金(Gold) progress = 0 #ストーリーの進行度 @@ -41,10 +41,17 @@ "\e[96m_me_:魔王を倒さなければ", "\e[96m_me_:なぜだか わからないけど そんな気がする", "\e[96m_me_:あっ そして ここは どこなんだろう", - "\e[96m_me_:そこの お方 ここが どこか わかりますか", + "(近くに村人らしき人が見える)", + "\e[96m_me_:すみません ここが どこか わかりますか", "\e[2m村人:何いってるんだい?", "\e[2m村人:ここは「パクス村」ディーヴァス川のほとりにある小さな農村さ", "\e[2m村人:ここが初めてなら注意しておくけど「ポルタ平原」には魔物が出るから用意なしには行くなよ", + "\e[2m村人:まぁ旅人なら宿屋で休んでいきな", + "\e[96m_me_:あっ _jibun_ お金持ってないんですけど", + "\e[2m村人:なんだお前さん一文無しかよ", + "\e[2m村人:しかたねーなー ここで会ったのも何かの縁だ", + "\e]2m村人:30Gやるから あとは魔物でも倒して自分でを稼げ", + "(_me_は村人から30Gをもらった)", "\e[2m村人:じゃぁな", "\e[96m_me_:とりあえずポルタ平原を探索しようかな"] #最初の会話シーン @@ -72,12 +79,16 @@ [8,8,15,15,0,8,20,35,25,3,13,"Error","闇の刃"],[12,12,20,20,6,0,30,8,8,1,30,"突進","Error"]] #モンスターの能力値 +kakuritu = [[[0]*75 + [1]*15 + [2]*5 + [3]*5]] + status = [] #PLが入力する[名前、性別、一人称etc.] item = [] #アイテム area = [] #探索に行けるエリア +searchselect = ["深部に進む","拠点に戻る"] + sentaku = ["プレイ","ゲーム説明","クレジットタイトル"] q1 = ["男","女"] #性別 @@ -158,14 +169,6 @@ sleep(time) print(ten) end - print("\n") -end - -def dot2(time,kaisu) #「=」のためにいろいろ打ちたくなかったのメソッド - for i in 1..kaisu - sleep(time) - print("=") - end end def description(hanasi) #会話を出すためのメソッド @@ -186,194 +189,249 @@ end end -def encounter(probability) #何のモンスターが出現するか決めてくれるメソッド - encounter = probability[rand(probability.length)] +def encounter(list) #何のモンスターが出現するか決めてくれるメソッド + return list[rand(list.length)] end def enemyturn(probability,monster,enemy,ability,current) #敵のターンの一連の処理をまとめたメソッド - data = [] - if rand(((enemy[probability][4]*1.5).round) + 1) <= rand(enemy[probability][5] + 1) #左:物理攻撃 右:魔法攻撃 - data << enemymagic(probability,monster,enemy,ability,current) #魔法攻撃 - if rand(enemy[probability][8]*2 + enemy[probability][7] + (enemy[probability][9]/2).floor) > rand(((ability[5]*2 + ability[5] + (ability[7]/2).floor)/2).floor) - return data - end + if rand(((enemy[probability][4]*1.5).round) + 1) < rand(enemy[probability][5] + 1) #左:物理攻撃 右:魔法攻撃 + enemymagic(probability,monster,enemy,ability,current) #魔法攻撃 else - data << enemyattack(probability,monster,enemy,ability,current) #物理攻撃 - if rand(enemy[probability][8]*2 + enemy[probability][7] + (enemy[probability][9]/2).floor) > rand(((ability[5]*2 + ability[6] + (ability[7]/2).floor)/2).floor) - return data - end + enemyattack(probability,monster,enemy,ability,current) #物理攻撃 end - return 0 end -def process1(data) #攻撃失敗・攻撃以外の行動(PLのアイテムや逃げる)・ダメージの表示をするメソッド - if data[0][0] == 0 +def process(damage) #ダメージの表示をする + if damage < 1 puts("攻撃失敗") - elsif data[0][0] == "他" - data[0][0] = 0 - return data else - printf("%dダメージ\n",data[0][0]) #ダメージの表示 + printf("%dダメージ\n",damage) #ダメージの表示 end - return data end def battle(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) #バトルの一連の処理をまとめた"すごい"メソッド - printf("%s\e[mが現れた\n",monster[probability]) + escape = 1 + printf("%s\e[mが現れた\n",monster) print("戦闘") dot(0.01,28,"=") print("\n") turn = rand(2) + enemy[probability][0] = enemy[probability][1] + enemy[probability][2] = enemy[probability][3] while true if current[0] <= 0 return 0 #負け elsif enemy[probability][0] <= 0 return 1 #勝ち + elsif escape == 0 + return 2 end if ability[5] < enemy[probability][7] #敵の方がDEXが早かったとき - data = enemyturn(probability,monster,enemy,ability,current) - process1(data) - current[0] -= data[0][0] - enemy[probability][2] -= data[0][1] - enemy[probability][0] -= data[0][2] - + enemyturn(probability,monster,enemy,ability,current) + if current[0] <= 0 return 0 #負け elsif enemy[probability][0] <= 0 return 1 #勝ち + elsif escape == 0 + return 2 end - data = myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) - process1(data) - enemy[probability][0] -= data[0] - current[1] -= data[1] - current[0] -= data[2] + myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect,escape) elsif ability[5] = enemy[probability][7] #敵とPLのDEXが同じ値だったとき if turn == 0 - data = myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) - process1(data) - enemy[probability][0] -= data[0] - current[1] -= data[1] - current[0] -= data[2] + myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect,escape) if current[0] <= 0 return 0 #負け elsif enemy[probability][0] <= 0 return 1 #勝ち + elsif escape == 0 + return 2 end - data = enemyturn(probability,monster,enemy,ability,current) - process1(data) - current[0] -= data[0][0] - enemy[probability][1] -= data[0][1] - enemy[probability][0] -= data[0][2] + enemyturn(probability,monster,enemy,ability,current) else - - data = enemyturn(probability,monster,enemy,ability,current) - process1(data) - current[0] -= data[0][0] - enemy[probability][2] -= data[0][1] - enemy[probability][0] -= data[0][2] + enemyturn(probability,monster,enemy,ability,current) if current[0] <= 0 return 0 #負け elsif enemy[probability][0] <= 0 return 1 #勝ち + elsif escape == 0 + return 2 end - data = myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) - process1(data) - enemy[probability][0] -= data[0] - current[1] -= data[1] - current[0] -= data[2] - + myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect,escape) end elsif ability[5] > enemy[probability][5] #PLの方がDEXが早かったとき - data = myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,battleselect) - process1(data) - enemy[probability][0] -= data[0] - current[1] -= data[1] - current[0] -= data[0][2] + myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,battleselect,escape) if current[0] <= 0 return 0 #負け elsif enemy[probability][0] <= 0 return 1 #勝ち + elsif escape == 0 + return 2 end - - data = enemyturn(probability,monster,enemy,ability,current) - process1(data) - current[0] -= data[0] - enemy[probability][2] -= data[1] - enemy[probability][0] -= data[2] + + enemyturn(probability,monster,enemy,ability,current) end end end def enemymagic(probability,monster,enemy,ability,current) #敵の魔法攻撃の処理 - data = [] if not enemy[probability][2] == 0 + print("\n") printf("%s\e[mの攻撃\n",monster[probability]) mp = (enemy[probability][3])/10.round + rand(3)+1 if mp > enemy[probability][2] mp = enemy[probability][2] - elsif mp > 1000 - mp = 1000 + elsif mp > 100 + mp = 100 end - data << (enemy[probability][5] * (mp / 2).round - current[1] / 2).floor + damage = (enemy[probability][5] + (mp / 2).round - current[1] / 2).floor printf("%s!",enemy[probability][12]) - data << mp - data << 0 - if data[0] < 1 - data[0] = rand(3)+1 + enemy[probability][2] -= mp + damage += (damage/10).floor*rand(3) + rand(4) + if damage < 1 + damage = rand(4) end - return data + if rand(enemy[probability][8]*2 + enemy[probability][7] + (enemy[probability][9]/2).floor*2) > rand(((ability[5]*2 + ability[6] + (ability[7]/2).floor)/2).floor) + if rand(enemy[probability][8]*2 + enemy[probability][7] + (enemy[probability][9]/2).floor/4) > rand(((ability[5]*2 + ability[6] + (ability[7]/2).floor)/2).floor) + damage = (damage*1.5).floor + end + current[0] -= damage + else + damage = 0 + end else - return [[0,0,0]] + damage = 0 end + process(damage) end def enemyattack(probability,monster,enemy,ability,current) #敵の物理攻撃の処理 - data = [] + print("\n") printf("%s\e[mの攻撃\n",monster[probability]) - data << enemy[probability][4] - ability[4]/2.floor + damage = enemy[probability][4] - ability[4]/2.floor + damage += (damage/10).floor*rand(3) + rand(4) printf("%s!",enemy[probability][11]) - data << 0 - data << 0 - if data[0] < 1 - data[0] = rand(3)+1 + if damage < 1 + damage = rand(4) end - return data + if rand(enemy[probability][8]*2 + enemy[probability][7] + (enemy[probability][9]/2).floor*2) > rand(((ability[5]*2 + ability[6] + (ability[7]/2).floor)/2).floor) + if rand(enemy[probability][8]*2 + enemy[probability][7] + (enemy[probability][9]/2).floor/4) > rand(((ability[5]*2 + ability[6] + (ability[7]/2).floor)/2).floor) + damage = (damage*1.5).floor + end + current[0] -= damage + else + damage = 0 + end + process(damage) end -def myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) - data = [] +def myturn(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect,escape) status(status,ability,current,nani,lv,g) select = question("行動…",battleselect) if select == "攻撃" select = query("攻撃…",attack) damage = ability[2] * attackdetail[select][0] - ((enemy[probability][6] / 2).floor) - if rand(enemy[probability][8]*2 + enemy[probability][7] + (enemy[probability][9]/2).floor) > rand(((ability[probability][5]*2 + ability[probability][6] + (ability[probability][7]/2).floor)/2).floor) - data << damage - else - data << 0 + damage += (damage/10).floor*rand(3) + rand(4) + if damage <= 0 + damage = rand(4) end - data << attackdetail[select][1] - data << attackdetail[select][2] + if rand(enemy[probability][7]*2 + enemy[probability][8] + (enemy[probability][9]/2).floor) < rand((((ability[6]*2 + ability[5] + (ability[7]/2).floor)/2).floor)*2) + if rand(enemy[probability][7]*2 + enemy[probability][8] + (enemy[probability][9]/2).floor) < rand(((ability[6]*2 + ability[5] + (ability[7]/2).floor)/2).floor/4) + damage = (damage*1.5).floor + end + else + damage = 0 + end + current[1] -= attackdetail[select][1] + current[0] -= attackdetail[select][2] printf("%s!",attack[select]) - return data + + enemy[probability][0] -= damage + process(damage) + + elsif select == "アイテム" + + + elsif select == "逃げる" + if rand((anility[5] + ability[7])*2) > rand(enemy[probability][7] + enemy [probability][9]) + puts("逃げ切れた") + escape = 0 + return + else + puts("逃げ切れなかった") + return + end + end end #detaの配列は[0]がダメージ[1]が消費MP[2]が反動ダメージ +def game(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) + sleep(rand(40)/10) + result = battle(probability,monster[probability],enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) + if 0 == result + gameovre #GAMEOVREのメソッド + current[0] = ability[0] #HP全快 + current[1] = ability[1] #MP全快 + g -= (g/10).floor + 10 #Gを減らす + if g < 0 #Gが0未満になった場合 + g = 0 + end + return 0 + + elsif 1 == result + print("\n") + printf("%sに勝った!\n",monster[probability]) + lv[1] += enemy[probability][10] + ((enemy[probability][10]/10).floor * (rand(3) + 1) + (rand(3) + 1)) + g += ((enemy[probability][10] + ((enemy[probability][10]/10).floor * (rand(3) + 1) + (rand(3) + 1)))*1.5).floor + select = question("どうする",searchselect) + if select == "拠点に戻る" + return 0 + end + elsif 2 == result + return 0 + end +end + +def appearance(monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect,kakuritu,n,limit,searchselect) + while n = limit + probability = encounter(kakuritu[n]) + if 0 == game(monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) + return 0 + end + n += 1 + if n == limit + puts("この先から禍々しい気配がする それでも進みますか?") + if "深部に進む" == question("どうする",searchselect) + #ボス用メソッド + else + return 0 + end + end + end +end + +def gameovre + puts("GAMEOVER") + picture = spawn "display -geometry +0+0 gameover.png" + gets + Process.kill(:INT,picture) +end + puts("RPG") #ここから やっとメソッドじゃない select = question("選択",sentaku) if select == "ゲーム説明" @@ -446,20 +504,13 @@ elsif y == "探索に行く" select = question("どこに探索に行きますか",area) #どこに行くかの選択 - - if select == "ポルタ平原" - sleep(rand(3)) - probability = encounter([0]*75 + [1]*15 + [2]*5 + [3]*500) #出現するモンスターと その確率を決めてメソッドを使う - game = battle(probability,monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect) - - if 0 == game - gameovre #GAMEOVREのメソッド - elsif 1 == game - print("\n") - printf("%sに勝った!\n",monster[probability]) - lv[1] += enemy[probability][10] + ((enemy[probability][10]/10).floor * (rand(3) + 1) + (rand(3) + 1)) - g += ((enemy[probability][10] + ((enemy[probability][10]/10).floor * (rand(3) + 1) + (rand(3) + 1)))*1.5).floor + if select == "ポルタ平原" + n = 0 + limit = 5 + if 0 == appearance(monster,enemy,ability,current,item,status,nani,lv,g,attack,attackdetail,battleselect,kakuritu,n,limit,searchselect) + redo end + end end end diff --git a/gameover.png b/gameover.png new file mode 100644 index 0000000..7b61304 --- /dev/null +++ b/gameover.png Binary files differ diff --git a/picturetest b/picturetest new file mode 100755 index 0000000..d05e3ea --- /dev/null +++ b/picturetest @@ -0,0 +1,6 @@ +#!/use/bin/env ruby +# -*- coding: utf-8 -*- + +pid = spawn "display -geometry +10+20 gameover.png" +sleep(10) +Process.kill(:INT,pid) diff --git a/picturetest.rb b/picturetest.rb new file mode 100755 index 0000000..d05e3ea --- /dev/null +++ b/picturetest.rb @@ -0,0 +1,6 @@ +#!/use/bin/env ruby +# -*- coding: utf-8 -*- + +pid = spawn "display -geometry +10+20 gameover.png" +sleep(10) +Process.kill(:INT,pid) diff --git a/zikken.rb b/zikken.rb deleted file mode 100755 index 8936322..0000000 --- a/zikken.rb +++ /dev/null @@ -1,6 +0,0 @@ -#!/use/bin/env ruby -# -*- coding: utf-8 -*- - -pid = spawn "display -geometry +10+20 zikkengazou.png" -sleep(10) -Process.kill(:INT,pid) diff --git "a/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232.xcf.xz" "b/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232.xcf.xz" deleted file mode 100644 index 15a554c..0000000 --- "a/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232.xcf.xz" +++ /dev/null Binary files differ