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

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

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

エラーが発生しました。

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

ブックマーク機能を使うにはログインしてください。
Pythonに「なろう系タイトルジェネレータ」を移植し、さらにいろんなツールを開発してみる物語  作者: 超プリン体
第二章 なろう系あらすじジェネレータを開発する
13/20

第二章 第三話 試作機を作ってみる

 みなさんこんにちはプリンです。なろう系あらすじジェネレータの章の、第三話です。


 第二話では、意外と簡単に、いわゆる「いつどこで誰が何をした」ゲームが、作れてしまいました。


 ただ、そこが今回の最終目的ではありません。今回の「あらすじジェネレータ」の目的は、「いつどこで誰が何をした」ゲームよりも、もっと複雑なあらすじを、比較的簡単な労力で、実現したいということです。なので、もう少し頑張ってみたいと思います。


 さて今回は、そんな複雑なあらすじジェネレータを、どうやって実現するかの試行錯誤をお届けする予定でした。しかし、プログラムの構造に関する検討を、こういう文章で、延々と語っても面白いのかと疑問に思ったため、次のような方針で、プログラムを作ってしまうことにしました。


 方針:

  ルールの定義の書式や、それをどう読み込むかなんていうのは二の次。

  実際、メモリ上にどう配置して、どう使いたいのかの、最終案を形にしてしまおう。


  つまり、動けばいい!


 現代のプログラムというのは、自分も含めていろんな人が、将来メンテしやすいように、わかりやすく記述するものですが、今回は、動けばいい、と割り切ってしまいます(笑。こうすることで、無駄な仕様を検討する必要なく、実際どんな感じで動くのかを、確認することが出来るんですね。


 結果、今回のプログラムは、こんなに短く、シンプルになりました。ただし、あまり読みやすさはよくないです。


挿絵(By みてみん)


 これを実行させた結果のコンソールが、こちらです。「%いつ% %誰%が %どこで% %どうする%」、という「あらすじのベース」を使い、10回ランダムにあらすじを生成させてみた結果です。


挿絵(By みてみん)


 今回のプログラムのメモリ構造が、どうなっているかを図にしてみました。今回は、この図を書くのが一番大変でした(汗。


挿絵(By みてみん)


 左上の、「synopsis_baseあらすじのベース」を元に、左下のカタログで、抽出したいデータがメモリのどこにあるかを特定し、乱数で右のリストから、必要なデータを取り出し、あらすじを組み立てる、というものです。


 今回のプログラムの、最大の特徴が、この「synopsis_baseあらすじのベース」です。今、このベースは「"%いつ% %誰%が %どこで% %どうする%"」、になっているんですけど、これを例えば、


 「%いつ% %誰%が %誰%とともに %どこで% %どうする% しかし、%どうする%"」


に変更してやると、それだけで生成される結果が、このベースに基づき複雑なものになります。


挿絵(By みてみん)


 今回はここまでです。今回作ったプログラムは、このあと添付します。結構ややこしいプログラムになっています。ご質問などありましたら感想欄でご質問いただければご説明いたします。なお次回は今回のプログラムをいじくって、今のデータ量のまま、よりバラエティーに富んだあらすじを作れるよう改造する予定です。ご期待ください。


 では次回またお会いしましょう。



(今回作ったプログラム、ここから)


# -*- coding: utf-8 -*-


import random



synopsis_base = "%いつ% %誰%が %どこで% %どうする%"

#synopsis_base = "%いつ% %誰%が %誰%とともに %どこで% %どうする% しかし、%どうする%"


s_def=["%いつ%","%誰%","%どこで%","%どうする%"]

s_start=[0,3,11,17]

s_num=[3,8,6,9]


s_str=["とある時代","時は未来","時は現代",

"ベレー帽の少女","社長","かわいい猫耳少女","マスターである男性","トラブルを起こしたニート主人公","機械の大群に殺された主人公","引っ込み思案の少女","幽霊としてよみがえった天才小説家",

"冒険者の格差が問題となった異世界で","ゲーム内仮想世界で","リアル世界で","地球で","過去世界で","都会のある町で",

"ギルドの問題を解決する","商人となってお店を開く","異世界の牢獄に閉じ込められる","何らかのトラブルによって過去に飛ばされる","ラスボスを倒す","霊体となる","機械を乗っ取る","人類を勝利に導く","作家デビューを目指して頑張る"

]



for n in range(10):


c=0

syno = synopsis_base


for s in s_def:

flag_end=-1

while flag_end==-1:

if syno.find(s_def[c])!=-1:

rep_target= s_str[random.randint(s_start[c],s_start[c]+s_num[c]-1)]

syno=syno.replace(s_def[c],rep_target,1)

else:

flag_end=0



c=c+1

print(syno)



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

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

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

↑ページトップへ