表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
4/30

第04話:疾走感を少し獲得した少年

前回、少年に心の声を吐露させた所、ずっと言い続けることになって大変に迷惑でした。

しかし賑やかし程度でも、ないよりはマシです。

プログラム的にちょっと汚くなりますが、フラグを立てて一度だけ言ってもらうようにしましょう。


しかしそれだけではあまりに変更が小さすぎるので、もう一つ考えてみましょう。

風の変化を実装しましたが、いまいちインパクトがありません。

これが実際に画面のあるゲームなら風の強弱で帽子の速度が変わるのでそれなりに意味があるでしょう。

しかし、文章では「強い風」とか「弱い風」を列挙されても「ふーん」てなものです。

あまりおもしろくないので、少し残念ですが、風の変化はなくしてしまいましょう。


これだけでは機能を削っただけです。

さらにもう一つなにか考えましょう。

少年には疾走感が足りません。

いろんなものを飛び越えながら走ってもらいましょう。

ということで、地面にあるいろいろなものを教えてくれるメソッド「getObjectOnGround」というものを作りました。

これが「黒猫」「倒れた酒瓶」「うずくまっているおばあちゃん」などを返してくれるので、これをつかって文章を作っていきます。


また、しばらく少年の方に集中したいので、最初と最後のセリフはしばらく固定にします。

帽子に届いたらハッピーエンド、100m以上になったらバッドエンドです。






さぁ、そしてこれが完成した文章です!





**********************************************


少女「帽子がとばされちゃった(棒読み)」


少年「も、もちろん、僕が取ってくるよ!」


少年は駆け出した。


帽子まで30メートル!


少年の走る目の前に、うずくまっているおばあちゃんが!

しかし、少年はうずくまっているおばあちゃんを危なげなく飛び越えた。


(行ける、僕は行けるぞ!)

少年はそう信じて走り続けた。


帽子まで32.5メートル!


帽子まで35.0メートル!


少年の走る目の前に、ひしゃげたゴミ箱が!

しかし、少年はひしゃげたゴミ箱をなんとか飛び越えた。


帽子まで37.5メートル!


帽子まで40.0メートル!


(駄目かも……いや、違う、自分を信じるんだ!)

少年は雑念を振り払って無心で足を動かし続けた。


帽子まで42.5メートル!


帽子まで45.0メートル!


帽子まで47.5メートル!


少年の走る目の前に、床屋の看板が!

しかし、少年は床屋の看板を危なげなく飛び越えた。


帽子まで50.0メートル!


帽子まで52.5メートル!


帽子まで55.0メートル!


少年の走る目の前に、異様な臭いを放つゴミ袋が!

しかし、少年は異様な臭いを放つゴミ袋をなんとか飛び越えた。


帽子まで57.5メートル!


帽子まで60.0メートル!


少年の走る目の前に、パン屋の看板が!

しかし、少年はパン屋の看板をなんとか飛び越えた。


帽子まで62.5メートル!


少年の走る目の前に、足が一本ない椅子が!

しかし、少年は足が一本ない椅子をトリプルアクセルで飛び越えた。審査員も大喝采だ。


帽子まで65.0メートル!


少年の走る目の前に、うずくまっているおばあちゃんが!

しかし、少年はうずくまっているおばあちゃんをトリプルアクセルで飛び越えた。審査員も大喝采だ。


帽子まで67.5メートル!


帽子まで70.0メートル!


(もうダメだ。また罵られるに違いない。この世界に神はないのか!?)

少年はボロボロになりながら、神を呪い、天を呪い、世界のすべてを呪いながらも進み続けた。


帽子まで72.5メートル!


少年の走る目の前に、足が一本ない椅子が!

しかし、少年は足が一本ない椅子をなんとか飛び越えた。


帽子まで75.0メートル!


帽子まで77.5メートル!


帽子まで80.0メートル!


少年の走る目の前に、倒れた空き瓶が!

しかし、少年は倒れた空き瓶を軽々と飛び越えた。


帽子まで82.5メートル!


帽子まで85.0メートル!


帽子まで87.5メートル!


少年の走る目の前に、寝ている黒猫が!

しかし、少年は寝ている黒猫を軽々と飛び越えた。


帽子まで90.0メートル!


帽子まで92.5メートル!


帽子まで95.0メートル!


少年の走る目の前に、かしがった手すりが!

しかし、少年はかしがった手すりを錐揉み回転しながら飛び越えた。


帽子まで97.5メートル!


少年は諦めて足を止めた。


少年がうなだれて少女のもとに戻ると、またもや少女は冷ややかな目で少年を見た。


少女「酷すぎるわ。なんど失敗すれば気が済むの?」


少年は自らの非力さを呪った。


**********************************************




なんかいい感じになってますよ!

これまでと比較すると格段の出来です。


しかし、ここまで来てみて、文章書くよりプログラムを書くほうが大変な気がしてきました。

ですがそれは何かの気のせいということにして進んでいきたいと思います。


なお、ジャンプの文章でレアなものが頻繁に出過ぎないように、重み付きの乱数を作成したり、地味にいろいろ作っています。




ソースコードは以下の通り。


#! ruby -E Windows-31J:utf-8

# coding: utf-8


#第04話:疾走感を少し獲得した少年



#シーンクラス

class CityScene

@@obj_on_ground=[

"寝ている黒猫",

"うずくまっているおばあちゃん",

"倒れた空き瓶",

"腐った材木",

"かしがった手すり",

"異様な臭いを放つゴミ袋",

"足が一本ない椅子",

"地面に転がる酔っぱらい",

"新聞紙の束",

"ひしゃげたゴミ箱",

"パン屋の看板",

"床屋の看板",

"残飯をあさる野良犬"

];


def self.getObjectOnGround

n = rand(@@obj_on_ground.length)

return @@obj_on_ground[n]

end


end


#アクションクラス

class BoyAction

@@act_jump=[

"なんとか飛び越えた",

"軽々と飛び越えた",

"危なげなく飛び越えた",

"錐揉み回転しながら飛び越えた",

"トリプルアクセルで飛び越えた。審査員も大喝采だ"

]


def self.getJumpAction

n = WeightedRandom::int_rand(@@act_jump.length-1,0.6)

return @@act_jump[n]

end


end


#重み付き乱数生成クラス

class WeightedRandom


#0が最も出やすくて、maxが最も出にくい乱数

#next_prob:次の数字が出る確率

def self.int_rand(max, next_prob)

p = 1.0

total = 1.0


#確率分布を積分

for i in 1..max

p = p * next_prob

total += p

end


#乱数計算

r = total * rand()


#乱数を確率分布で計算

p = 1.0

x = 1.0

ret = 0


while x < r

p = p * next_prob

x = x + p

ret += 1

end


return ret

end


def self.test

a =[]

for i in 0..10 do a[i]=0; end

for i in 1..100000 do a[WeightedRandom::int_rand(5,0.1)] += 1; end

for i in 0..10 do puts a[i]; end

end


end



#初期化

$d = 30 #帽子までの距離

$windspeed = 5 #風の速度

$speed = 2.5 #走る速度

#フラグ

$flag1 = 0

$flag2 = 0

$flag3 = 0


#メソッド類

def print_distance

puts "帽子まで"+$d.to_s+"メートル!"

puts

end


def boy_act

obj = CityScene::getObjectOnGround()

puts "少年の走る目の前に、"+obj+"が!"

puts "しかし、少年は"+obj+"を"+BoyAction::getJumpAction()+"。"

puts

end


def boy_think

if $d < 40

if $flag1 == 0

puts "(行ける、僕は行けるぞ!)"

puts "少年はそう信じて走り続けた。"

puts

$flag1 = 1

end

elsif $d < 70

if $flag2 == 0

puts "(駄目かも……いや、違う、自分を信じるんだ!)"

puts "少年は雑念を振り払って無心で足を動かし続けた。"

puts

$flag2 = 1

end

elsif ($flag3 == 0)

puts "(もうダメだ。また罵られるに違いない。この世界に神はないのか!?)"

puts "少年はボロボロになりながら、神を呪い、天を呪い、世界のすべてを呪いながらも進み続けた。"

puts

$flag3 = 1

end

end


def nextstep

$d = $d - $speed + $windspeed

end



def happy_ED

puts "少年は帽子を掴んだ!"

puts

puts "少年が喜び勇んで少女のもとに戻った。"

puts

puts "少女「まぁまぁね」"

puts

puts "少年は少女に認められた喜びに打ち震えた。"

puts

end


def bad_ED

puts "少年は諦めて足を止めた。"

puts

puts "少年がうなだれて少女のもとに戻ると、またもや少女は冷ややかな目で少年を見た。"

puts

puts "少女「酷すぎるわ。なんど失敗すれば気が済むの?」"

puts

puts "少年は自らの非力さを呪った。"

puts

end



#メインルーチン


puts "**********************************************"

puts

puts "少女「帽子がとばされちゃった(棒読み)」"

puts

puts "少年「も、もちろん、僕が取ってくるよ!」"

puts

puts "少年は駆け出した。"

puts


loop do

print_distance


if rand() < 0.3

boy_act

end


boy_think

nextstep


if $d <= 0

happy_ED

break

elsif $d >= 100

bad_ED

break

end

end


puts "**********************************************"


評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ