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

百合キャラに追いかけられてみよう

20/30

第03話:構想編 イベントシステムを構築しよう

帽子を追いかけるみたいに一直線の物語では面白くありません。

かといって、エージェントモデルはプログラムの手間がひどくて駄目でした。


そこで、イベント方式で作っていきます。

というか、作りました。

別に今日いきなり作れたわけでなく、前から少しずつ仕込んでいました。


今回の物語を作るに当たっては、こういう事が必要です。

結構面倒です。


1,イベントを沢山つくる

・働くイベント

・賭け事イベント

・先輩と交渉イベント

・アイテム取得イベント?


2,一日ごとに「章」という形にする

・区切りを入れることで見やすくする

・一日の終りに借金計算


3,「一日」という概念を実現するために「時間」の概念を入れる

・うわ、面倒


4,学生ということを考慮して、平日と土日でルーチンを変える

・うわ、面倒 その2

・平日に「学校登校イベント」を実行することで実現



◇イベント実行の構造

・現在のパラメータ(持ち金や時間など)で実行可能なイベントを列挙する

・実行可能なイベントをランダムで実行する

・パラメータを更新する


これを実現するために、isEnableというメソッドを作り、それからすでに実行したイベントを記録するためにWorldクラスに配列を用意して……


いや、もういいですね。

プログラム講座じゃないんだから、あんまり細かく書いても読みたくないですよね。


とりあえず、がんばった結果、こんなんが出せるようになりました。

まだ内容がないですが、とりあえず一日が流れているのがわかると思います。

一週間分を貼り付けます。



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

月曜日 AM:7時【家】

葵は学校に向かって走った!なんとか、間に合った!


月曜日 AM:8時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 AM:9時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 AM:10時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 AM:11時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 PM:0時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 PM:1時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 PM:2時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 PM:3時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 PM:4時【学校】

葵はなんとなく授業をやり過ごした!


月曜日 PM:5時【学校】

葵は家に帰った!


月曜日 PM:6時【家】

暇つぶしをして1時間過ぎた!


月曜日 PM:7時【家】

暇つぶしをして1時間過ぎた!


月曜日 PM:8時【家】

暇つぶしをして1時間過ぎた!


月曜日 PM:9時【家】

布団に入った!

一日が終わった!


借金が4370円増えた!

借金総額:\441370

所持金:\100



火曜日 AM:7時【家】

葵は学校に向かって走った!なんとか、間に合った!


火曜日 AM:8時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 AM:9時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 AM:10時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 AM:11時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 PM:0時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 PM:1時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 PM:2時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 PM:3時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 PM:4時【学校】

葵はなんとなく授業をやり過ごした!


火曜日 PM:5時【学校】

葵は2時間部活動をした!


火曜日 PM:7時【学校】

葵は家に帰った!


火曜日 PM:8時【家】

暇つぶしをして1時間過ぎた!


火曜日 PM:9時【家】

布団に入った!

一日が終わった!


借金が4413円増えた!

借金総額:\445783

所持金:\100



水曜日 AM:7時【家】

暇つぶしをして1時間過ぎた!


水曜日 AM:8時【家】

葵は学校に行くのを忘れていた。慌てて出かけたが遅刻した……


水曜日 AM:9時【学校】

葵はなんとなく授業をやり過ごした!


水曜日 AM:10時【学校】

葵はなんとなく授業をやり過ごした!


水曜日 AM:11時【学校】

葵はなんとなく授業をやり過ごした!


水曜日 PM:0時【学校】

葵はなんとなく授業をやり過ごした!


水曜日 PM:1時【学校】

葵はなんとなく授業をやり過ごした!


水曜日 PM:2時【学校】

葵はなんとなく授業をやり過ごした!


水曜日 PM:3時【学校】

葵はなんとなく授業をやり過ごした!


水曜日 PM:4時【学校】

葵はなんとなく授業をやり過ごした!


水曜日 PM:5時【学校】

葵は2時間部活動をした!


水曜日 PM:7時【学校】

葵は家に帰った!


水曜日 PM:8時【家】

暇つぶしをして1時間過ぎた!


水曜日 PM:9時【家】

暇つぶしをして1時間過ぎた!


水曜日 PM:10時【家】

暇つぶしをして1時間過ぎた!


水曜日 PM:11時【家】

布団に入った!

一日が終わった!


借金が4457円増えた!

借金総額:\450240

所持金:\100



木曜日 AM:7時【家】

葵は学校に向かって走った!なんとか、間に合った!


木曜日 AM:8時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 AM:9時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 AM:10時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 AM:11時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 PM:0時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 PM:1時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 PM:2時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 PM:3時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 PM:4時【学校】

葵はなんとなく授業をやり過ごした!


木曜日 PM:5時【学校】

葵は家に帰った!


木曜日 PM:6時【家】

暇つぶしをして1時間過ぎた!


木曜日 PM:7時【家】

暇つぶしをして1時間過ぎた!


木曜日 PM:8時【家】

暇つぶしをして1時間過ぎた!


木曜日 PM:9時【家】

布団に入った!

一日が終わった!


借金が4502円増えた!

借金総額:\454742

所持金:\100



金曜日 AM:7時【家】

暇つぶしをして1時間過ぎた!


金曜日 AM:8時【家】

葵は学校に行くのを忘れていた。慌てて出かけたが遅刻した……


金曜日 AM:9時【学校】

葵はなんとなく授業をやり過ごした!


金曜日 AM:10時【学校】

葵はなんとなく授業をやり過ごした!


金曜日 AM:11時【学校】

葵はなんとなく授業をやり過ごした!


金曜日 PM:0時【学校】

葵はなんとなく授業をやり過ごした!


金曜日 PM:1時【学校】

葵はなんとなく授業をやり過ごした!


金曜日 PM:2時【学校】

葵はなんとなく授業をやり過ごした!


金曜日 PM:3時【学校】

葵はなんとなく授業をやり過ごした!


金曜日 PM:4時【学校】

葵はなんとなく授業をやり過ごした!


金曜日 PM:5時【学校】

葵は家に帰った!


金曜日 PM:6時【家】

暇つぶしをして1時間過ぎた!


金曜日 PM:7時【家】

暇つぶしをして1時間過ぎた!


金曜日 PM:8時【家】

暇つぶしをして1時間過ぎた!


金曜日 PM:9時【家】

暇つぶしをして1時間過ぎた!


金曜日 PM:10時【家】

暇つぶしをして1時間過ぎた!


金曜日 PM:11時【家】

布団に入った!

一日が終わった!


借金が4547円増えた!

借金総額:\459289

所持金:\100



土曜日 AM:7時【家】

暇つぶしをして1時間過ぎた!


土曜日 AM:8時【家】

1時間働いて300円稼いだ!(0回目)


土曜日 AM:9時【家】

暇つぶしをして1時間過ぎた!


土曜日 AM:10時【家】

1時間働いて300円稼いだ!(1回目)


土曜日 AM:11時【家】

1時間働いて300円稼いだ!(2回目)


土曜日 PM:0時【家】

1時間働いて300円稼いだ!(3回目)


土曜日 PM:1時【家】

1時間働いて300円稼いだ!(4回目)


土曜日 PM:2時【家】

暇つぶしをして1時間過ぎた!


土曜日 PM:3時【家】

暇つぶしをして1時間過ぎた!


土曜日 PM:4時【家】

1時間働いて300円稼いだ!(5回目)


土曜日 PM:5時【家】

1時間働いて300円稼いだ!(6回目)


土曜日 PM:6時【家】

1時間働いて300円稼いだ!(7回目)


土曜日 PM:7時【家】

1時間働いて300円稼いだ!(8回目)


土曜日 PM:8時【家】

暇つぶしをして1時間過ぎた!


土曜日 PM:9時【家】

暇つぶしをして1時間過ぎた!


土曜日 PM:10時【家】

暇つぶしをして1時間過ぎた!


土曜日 PM:11時【家】

布団に入った!

一日が終わった!


借金が4592円増えた!

借金総額:\463881

所持金:\2800



日曜日 AM:7時【家】

1時間働いて300円稼いだ!(9回目)


日曜日 AM:8時【家】

1時間働いて300円稼いだ!(10回目)


日曜日 AM:9時【家】

暇つぶしをして1時間過ぎた!


日曜日 AM:10時【家】

1時間働いて300円稼いだ!(11回目)


日曜日 AM:11時【家】

暇つぶしをして1時間過ぎた!


日曜日 PM:0時【家】

1時間働いて300円稼いだ!(12回目)


日曜日 PM:1時【家】

1時間働いて300円稼いだ!(13回目)


日曜日 PM:2時【家】

暇つぶしをして1時間過ぎた!


日曜日 PM:3時【家】

1時間働いて300円稼いだ!(14回目)


日曜日 PM:4時【家】

1時間働いて300円稼いだ!(15回目)


日曜日 PM:5時【家】

1時間働いて300円稼いだ!(16回目)


日曜日 PM:6時【家】

1時間働いて300円稼いだ!(17回目)


日曜日 PM:7時【家】

暇つぶしをして1時間過ぎた!


日曜日 PM:8時【家】

1時間働いて300円稼いだ!(18回目)


日曜日 PM:9時【家】

布団に入った!

一日が終わった!


借金が4638円増えた!

借金総額:\468519

所持金:\5800


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



これ、なんだろう。

とりあえず意図通りに動いてはいるけど、もうこれ小説じゃないね。


学園生活シミュレーションゲーム(製作中)?


暇つぶしややりすごしてばかりしていますが、とりあえず進行はまともにうごいています。

ランダムでイベントを選んでいるので、暇つぶしして通学が遅れたり、部活をしたりしなかったり、寝る時間が前後したりしています。

よし!


それにしても、つくづくこれは小説じゃない気が……

ま、まぁ、いいか……


とりあえずここまで動いたので、ここにイベントをぶちこんでいけばそれっぽくなると思います。


さて、どうなるでしょうか……


ちなみに、プログラムはこんな感じになっています~




######################################################


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

# coding: utf-8


#イベントモデルの実験


def init

$aoi = AoiAgent::new

$world = World::new

$world.aoi = $aoi


$event = []


$event.push HappyED::new

$event.push BadED::new


$event.push MoveEvent1::new

$event.push MoveEvent2::new



$event.push SchoolEvent1::new

$event.push ClubEvent1::new

$event.push Event3::new

$event.push Event4::new

$event.push Event5::new

end


#家→学校に移動

class MoveEvent1


def getEventName

return "平日の通学"

end


def isEnable(world,chara)

if !world.isHoliday && (world.time < 12) && (world.place == "家")

return true

else

return false

end

end


def run(world,chara)

if world.time == 7

puts "葵は学校に向かって走った!なんとか、間に合った!"

else

puts "葵は学校に行くのを忘れていた。慌てて出かけたが遅刻した……"

end


world.place = "学校"

world.time += 1

end


end


#学校→家に移動

class MoveEvent2


def getEventName

return "平日の通学(帰り)"

end


def isEnable(world,chara)

if !world.isHoliday && (world.time >= 17) && (world.place == "学校")

return true

else

return false

end

end


def run(world,chara)

puts "葵は家に帰った!"


world.place = "家"

world.time += 1

end


end




#平日の学校

class SchoolEvent1


def getEventName

return "平日の学校"

end


def isEnable(world,chara)

if !world.isHoliday && (world.time < 17) && (world.place == "学校")

return true

else

return false

end

end


def run(world,chara)

puts "葵はなんとなく授業をやり過ごした!"


world.time += 1

end


end


#平日の部活動

class ClubEvent1


def getEventName

return "平日の部活動"

end


def isEnable(world,chara)

if !world.isHoliday && (world.time == 17) && (world.place == "学校")

return true

else

return false

end

end


def run(world,chara)

puts "葵は2時間部活動をした!"


world.time = 19

end


end


#暇つぶし

class Event3


def getEventName

return "家で暇つぶし"

end


def isEnable(world,chara)

if world.time <= 23 && world.place == "家"

return true

else

return false

end

end


def run(world,chara)

puts "暇つぶしをして1時間過ぎた!"


world.time += 1

end


end


#暇つぶし

class Event4


def getEventName

return "睡眠"

end


def isEnable(world,chara)

if (world.time >= 21) && (world.place == "家")

return true

else

return false

end

end


def run(world,chara)

puts "布団に入った!"

puts "一日が終わった!"

puts

world.time = 7

world.nextDay

end


end



#働く

class Event5


def getEventName

return "働く"

end


def isEnable(world,chara)

if world.isHoliday

return true

end

end


def run(world,chara)

puts "1時間働いて300円稼いだ!("+world.countOfExperiencedEvent(self).to_s+"回目)"


chara.money += 300

world.time +=1

end


end



#Happy ED

class HappyED


def getEventName

return "Happy ED"

end


def isEnable(world,chara)

if chara.money >= world.debt

return true

else

return false

end

end


def run(world,chara)

puts "おめでとう! 借金完済!"

return 1

end


end


#BADED

class BadED


def getEventName

return "BAD ED"

end


def isEnable(world,chara)

if world.debt >= 1000000

return true

else

return false

end

end


def run(world,chara)

puts "借金100万円! バッドED!"

return 1

end


end



#環境クラス

class World

#イベント

attr_accessor :last_event

#時間

attr_accessor :time,:day

#借金

attr_accessor :debt, :debt_rate

#エージェント

attr_accessor :aoi

#場所

attr_accessor :place


def initialize

@last_event = ""

@time = 7

@day = 1 #月~金 1-5 土日 6,7


@experienced_events = {}


@debt = 437000

@debt_rate = 1


@place = "家"

end


#時間関係

def isHoliday

if @day == 6 || @day == 7

return true

else

return false

end

end


def nextDay

@day += 1

if @day == 8

@day = 1

end


a = (@debt*@debt_rate*0.01).to_i

puts "借金が"+a.to_s+"円増えた!"

@debt += a

puts "借金総額:\\"+@debt.to_s

puts "所持金:\\"+@aoi.money.to_s

puts


puts "◇"

end


def getDayTime

d = ""

case @day

when 1 then d = "月"

when 2 then d = "火"

when 3 then d = "水"

when 4 then d = "木"

when 5 then d = "金"

when 6 then d = "土"

when 7 then d = "日"

end


t = ""

if @time < 12

t = "AM:"+@time.to_s+"時"

else

t = "PM:"+(@time-12).to_s+"時"

end


return ""+d+"曜日 "+t

end


def addExperiencedEvent(e)

if @experienced_events[e.getEventName] == nil

@experienced_events[e.getEventName] = 1

else

@experienced_events[e.getEventName] += 1

end

end


def countOfExperiencedEvent(e)

if @experienced_events[e.getEventName] == nil

return 0

else

return @experienced_events[e.getEventName]

end

end


end



def mainstory


loop do

puts $world.getDayTime+"【"+$world.place+"】"


ev = []


for e in $event

if e.isEnable($world,$aoi)

ev.push e

end

end


n = rand() * ev.length


if ev[n].run($world,$aoi) == 1

break

end


#前回のイベントを記録

$world.last_event = ev[n].getEventName


#実行したイベントを記録

$world.addExperiencedEvent(ev[n])


puts

end

end






#葵エージェント

class AoiAgent


attr_accessor :money


def initialize

@money=100

end


end




#メイン処理

init

mainstory


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

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

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