=====1=====
def battle(sta,ski)
print("スライ厶が現れた!\n")
enemyHP = 15
while true
print("\nどうする?\n")
print("1:攻撃 2:スキル 0:逃げる\n")
s = gets.chomp!.to_i
if s == 1
printf("%sの攻撃\n",sta["Name"])
attdame = sta["Attack"] + rand(-2..2)
enemyHP -= attdame
printf("スライムに%dのダメージ\n",attdame)
elsif s == 2
print("何を使う?\n\n")
for n in 0..ski.size - 1
printf("%d:",n)
puts ski[n][0]
end
whatskill = gets.chomp!.to_i
if ski[whatskill] == nil
print("スキルがないよ\n")
redo
end
if ski[whatskill][2] > sta["MP"]
print("MPが足りないよ\n")
redo
end
printf("%sの%s\n",sta["Name"],ski[whatskill][0])
attdame = ski[whatskill][1] + rand(-2..2)
sta["MP"] -= ski[whatskill][2]
enemyHP -= attdame
printf("スライムに%dのダメージ\n",attdame)
elsif s == 0
print("勇者が戦いから逃げるんじゃねぇ!\n")
print("天からの攻撃\n")
hitdame = 99999
sta["HP"] -= hitdame
printf("%sは%dのダメージ\n",sta["Name"],hitdame)
end
if enemyHP <= 0
print("スライムを倒した!\n")
break
end
print("\nスライムの攻撃\n")
hitdame = (10 + rand(-2..2)) - sta["Defence"]
sta["HP"] -= hitdame
printf("%sは%dのダメージ\n",sta["Name"],hitdame)
if sta["HP"] <= 0
printf("%sは力尽きた\n",sta["Name"])
break
end
end
return sta
end
skills = Hash.new
status = Hash.new
i = 0
open("skills.txt","r:utf-8") do |skill|
i = 0
while line = skill.gets
if /(\S+)\s+(\d+)\s+(\d+)/ =~ line
skills[i] = [$1,$2.to_i,$3.to_i]
i += 1
end
end
end
print("~勇者の冒険~\n")
print("名前を決めよう!\n")
name = gets.chomp!
status = {"Name" => name, "Level" => 1, "HP" => 100, "MAXHP" => 100, "MP" => 50, "MAXMP" => 50, "Attack" => 10, "Defence" => 5}
print("\n高野を探険しよう!\n")
while true
print("\nどうする?\n")
print("1:進む 2:見渡す 3:ステータス確認 0:休む\n")
s = gets.chomp!.to_i
if s == 1
print("先に進もう!\n")
r = rand(9)
if r >= 3
status = battle(status,skills)
elsif r >= 8
print("トコトコトコ\n")
else
print("空箱を見つけた!\n")
print("しかし中には何もなかった...\n")
end
elsif s == 2
print("何もなかった\n")
elsif s == 3
puts status
elsif s == 0
print("すっきりした\n")
else
end
if status["HP"] <= 0
print("おお勇者よ、死んでしまうとは情けない")
break
end
end
=====2=====
~勇者の冒険~
名前を決めよう!
1
高野を探険しよう!
どうする?
1:進む 2:見渡す 3:ステータス確認 0:休む
1
先に進もう!
空箱を見つけた!
しかし中には何もなかった...
どうする?
1:進む 2:見渡す 3:ステータス確認 0:休む
1
先に進もう!
スライ厶が現れた!
どうする?
1:攻撃 2:スキル 0:逃げる
2
何を使う?
0:ファイアーボール
1:アイスアロー
2:MPダケ10ツカーウ
0
1のファイアーボール
スライムに11のダメージ
スライムの攻撃
1は6のダメージ
どうする?
1:攻撃 2:スキル 0:逃げる
1
1の攻撃
スライムに12のダメージ
スライムを倒した!
どうする?
1:進む 2:見渡す 3:ステータス確認 0:休む
3
{"Name"=>"1", "Level"=>1, "HP"=>94, "MAXHP"=>100, "MP"=>45, "MAXMP"=>50, "Attack"=>10, "Defence"=>5}
どうする?
1:進む 2:見渡す 3:ステータス確認 0:休む
1
先に進もう!
空箱を見つけた!
しかし中には何もなかった...
どうする?
1:進む 2:見渡す 3:ステータス確認 0:休む
1
先に進もう!
スライ厶が現れた!
どうする?
1:攻撃 2:スキル 0:逃げる
0
勇者が戦いから逃げるんじゃねぇ!
天からの攻撃
1は99999のダメージ
スライムの攻撃
1は3のダメージ
1は力尽きた
おお勇者よ、死んでしまうとは情けない
=====3=====
1~68行目がスライムとバトルを行うメソッド
70~121行目が冒険を行うプログラム
70~72で使う変数、配列を設定。
74~82でskills.txtから設定したスキルの名前、威力、消費MPを取得。
84~88で名前を入力し、ステータスを配列に設定する。
90~121で探索の流れをif文で分岐させている。
101でbattleメソッドを呼び出し、戦闘後のステータスに更新している。
1でstatus配列とskill配列をメソッド内で使えるようにsta配列とski配列に設定した。
3,4でスライム出現を表示する。
6~64でどちらかが倒れるまでwhile-trueで戦闘を続ける.。
7~9で選択肢を表示し、選んでもらう。
11~15は通常攻撃を行いスライムのHPを削る。
17~40はスキルを表示し選んでもらい、威力に合わせたダメージをスライムに与える。
42~48は逃げると大ダメージを受けるようにした。
50~53でスライムのHPが0以下の場合、戦闘を終わるようにした。
55~58でスライムが攻撃し、キャラクターのHPを削るようにした。
60~63でキャラクターのHPが0以下の場合、戦闘を終わるようにした。
66で戦闘後のステータスを返すようにした。
=====4=====
流れをつくっただけなので、ゲーム性が追加できていなく、つまらないものになってしまった。
遅延や要素を追加すれば面白くなりそうだと思った。
=====5=====
[skills.txt]
ファイアーボール 10 5
アイスアロー 8 3
MPダケ10ツカーウ 0 10