1.作成したプログラム
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

life = 255

def encount()
print"どこに進みますか?(「平原」「沼地」「墓地」「古城」のいずれかを記入)\n"
place = gets.chomp!
while true
print"どの方角に進みますか?(「上下左右」のいずれかを記入)\n"
direction = gets.chomp!
srand
count = rand(3)+1
if place == "古城" && count == 3
return 1
break
elsif count == 3
return 0
break
end
end
end

def battle(name, hp, attack, life)
printf("%sが現れた\n", name)
while true
print"あなたの攻撃\n"
srand
damage = rand(20)+5
printf("%sに%dのダメージ\n", name, damage)
hp -= damage
if hp <= 0
printf("%sを倒した\n", name)
break
end
printf("%sの残り体力%d\n", name, hp)
printf("%sの攻撃\n", name)
srand
damage = rand(attack)+5
printf("あなたは%dのダメージを受けた\n", damage)
life -= damage
if life <= 0
print"死んでしまうとは情けない\n"
exit
end
printf("あなたの残り体力は%dです。\n", life)
end
printf("あなたの残り体力は%dです。\n", life)
return life
end

def battle0(name, hp, attack, life)
printf("%sが現れた\n", name)
while true
print"あなたの攻撃\n"
srand
damage = rand(20)+5
printf("%sに%dのダメージ\n", name, damage)
hp -= damage
if hp <= 0
printf("%sを倒した\n", name)
print"クリアおめでとう!!\n"
break
end
printf("%sの残り体力%d\n", name, hp)
printf("%sの攻撃\n", name)
srand
damage = rand(attack)+5
printf("あなたは%dのダメージを受けた\n", damage)
life -= damage
if life <= 0
print"死んでしまうとは情けない\n"
exit
end
printf("あなたの残り体力は%dです。\n", life)
end
printf("あなたの残り体力は%dです。\n", life)
return life
end

a = encount()

srand
x = rand(3)

if x == 0 && a == 0
name = "ゴーレム"
hp = 250
attack = 5

battle(name, hp, attack, life)

elsif x == 1 && a == 0
name = "スライム"
hp = 20
attack = 2

battle(name, hp, attack, life)

elsif x == 2 && a == 0
name = "暗黒騎士"
hp = 150
attack = 8

battle(name, hp, attack, life)

elsif a == 1
name = "魔王"
hp = 500
attack = 8

battle0(name, hp, attack, life)

end

2.プログラムの実行結果
./ruby2-4.rb [~/program]
どこに進みますか?(「平原」「沼地」「墓地」「古城」のいずれかを記入)
平原
どの方角に進みますか?(「上下左右」のいずれかを記入)
上
ゴーレムが現れた
あなたの攻撃
ゴーレムに15のダメージ
ゴーレムの残り体力235
ゴーレムの攻撃
あなたは8のダメージを受けた
あなたの残り体力は247です。
あなたの攻撃
ゴーレムに8のダメージ
ゴーレムの残り体力227
ゴーレムの攻撃
あなたは6のダメージを受けた
あなたの残り体力は241です。
あなたの攻撃
ゴーレムに6のダメージ
ゴーレムの残り体力221
ゴーレムの攻撃
あなたは6のダメージを受けた
あなたの残り体力は235です。
あなたの攻撃
ゴーレムに19のダメージ
ゴーレムの残り体力202
ゴーレムの攻撃
あなたは5のダメージを受けた
あなたの残り体力は230です。
あなたの攻撃
ゴーレムに18のダメージ
ゴーレムの残り体力184
ゴーレムの攻撃
あなたは8のダメージを受けた
あなたの残り体力は222です。
あなたの攻撃
ゴーレムに16のダメージ
ゴーレムの残り体力168
ゴーレムの攻撃
あなたは8のダメージを受けた
あなたの残り体力は214です。
あなたの攻撃
ゴーレムに15のダメージ
ゴーレムの残り体力153
ゴーレムの攻撃
あなたは6のダメージを受けた
あなたの残り体力は208です。
あなたの攻撃
ゴーレムに10のダメージ
ゴーレムの残り体力143
ゴーレムの攻撃
あなたは9のダメージを受けた
あなたの残り体力は199です。
あなたの攻撃
ゴーレムに6のダメージ
ゴーレムの残り体力137
ゴーレムの攻撃
あなたは5のダメージを受けた
あなたの残り体力は194です。
あなたの攻撃
ゴーレムに17のダメージ
ゴーレムの残り体力120
ゴーレムの攻撃
あなたは5のダメージを受けた
あなたの残り体力は189です。
あなたの攻撃
ゴーレムに22のダメージ
ゴーレムの残り体力98
ゴーレムの攻撃
あなたは5のダメージを受けた
あなたの残り体力は184です。
あなたの攻撃
ゴーレムに23のダメージ
ゴーレムの残り体力75
ゴーレムの攻撃
あなたは8のダメージを受けた
あなたの残り体力は176です。
あなたの攻撃
ゴーレムに5のダメージ
ゴーレムの残り体力70
ゴーレムの攻撃
あなたは5のダメージを受けた
あなたの残り体力は171です。
あなたの攻撃
ゴーレムに19のダメージ
ゴーレムの残り体力51
ゴーレムの攻撃
あなたは5のダメージを受けた
あなたの残り体力は166です。
あなたの攻撃
ゴーレムに12のダメージ
ゴーレムの残り体力39
ゴーレムの攻撃
あなたは9のダメージを受けた
あなたの残り体力は157です。
あなたの攻撃
ゴーレムに9のダメージ
ゴーレムの残り体力30
ゴーレムの攻撃
あなたは8のダメージを受けた
あなたの残り体力は149です。
あなたの攻撃
ゴーレムに17のダメージ
ゴーレムの残り体力13
ゴーレムの攻撃
あなたは8のダメージを受けた
あなたの残り体力は141です。
あなたの攻撃
ゴーレムに10のダメージ
ゴーレムの残り体力3
ゴーレムの攻撃
あなたは5のダメージを受けた
あなたの残り体力は136です。
あなたの攻撃
ゴーレムに12のダメージ
ゴーレムを倒した
あなたの残り体力は136です。

長すぎて記載できなかったため最後の方から抜粋
あなたの攻撃
魔王に24のダメージ
魔王の残り体力35
魔王の攻撃
あなたは9のダメージを受けた
あなたの残り体力は8です。
あなたの攻撃
魔王に19のダメージ
魔王の残り体力16
魔王の攻撃
あなたは7のダメージを受けた
あなたの残り体力は1です。
あなたの攻撃
魔王に11のダメージ
魔王の残り体力5
魔王の攻撃
あなたは11のダメージを受けた
死んでしまうとは情けない

3.プログラムの説明
1つ目のdef-endにはエンカウントシステムについて記載されています。中身は行きたい場所を指定し、行きたい方角を複数回入力して、その都度乱数を出し、ある数字が出たら返り値をaに代入して返り値をもとに戦う敵を判定します。またこのプログラムの中である条件を踏めば異なる敵と戦うことができるようにもなっています。
2つ目のdef-endは授業で実際に書いた対戦型ゲームのプログラムを参考に互いに行動を行いその結果を判定するプログラムになっている。
3つ目のdef-endは2つ目のdef-endと全く同じだが敵が倒された場合の表示する内容が異なっている。

4.感想
本当は魔王を倒すまで書きたかったが時間があまりなかったため特定の場所に行くとエンカウントする敵が異なるプログラムを作成した。returnの戻り値がなかなかうまくいかずにかなり苦戦したが一応自分が作りたかったものができて良かった。自由課題の時にこれをさらにパワーアップさせたものを作ってみようかと考えています。