第二章 第二話 「いつどこで誰が何をした」ゲームをPythonでさくっと作ってみる
みなさんこんにちはプリンです。なろう系あらすじジェネレータの章の、第二話です。
第一話では、この章で目指すべきゴールを提示しました。小説でいうと、起承転結の「起」、でしたね。
そして第二話では実行画面のレイアウトの仮決めと、構文定義ファイルの読み込みまでを、行う予定でした。
結果、どうなったかを見てみましょう。
ごくり……。
何か、「あらすじのようなもの」、が生成されているのがお分かりいただけるでしょうか? はい、そうなんです。ひとまずレイアウトとファイル読み込みを作っちゃおうとして、第一章の「第三話 テキストをランダムに切り替える」、のソースコードを参考にして、いじっていた所、はっと思いついてやってみた結果、「いつどこで誰が何をした」ゲームが、すでに完成してしまいました!
何度も「自動作成」ボタンを押した時の、Spyderの実行コンソールの画面がこちらです。
個人的には、「時は現代、機械の大群に殺された主人公が、リアル世界で、商人となってお店を開く」というのが、意味不明でちょっと好きです(汗。
ソースコードは、後ではりつけておきますが、こんな感じのボリュームです。プログラムとしてはそれほど長いものではありませんが、あまりコーディングの経験がない人が、ゼロから入力しようとすると、大変ですね。
プログラムの最初の方で定義してある、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()




