提出課題:05回目レポート
本文:
1.#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

def battle(myname,yatuname,myhp,yatuhp,myattack,yatuattack,mydamagesum,ap)
  sleep(1)
  print"~戦闘突入~\n"
  print"-------------------------------------------\n"
  printf("あなた:攻撃力 %d~   体力 %d\n",myattack,myhp)
  printf(" %s:攻撃力 %d~   体力 %d\n",yatuname,yatuattack,yatuhp)
  print"--------------------------------------------\n"
  while true
    if myhp <= 0 && yatuhp <=0
      sleep(1)
      print"なんと相打ち!!!!!!!一緒に眠った!!!!!!!!!\nEND"
      exit
    end
    
    if yatuhp <= 0
      sleep(1)
      print"勝った!!!!!!!!!!!!!!\n"
      break
    end
    
    if myhp <= 0
      print"死んでしまった!!\nBADEND 永遠の眠り\n"
      exit
    end
           
    print"どうする?\n(1)攻撃 (2)何もしない (3)逃げる (4)大技\n"
    choice = gets.chomp!.to_f
    
    if choice == 3
      print"「意気地なし!!!!!」\n"
      sleep(2)
      print"その後、街に放たれたモンスターは他の人によりやっつけられ、街に平和は訪れた。\n"
      sleep(2)
      print"しかし、あなたはモンスターから逃げたため、皆から冷たい目で見られるようになった。\nBADEND 冷ややかな視線"
      exit
      
      
    elsif choice == 2
      mydamage = rand(5)+5
      myhp -= mydamage
      print"あなたはなにもせず突っ立っている。\n"
      sleep(1)
      printf("ヤツの攻撃!あなたは%dのダメージを食らった!\n",mydamage)
      sleep(1)
      printf("------------\n残りのHP\nあなた:%d\n  ヤツ:%d\n------------\n",myhp,yatuhp)
      
      
    elsif choice == 1
      mydamage = rand(yatuattack)+5
      myhp -= mydamage
      yatudamage = rand(myattack)+5
      yatuhp -= yatudamage
      print"あなたの攻撃!\n"
      sleep(1)
      printf("ヤツに%dのダメージ!\n",yatudamage)
      sleep(1)
      printf("ヤツの攻撃!あなたは%dのダメージを食らった!\n",mydamage)
      sleep(1)
      printf("-----------\n残りのHP\nあなた:%d\n  ヤツ:%d\n------------\n",myhp,yatuhp)
    elsif choice == 4
      if ap == 0
        print"アタックポイントが足りない!!\n"
        redo
      end
       mydamage = rand(yatuattack)+5
      myhp -= mydamage
      yatudamage = rand(myattack+5)+5
      yatuhp -= yatudamage
      print"あなたは大技を放った!!!!!\n"
      sleep(1)
      printf("ヤツに%dのダメージ!\n",yatudamage)
      sleep(1)
      printf("ヤツの攻撃!あなたは%dのダメージを食らった!\n",mydamage)
      sleep(1)
      print"アタックポイントが1減った。\n"
      printf("-----------\n残りのHP\nあなた:%d\n  ヤツ:%d\n------------\n",myhp,yatuhp)
      ap -= 1
      
    else
      print"「何やってんの!?\nさっさとお選び!!\n」"
    end

   
  end
  
end

def shop(myhp,myattack,kane)
  print"お店に着きました、どうする?\n(1)武器を強化する40円(2)回復のポーションを買う30円(3)なにもしない\n"
  printf("--------------\n所持金:%d円\n--------------\n",kane)
  buy = gets.chomp!.to_i

  if buy == 1
    printf"武器を強化します。\n"
    sleep(1)
    print"攻撃力が5上がった!\n"
    kane -= 40
    myattack += 5
  elsif buy == 2
    print"ポーションを購入します\n"
    sleep(1)
    print"体力が30回復した!\n"
    kane -= 30
    myhp += 30
  elsif buy ==3
    print"あなたは何もせずに帰った。\n"
  else
    print"そんなものありません。\n"
  end
  printf("--------------\n所持金:%d円\n--------------\n",kane)
end    

  
print"「モンスターを倒そう!まずはジョブを選択してね!」\n(番号を入力してください)\n(1)勇者  (2)魔法使い\n"

job = gets.chomp!.to_f

if job == 1
  print("「あなたは勇者なんだね。\n")
elsif job == 2
  print("「あなたは魔法使いなんだね。\n")
else
    print"あなたやる気ないわね!?\n"
    sleep(1)
    print"消え去れ!!!!!\n"
    sleep(2)
    print"ドカーーン!!!\n"
    sleep(1)
    print"BADEND ふざけてはいけない"
    exit
end


kazu = 0
kane = 100
mydamagesum = 0
ap = 3
if job == 1
  myname = "勇者"
  myattack = 3
  myhp = 40
  while true
    
    print"どっちに進む?\n(1,右or2,左)\n"
    sayuu = gets.chomp!.to_i
    if sayuu == 1
      kazu += 1
    elsif sayuu == 2
      kazu += 2
    else
      print"そんなものないです\n"
      redo
    end
  
    case kazu
    when 1, 2 , 3
      yatuname = "ヨワ"
      yatuhp = 10
      yatuattack = 5
      battle(myname,yatuname,myhp,yatuhp,myattack,yatuattack,mydamagesum,ap)
    when 6 , 8 , 10
      yatuname = "ツヨ"
      yatuhp = 25
      yatuattack = 7
       battle(myname,yatuname,myhp,yatuhp,myattack,yatuattack,mydamagesum,ap)
    when 4, 5, 9
      shop(myhp,myattack,kane)
    else
      print"お金を拾った\n"
      kane += 20
      printf("所持金:%d円\n",kane)
    end
    if kazu >= 11
      break
    end
  end
  
else 
  myname = "魔法使い"
  myattack = 7
  myhp = 25
  while true
    print"どっちに進む?\n(1,右or2,左)\n"
    sayuu = gets.chomp!.to_i
    if sayuu == 1
      kazu += 1
    elsif sayuu == 2
      kazu += 2
    else
      print"そんなものないです\n"
      redo
    end
    
    case kazu
    when 1, 2 , 3
      yatuname = "ヨワ"
      yatuhp = 10
      yatuattack = 5
      battle(myname,yatuname,myhp,yatuhp,myattack,yatuattack,mydamagesum,ap)
    when 6 , 8 , 10
      yatuname = "ツヨ"
      yatuhp = 25
      yatuattack = 7
       battle(myname,yatuname,myhp,yatuhp,myattack,yatuattack,mydamagesum,ap)
    when 4, 5, 9
      shop(myhp,myattack,kane)
    else
      print"お金を拾った\n"
      kane += 20
    end
    if kazu >= 11
      break
    end
  end

end
print"あなたはモンスターのいる森から抜け出し無事に帰宅!!\nTRUEEND 帰宅"

2.(実行結果が長すぎたので途中を省略せざるをえませんでした)
モンスターを倒そう!まずはジョブを選択してね!」
(番号を入力してください)
(1)勇者  (2)魔法使い
1
「あなたは勇者なんだね。
どっちに進む?
(1,右or2,左)
1
~戦闘突入~
-------------------------------------------
あなた:攻撃力 3~   体力 40
 ヨワ:攻撃力 5~   体力 10
--------------------------------------------
どうする?
(1)	攻撃 (2)何もしない (3)逃げる (4)大技
〜〜〜〜〜〜〜〜〜
省略
〜〜〜〜〜〜〜〜〜
ヤツに9のダメージ!
ヤツの攻撃!あなたは10のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:19
  ヤツ:10
------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
あなたは大技を放った!!!!!
ヤツに9のダメージ!
ヤツの攻撃!あなたは5のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:14
  ヤツ:1
------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
あなたは大技を放った!!!!!
ヤツに11のダメージ!
ヤツの攻撃!あなたは6のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:8
  ヤツ:-10
------------
勝った!!!!!!!!!!!!!!
どっちに進む?
(1,右or2,左)
1
お金を拾った
所持金:120円
どっちに進む?
(1,右or2,左)
1
~戦闘突入~
-------------------------------------------
あなた:攻撃力 3~   体力 40
 ツヨ:攻撃力 7~   体力 25
--------------------------------------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
あなたは大技を放った!!!!!
ヤツに5のダメージ!
ヤツの攻撃!あなたは8のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:32
  ヤツ:20
------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
あなたは大技を放った!!!!!
ヤツに12のダメージ!
ヤツの攻撃!あなたは8のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:24
  ヤツ:8
------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
あなたは大技を放った!!!!!
ヤツに12のダメージ!
ヤツの攻撃!あなたは10のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:14
  ヤツ:-4
------------
勝った!!!!!!!!!!!!!!
どっちに進む?
(1,右or2,左)
2
~戦闘突入~
-------------------------------------------
あなた:攻撃力 3~   体力 40
 ツヨ:攻撃力 7~   体力 25
--------------------------------------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
あなたは大技を放った!!!!!
ヤツに8のダメージ!
ヤツの攻撃!あなたは5のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:35
  ヤツ:17
------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
あなたは大技を放った!!!!!
ヤツに5のダメージ!
ヤツの攻撃!あなたは8のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:27
  ヤツ:12
------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
あなたは大技を放った!!!!!
ヤツに10のダメージ!
ヤツの攻撃!あなたは6のダメージを食らった!
アタックポイントが1減った。
-----------
残りのHP
あなた:21
  ヤツ:2
------------
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
4
アタックポイントが足りない!!
どうする?
(1)攻撃 (2)何もしない (3)逃げる (4)大技
1
あなたの攻撃!
ヤツに5のダメージ!
ヤツの攻撃!あなたは9のダメージを食らった!
-----------
残りのHP
あなた:12
  ヤツ:-3
------------
勝った!!!!!!!!!!!!!!
どっちに進む?
(1,右or2,左)
1
お金を拾った
所持金:140円
あなたはモンスターのいる森から抜け出し無事に帰宅!!
TRUEEND 帰宅

3.4〜89行目、def-endの中に敵と戦うプログラムが書いてある。選択肢を選び、行動を選択することができる。大技はアタックポイントがなくなるとつかえなくなったり、BADENDを散りばめたりと、様々なイベントを配置している。
4行目、battleというメソッド名で、その後ろの()の中に後述されている引数を入れる。
91〜114行目、お店に到着した時のイベント。
117〜134行目、ジョブ選択。
141〜行、勇者と魔法使いそれぞれのHPや攻撃力を記述。選択したジョブで、HPや攻撃力が変わるようifで分岐。
147〜179行目、すごろくみたいに、このマス(数字)になったらイベントAが発生する、というようにプログラムを作成。
163行目、battle関数の呼び出し。def battle(~~~--endと記述した部分が処理される。

4.随分長々となってしまった。本当は、def-endで+=、-=下部分を次の処理に引き継いで、2回目に戦闘になった時は戦闘1回目で失った体力はそのまま引き継ぎ、敵の体力は更新され、ショップのイベントでアップした攻撃力や体力を反映させたかった。払った金も元に戻ってしまう。もしかしたらdefではできないのだろうか。正解の方法があったら教えていただきたいです。

添付:
bouken.rb