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