提出課題: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