=====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