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

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

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

エラーが発生しました。

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

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

第二章 第二話 「いつどこで誰が何をした」ゲームをPythonでさくっと作ってみる

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


 第一話では、この章で目指すべきゴールを提示しました。小説でいうと、起承転結の「起」、でしたね。


 そして第二話では実行画面のレイアウトの仮決めと、構文定義ファイルの読み込みまでを、行う予定でした。


 結果、どうなったかを見てみましょう。

挿絵(By みてみん)


 ごくり……。


 何か、「あらすじのようなもの」、が生成されているのがお分かりいただけるでしょうか? はい、そうなんです。ひとまずレイアウトとファイル読み込みを作っちゃおうとして、第一章の「第三話 テキストをランダムに切り替える」、のソースコードを参考にして、いじっていた所、はっと思いついてやってみた結果、「いつどこで誰が何をした」ゲームが、すでに完成してしまいました!


 何度も「自動作成」ボタンを押した時の、Spyderの実行コンソールの画面がこちらです。

挿絵(By みてみん)


 個人的には、「時は現代、機械の大群に殺された主人公が、リアル世界で、商人となってお店を開く」というのが、意味不明でちょっと好きです(汗。


 ソースコードは、後ではりつけておきますが、こんな感じのボリュームです。プログラムとしてはそれほど長いものではありませんが、あまりコーディングの経験がない人が、ゼロから入力しようとすると、大変ですね。

挿絵(By みてみん)


 プログラムの最初の方で定義してある、list_when、list_who、list_where、list_actionっていう、配列(list)をいじることで、新たなカードを追加できますので、ご興味のある方は、色々やってみるといいですね。たぶん、PCの準備と、AnacondaやPythonのインストールが、大変だと思いますが(汗。


 というわけで、今回はささっと、「いつどこで誰が何をした」ゲームを実現しちゃいました。次回はより複雑な粗筋を作るための、小細工なんかをどうしようか、という作戦と試行錯誤をご報告したいと思っています。

 前回ちらっと話題にさせていただいた、「構文解析」については、Pythonのアドオンであるpypersingとか、larkを使ってみようかなと思ってたんですけど、予想以上に高機能で、また日本語の記事やサンプルが少ないため、私には難しくて使えなさそうです。じゃあどうするの? というのは、今考え中です。


 今回はここまでです。最後に今回作成したソースコードを添付しておきますので、必要ならご活用ください。(Pythonでは、ソース中の左の空白が、Tabでないとエラーすることがあるので、エラーした場合はそこを疑ってみてください)


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



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

import tkinter

import random


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

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

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

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

n_pre_when=-1

n_pre_who=-1

n_pre_where=-1

n_pre_action=-1


#ウインドウ設定

tk=tkinter.Tk()

tk.title(u"なろう系あらすじジェネレータ")

tk.minsize(640,480)

#ウインドウ表示

win=tkinter.Canvas(bg="black",width=640,height=480)

win.place(x=0,y=0)

btn_quit = tkinter.Button(tk, text='終了')

btn_quit.place(x=130, y=80)

btn_create = tkinter.Button(tk, text='自動作成')

btn_create.place(x=50, y=80)

txt_synopsis=tkinter.Label(text=u"ここにランダムで作成したあらすじが表示されます。")

txt_synopsis.place(x=0,y=0)


def display_synopsis():

global n_pre_when,n_pre_who,n_pre_where,n_pre_action


if n_pre_when==-1:

n_when=random.randint(0,len(list_when)-1)

else:

n_when=random.randint(0,len(list_when)-2)

if n_when>=n_pre_when:

n_when=n_when+1


if n_pre_who==-1:

n_who=random.randint(0,len(list_who)-1)

else:

n_who=random.randint(0,len(list_who)-2)

if n_who>=n_pre_who:

n_who=n_who+1


if n_pre_where==-1:

n_where=random.randint(0,len(list_where)-1)

else:

n_where=random.randint(0,len(list_where)-2)

if n_where>=n_pre_where:

n_where=n_where+1


if n_pre_action==-1:

n_action=random.randint(0,len(list_action)-1)

else:

n_action=random.randint(0,len(list_action)-2)

if n_action>=n_pre_action:

n_action=n_action+1


t=list_when[n_when] + "、" + list_who[n_who] + "、" + list_where[n_where] + "、" + list_action[n_action]

print(t,n_when,n_who,n_where,n_action)

txt_synopsis["text"] = t

n_pre_when=n_when

n_pre_who=n_who

n_pre_where=n_where

n_pre_action=n_action


btn_create["command"]=display_synopsis


def destroy_tk():

tk.destroy()

btn_quit["command"]=destroy_tk



tk.mainloop()

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

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

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

↑ページトップへ