結果


(もともと私のブログは2021年1月21日に公開)
今日はおもしろいアイディアがありました.何かを注文したときには、姪の誕生日プレゼントになったのです.今のところ、狂ったLIBSの本は、アイデアは:それはコードを書くのは簡単です-と私は私の姪を賭け、彼女の兄弟も、それを台無しに楽しむだろう.(プラス、本を節約!)
少し研究(後でスクリプトを命名するのにどれくらい慎重であるかを見るために…)そして、私はゲームマッドリブスは、実際には、以前のゲーム242479152に基づいて実質的に同じコードは、コンテンツのテンプレートに基づいて、ゲームのいずれかのスタイルのために働くことができることに気づいた.だからここで私はコードのための私のアイデアを整理し、それからプログラミングになるよ!

結果 技術の決定


すべての楽しみのために私は最近C++から出てきました、そして、Pythonですべてを書くことは私を不思議に不安定に感じさせます;このプロジェクトは比較的複雑で、抽象化のレベルが高く、C +がコントロールするレベルを必要としない.さらに、私はすでにPythonで作業するために必要なツールのほとんどを見つける場所を知っている.
最初はコマンドラインスクリプトを書いていて、必要に応じてコマンドラインスクリプトとして走らせることができたかもしれませんが、少しだけストレッチしてGUIで作り上げて、ユーザーをより簡単にすることができればより良い練習です.GUIについては、ほとんどがライセンスの実用化のために、PySide 2を使います.(ライセンスやその他の違いに関する詳細は ).
コンテンツファイルはJSONによって書かれています.なぜなら、書くことが太くなっていて、私が望むことをするのに苦労しなければ、簡単で、人間によって読める(そして人間の編集可能な)形式であるからです.
最後に、依存関係の問題を回避し、ユーザのシステムインストールをきれいにしておくために、自社のvenvのパッケージとして実行するようにプログラムを設定します.プラスそれは良い練習(そして良い練習)です.

マシンKoderは主要なポイントをカバーする記事を書いた コンテンツファイル


この点において、私はコンテンツファイルが動作しなければならない情報の基本的に3つのフィールドを見ることができます.最初に、それは重要ではありませんが、タイトル.第二に、ユーザが入力された単語が入力されるベーステキストは、適切な名前の“空白”で埋められる.第三に、塗りつぶす値の辞書、名前付きブランクにそれぞれ対応する.
# 1:
title = "Breakfast"
# 2:
text = "{name1} {verb1} to a/an {adjective1} {noun1} of {noun_plural1}."
# 3:
values = {name1: "", verb1: "", adjective1: "", noun1: "", noun_plural1: ""}
おそらく、その順序ではない(例えば、テキストプロデューサーの上に辞書を持っているコンテンツプロデューサーにとってより意味があるかもしれません).

NOTE:

I was thinking about using .gitignore to hide all "content" files, since initially I'll be populating it with content from the book I purchased for her, but I think it makes more sense to have a separation between public and private content - public content can be shared with anybody, and makes it easier to get into and start messing with the game, whereas private content can be things that shouldn't be shared publicly, because of copyright or whatever other concerns.


側の注記として、私はまた、ユーザーが生成した出力ファイルを保存するには、おそらくテキストファイルとしてコンテンツのファイル名+タイムスタンプに基づいて.あるいは、元のタイトルを含んでいるJSONと「by :」ユーザによって入力されるフィールド.私がこのルートに行くならば、私はまた、最大のエンターテイメントのために特定の出力を編集するか、微調整するのを許すために使用される価値の辞書を保存することができました;
理想的には、ユーザーがGUIを通してコンテンツファイルを作成する方法がありますが、それは私がすぐに含めるつもりはない、より複雑な提案です.必要なフィールドでJSONファイルを書くのは難しくありません.

ゲームループ


プログラムが始まるとき、ユーザーは「歓迎」ストリングで、そして、タイトル(おそらくサブディレクトリによって組織化される)による利用できる内容のリストで示されなければなりません.タイトルをクリックし、選択ボタンをクリックすると、ユーザーが要求された値を入力し、下のボタンを“テキストを生成する”ボタンを入力します.生成を選択すると、出力ファイルに保存されたテキストファイルを生成し、画面上のコンテンツを表示すると、その時点では、ゲームは“選択して新しい”または“終了”-またはおそらく“保存”を表示するには、ユーザーを提供します.「新規」を選択すると、初期画面にユーザーを返す必要がありますが、ビューを保存すると、生成されたファイルの一覧を表示し、ビューを選択するダイアログが追加されます.

問題点


ユーザーがすべての空白を入力しない場合はどうなりますか?つはここで2つの方法で行くことができます:1つは、ユーザーが空白を埋めることなく、または2つのオプションを許可しないことによって、私は好むオプション:もし値が満たされていない場合は、値の名前を供給するだけで(上記の例では、誰かがADFeature 1を埋めることを拒否した場合、テキストはADFeature 1で出力されます).これは、値を保存するという考えと特によく働きます、そして、実際に、コンテンツ製作者が彼らの方向でより具体的であるのを許容することができました:Nounn 1は「食物に関連した名詞」、またはそのような何かであらかじめ供給されることができました、そして、ユーザーがそれを記入しないことを選ぶならば、それは使用される価値です.
修正するより簡単でないもう一つの問題は、ひどく形成された内容です.あまりにも多くの可能な値は、そのようなそれらのすべてが使用されるように、大きなプログラムではありませんが、彼らの好きな動詞が最終的なテキストにそれをしないときにユーザーに失望しています.しかし、彼らが内容を誤ってフォーマットするならば、JSONが全く読むことができないか、ベーステキストが正確に示される入力値を持っていないか、辞書でリストされない入力値を尋ねますか?いくつかの種類のエラー処理とディスプレイは、この状況にとって重要です.

結論


このすべてを書くことは、私にこのゲームのソフトウェアを開発することから始めるかなりの場所を与えました.私は、この点で非常に多くのGUI作業をしていないので、最も困難な部分が意図したように動作しているPyside 2を得ることを予期します.

After writing this post, I immediately dove into implementing the project. You can see my results in this Consequences github repository.