▼行間 ▼メニューバー
ブックマーク登録する場合はログインしてください。
初めての小説(もどき)自動生成 作者:唯乃なない

少年と少女

15/30

第07話:賢くない二人がハイアンドローゲーム

おかしい。

こういうネタが好きな人が「なろう」には30名はいるはず。

しかし、まだブックマーク数が7人だと!?

残りの23人は何をしているんだ!?

と考えている今日このごろです。


さて、これまで帽子を追いかけることにがんばってきましたが、さすがに限界が見えてきました。

あまり気負うと詰まってしまってなにもできませんが、しかしあまりに進歩がないのもつまりません。

ここでちょっと趣向を変えたいと思います。

(帽子追いかけるお題でネタ出してくれた方、すいません。いつか活用したいと思います)


今の状態ですと、少年がひたすら一人で動き回るだけで、こう、なんというか、可能性が広がりません。

少年だけでなく、他のキャラクターにも動いてもらいたいところです。


ということで、いろいろ考えた所、「エージェントAI」の考え方がいいのではないかと思いました。

今の作り方では少年だけが走っているなら問題ありませんが、もっと複雑なことをさせようとすると、プログラムの組み合わせが増えて爆発してしまいます。

エージェントベースにすることで、「少年のプログラム」「少女のプログラム」「老人のプログラム」というように個別に作れるようになります。


難しいことを言うと、エージェントは


◯環境の認識(敵がいる!)

◯意思決定(戦うか逃げるか。ナイフを使うか、銃を使うか)

◯行動(銃で攻撃)


みたいな仕組みなっています。


とはいえ、いきなり難しいことは出来ないので、今回は少女と少年で0~9の札でハイアンドローでゲームをします。


まずは、環境認識も意思決定もなくなく、ただ札を引くだけのプロトタイプを作ってみます。

ここからだんだんと賢くしていきたいと思います。

これがきっと、いつか素晴らしい小説生成に結びつくと信じて……(ほんと?)


もはや、文章生成システムではなく、簡単なゲームAIを作っているような形に……



さて、出力結果です!



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


少年と少女は退屈していた。


少女「退屈だわ。カードで遊びましょう。先手と後手がカードを一枚ずつ取るのよ。そして、先手が数字を見せたら、後手は自分が選んだ数字が大きいか小さいか当てるのよ」


少年「うん、いいよ」


少女「私が勝ったら30ギル、あなたが勝ったら20ギルね」


少年「え、お金かけるの!? しかも、なんか不公平……」


少女「うるさいわね。まずは私が選ぶわ」


少年の所持金:100

少女の所持金:100


***【先手】少女 【後手】少年***

[先手]少女がカード[5]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ハイ!」


少年がカードを裏返すと、[0]だった!


少年「う……ハズレ」


少女「ふふふ」


少年の所持金:70

少女の所持金:130


***【先手】少年 【後手】少女***

[先手]少年がカード[9]を選んだ


少年「さぁ、選んで」


[後手]少女がカードを選んだ


少年「さぁ、ハイ or ロー?」


少女「ロー!」


少女がカードを裏返すと、[0]だった!


少女「やったわ!」


少年「う……」


少年の所持金:40

少女の所持金:160


***【先手】少女 【後手】少年***

[先手]少女がカード[7]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ロー!」


少年がカードを裏返すと、[6]だった!


少年「やった!」


少女「むぐぐ……」


少年の所持金:60

少女の所持金:140


***【先手】少年 【後手】少女***

[先手]少年がカード[6]を選んだ


少年「さぁ、選んで」


[後手]少女がカードを選んだ


少年「さぁ、ハイ or ロー?」


少女「ハイ!」


少女がカードを裏返すと、[1]だった!


少女「ハ、ハズレ?そんな……」


少年「よかった……」


少年の所持金:80

少女の所持金:120


***【先手】少女 【後手】少年***

[先手]少女がカード[1]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ハイ!」


少年がカードを裏返すと、[6]だった!


少年「やった!」


少女「むぐぐ……」


少年の所持金:100

少女の所持金:100


***【先手】少年 【後手】少女***

[先手]少年がカード[8]を選んだ


少年「さぁ、選んで」


[後手]少女がカードを選んだ


少年「さぁ、ハイ or ロー?」


少女「ロー!」


少女がカードを裏返すと、[7]だった!


少女「やったわ!」


少年「う……」


少年の所持金:70

少女の所持金:130


***【先手】少女 【後手】少年***

[先手]少女がカード[3]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ロー!」


少年がカードを裏返すと、[1]だった!


少年「やった!」


少女「むぐぐ……」


少年の所持金:90

少女の所持金:110


***【先手】少年 【後手】少女***

[先手]少年がカード[4]を選んだ


少年「さぁ、選んで」


[後手]少女がカードを選んだ


少年「さぁ、ハイ or ロー?」


少女「ロー!」


少女がカードを裏返すと、[9]だった!


少女「ハ、ハズレ?そんな……」


少年「よかった……」


少年の所持金:110

少女の所持金:90


***【先手】少女 【後手】少年***

[先手]少女がカード[3]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ロー!」


少年がカードを裏返すと、[4]だった!


少年「う……ハズレ」


少女「ふふふ」


少年の所持金:80

少女の所持金:120


***【先手】少年 【後手】少女***

[先手]少年がカード[4]を選んだ


少年「さぁ、選んで」


[後手]少女がカードを選んだ


少年「さぁ、ハイ or ロー?」


少女「ハイ!」


少女がカードを裏返すと、[9]だった!


少女「やったわ!」


少年「う……」


少年の所持金:50

少女の所持金:150


***【先手】少女 【後手】少年***

[先手]少女がカード[3]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ロー!」


少年がカードを裏返すと、[2]だった!


少年「やった!」


少女「むぐぐ……」


少年の所持金:70

少女の所持金:130


***【先手】少年 【後手】少女***

[先手]少年がカード[5]を選んだ


少年「さぁ、選んで」


[後手]少女がカードを選んだ


少年「さぁ、ハイ or ロー?」


少女「ロー!」


少女がカードを裏返すと、[3]だった!


少女「やったわ!」


少年「う……」


少年の所持金:40

少女の所持金:160


***【先手】少女 【後手】少年***

[先手]少女がカード[5]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ロー!」


少年がカードを裏返すと、[9]だった!


少年「う……ハズレ」


少女「ふふふ」


少年の所持金:10

少女の所持金:190


***【先手】少年 【後手】少女***

[先手]少年がカード[3]を選んだ


少年「さぁ、選んで」


[後手]少女がカードを選んだ


少年「さぁ、ハイ or ロー?」


少女「ハイ!」


少女がカードを裏返すと、[1]だった!


少女「ハ、ハズレ?そんな……」


少年「よかった……」


少年の所持金:30

少女の所持金:170


***【先手】少女 【後手】少年***

[先手]少女がカード[0]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ハイ!」


少年がカードを裏返すと、[4]だった!


少年「やった!」


少女「むぐぐ……」


少年の所持金:50

少女の所持金:150


***【先手】少年 【後手】少女***

[先手]少年がカード[5]を選んだ


少年「さぁ、選んで」


[後手]少女がカードを選んだ


少年「さぁ、ハイ or ロー?」


少女「ロー!」


少女がカードを裏返すと、[2]だった!


少女「やったわ!」


少年「う……」


少年の所持金:20

少女の所持金:180


***【先手】少女 【後手】少年***

[先手]少女がカード[2]を選んだ


少女「さぁ、選びなさい」


[後手]少年がカードを選んだ


少女「さぁ、ハイ or ロー?」


少年「ロー!」


少年がカードを裏返すと、[4]だった!


少年「う……ハズレ」


少女「ふふふ」


少年「もうお金がないよ……」


少女「ふふふ、また挑戦しなさい」


少年「絶対に嫌だよ……」

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



なんとなくゲームが成立しているように見えますが、実は二人共「ハイ」と「ロー」をランダムに言っています。

相手が出した数字が5以上ならハイと言って、それ以下ならローというのがいい戦略なのですが、そういうことを全然していません。

そのため、勝ったときの報酬が大きい少女のほうが勝っています。


P.S.

あれ、小説ってなんだっけ……?

まぁ、いいか。


ソースコードは以下のとおりです。


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

# coding: utf-8


#第07話:賢くない二人がハイアンドローゲーム


def init

$girl = GirlAgent::new

$boy = BoyAgent::new


end


def mainstory

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

puts

puts "少年と少女は退屈していた。"

puts

puts "少女「退屈だわ。カードで遊びましょう。先手と後手がカードを一枚ずつ取るのよ。そして、先手が数字を見せたら、後手は自分が選んだ数字が大きいか小さいか当てるのよ」"

puts

puts "少年「うん、いいよ」"

puts

puts "少女「私が勝ったら30ギル、あなたが勝ったら20ギルね」"

puts

puts "少年「え、お金かけるの!? しかも、なんか不公平……」"

puts

puts "少女「うるさいわね。まずは私が選ぶわ」"

puts


loop do


print_money


#少女先手、少年後手

puts "***【先手】少女 【後手】少年***"


card1 = (rand()*10).to_i


puts "[先手]少女がカード["+card1.to_s+"]を選んだ"

puts

puts "少女「さぁ、選びなさい」"

puts


card2 = pick_card(card1)


puts "[後手]少年がカードを選んだ"

puts

puts "少女「さぁ、ハイ or ロー?」"

puts


j = $boy.judge(card1)


puts "少年「"+j+"!」"

puts

puts "少年がカードを裏返すと、["+card2.to_s+"]だった!"

puts


if gote_win?(card1,card2,j) == true


$boy.money += 20

$girl.money -= 20


puts "少年「やった!」"

puts

puts "少女「むぐぐ……」"

puts

else


$boy.money -= 30

$girl.money += 30


puts "少年「う……ハズレ」"

puts

puts "少女「ふふふ」"

puts

end


if $boy.money <= 0

puts "少年「もうお金がないよ……」"

puts

puts "少女「ふふふ、また挑戦しなさい」"

puts

puts "少年「絶対に嫌だよ……」"

break

elsif $girl.money <= 0

puts "少女「ま、まさか私が負けるなんて。もうお金が……」"

puts

puts "少年「ご、ごめん……」"

puts

puts "少女「ゆ、許さないわっ」"

break


end




print_money


#少年先手、少女後手

puts "***【先手】少年 【後手】少女***"


card1 = (rand()*10).to_i


puts "[先手]少年がカード["+card1.to_s+"]を選んだ"

puts

puts "少年「さぁ、選んで」"

puts


card2 = pick_card(card1)


puts "[後手]少女がカードを選んだ"

puts

puts "少年「さぁ、ハイ or ロー?」"

puts


j = $girl.judge(card1)


puts "少女「"+j+"!」"

puts

puts "少女がカードを裏返すと、["+card2.to_s+"]だった!"

puts


if gote_win?(card1,card2,j) == true


$boy.money -= 30

$girl.money += 30


puts "少女「やったわ!」"

puts

puts "少年「う……」"

puts

else


$boy.money += 20

$girl.money -= 20


puts "少女「ハ、ハズレ?そんな……」"

puts

puts "少年「よかった……」"

puts

end


if $boy.money <= 0

puts "少年「もうお金がないよ……」"

puts

puts "少女「ふふふ、また挑戦しなさい」"

puts

puts "少年「絶対に嫌だよ……」"

break

elsif $girl.money <= 0

puts "少女「ま、まさか私が負けるなんて。もうお金が……」"

puts

puts "少年「ご、ごめん……」"

puts

puts "少女「ゆ、許さないわっ」"

break


end


end



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


end


def pick_card(exclusion)

loop do

a = (rand()*10).to_i


if a != exclusion

return a

end

end

end


def gote_win?(card1,card2,judge)

if (card1 < card2) && (judge == "ハイ")

return true

elsif (card1 > card2) && (judge == "ロー")

return true

else

return false

end

end


def print_money

puts "少年の所持金:"+$boy.money.to_s

puts "少女の所持金:"+$girl.money.to_s

puts

end




#少女エージェント

class GirlAgent


attr_accessor :money


def initialize

@money = 100

end


def judge(a)

if rand() < 0.5

return "ハイ"

else

return "ロー"

end

end



end


#少年エージェント

class BoyAgent


attr_accessor :money


def initialize

@money=100

end


def judge(a)

if rand() < 0.5

return "ハイ"

else

return "ロー"

end

end


end




#メイン処理

init

mainstory


  • ブックマークに追加
ブックマーク登録する場合はログインしてください。
ポイントを入れて作者を応援しましょう!
評価をするにはログインしてください。

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

この小説はリンクフリーです。ご自由にリンク(紹介)してください。
この小説はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。
小説の読了時間は毎分500文字を読むと想定した場合の時間です。目安にして下さい。