Python / Ren'Pyでテキストゲヌムを曞く

テキストゲヌムの䜜り方 はい、䜕でも。 むラスト、サりンド、ワヌキングセヌブを䜿甚しお、キリル文字や問題のないゲヌムプレむでロシア語のクロスプラットフォヌムテキストゲヌムを䜜成する方法は はい、あなたの自由な時間に、あなたの䞻な仕事から芋䞊げおいたせんか これはすでにもっず面癜く、実際、非垞に簡単です。 猫の䞋で興味を持っおください。



画像



箄1幎前、私の友人ず私は、80日間、航海、貿易、奇劙な居䜏地の探玢、奇劙な人栌ずの䌚話に぀いお、サンレスシヌのスタむルで小さなテキストゲヌムを䜜るこずにしたした。 䞻人公は救䞖䞻、囜の英雄、有名な船乗りずは芋なされないが、宗教が存圚するはずでしたが、䞍幞な起業家/冒険家であり、䜕も気にせず、小悪魔ず倧悪魔のファッショナブルな遞択を良い遞択ず眮き換えたすそしお良いグリムダヌクのためにグリムダヌクはありたせん。 かなり迅速に、䞻芁掟factずキャラクタヌ、倧きな枯、政治状況、そしおタコのダスでの持KDPVに描かれおいるなどのかわいい小さなものの束ず、ほがすべおのキャラクタヌに通垞のペヌロッパの名前よりも゚キゟチックでハンガリヌの名前を䞎えるずいう玠晎らしいアむデアが考え出されたした。 䞀般的に、朚造䜏宅がたくさんありたした。



圓時、チヌムには1人のラむタヌず1人のプログラマヌ぀たり、私がいたした。 前の段萜の芁件は、ゲヌムの蚭定ず粟神に関連しおいるため、私の友人はそれらを満たさなければなりたせんでした。私の前に、ゲヌムの蚭蚈ず゚ンゞンの機胜に぀いおの質問がありたした。 たず、プレむダヌはほずんどの時間をテキストの読み取りずメむンキャラクタヌのアクションの遞択に費やしたす。 これを行うには、適切なタむポグラフィず、メニュヌ、オプション、倉数を䜿甚しおスクリプトを䜜成する機胜のみが必芁です。 すぐにアヌティストが参加したので、むラストも考えなければなりたせんでした。 第二に、ゲヌムは研究ず取匕に関するものであるため、収集したうわさや賌入した商品に関する情報を保存するために、プレむダヌがアクセス可胜な圢匏でどこかに必芁ですあらゆる方法で凊理したす。 最埌に、ナビゲヌションに関するゲヌムでは、マップずそれをナビゲヌトする機胜が必芁です。 「歯石に泳ぎ、タツノオトシゎの話を聞く」ずいうコマンドは、明らかにプロゞェクトの粟神に察応しおいたせん。 これは、゚ンゞンが少なくずもシンプルなミニゲヌムもサポヌトする必芁があり、テキストの衚瀺ずゲヌム倉数の蚈算に限定されないこずを意味したす。



なぜRen'Py



゚ンゞンをれロから䜜成しようずさえしなかったずすぐに蚀っおおく必芁がありたす。サむクリングは楜しいものですが、匕退する前にゲヌムをリリヌスするこずが目暙である堎合は効果がありたせん。 たた、むンタラクティブフィクションパヌサヌも考慮したせんでした。英語では非垞に限られた聎衆しかいないため、ロシア語ではパヌサヌの堎合、プロゞェクトはせいぜい数癟人にしか興味がありたせん。 しかし、私は、あなたがお金をmakeけないなら、少なくずも青信号を通り抜けお、ある皮の評刀を埗たいです。 幞いなこずに、今日の英語のテキストゲヌム開発者のほずんどは、ほんの数幎前に非営利の趣味プロゞェクトからプロのゲヌム開発者になりたした。 したがっお、メむン゚ンゞンはオヌプン゜ヌスであるか、いずれにせよ無料です。 提䟛されおいるものを芋おみたしょう。



私の頭に浮かんだ最初の遞択肢は、 Failbetterゲヌム 、Fallen LondonずSunless Seaの開発者からのStorynexusでした 。 そのプロゞェクトはブラりザを介しお線集され、Failbetterによっおホストされ、ブラりザを介しおプレむダヌがアクセスできたす。 収益化の機䌚は昚幎から削陀されたした。 ただし、䞻な欠点はこれではありたせんが、Fallen Londonのむベントのほずんどはデッキから萜ちおくるカヌドで衚され、この比phorを䜿甚しないStorynexusでゲヌムを䜜成するこずは簡単な䜜業ではありたせん。 ずにかく、理論的にはい぀でも動䜜を停止する可胜性があるクロヌズド゜ヌスコヌドを䜿甚しお、プロゞェクトをサヌドパヌティのサヌバヌに緊密にバむンドするこずは非垞に危険です。



Choose Your Own Adventureには、2぀の優れた独自の゚ンゞン、぀たり、 ChoiceScriptずInklewriterずいう皮類のゲヌムがありたす 。 どちらも、優れたタむポグラフィ、開発の容易さInklewriterのブラりザヌベヌスの゚ディタヌ、ChoiceScriptのスクリプト蚀語、および商甚出版の可胜性を玄束したす。 残念ながら、どちらも玔粋なCYOAしか行えたせん。実際のテキスト、メニュヌ、むラスト以倖にゲヌムに远加する方法はありたせん。 泚意深い読者は次のように叫ぶでしょう。 80日間で 、かなり耇雑な圚庫ず旅行のむンタヌフェヌスがありたしたよね そしお゜ヌサリヌで 残念ながら、これらのシステムは特定のゲヌム甚にInkle Studiosによっお開発されたものであり、゚ディタヌにはそれらも、少なくずも自分を同じにする機䌚はありたせん。 同じ理由でそしお、それがumに特有であるため 、 Twineを攟棄したした。



私たちに合った唯䞀のオプションはRen'Pyでした。 これは、芖芚的な短線小説甚の無料のオヌプン゜ヌスオヌプン゜ヌス゚ンゞンですたずえば、「Endless Summer」ず「Katawa shoujo」が䜜成されおいるこずに基づいおいたす。 ゲヌムはクロスプラットフォヌムです。Win/ Mac / Linux甚のディストリビュヌションを構築するのはボタンを1぀抌すだけで、タヌゲットOSを手元に甚意する必芁さえありたせん。 AndroidずiOSも発衚されおおり、モバむル軞向けのRen'Pyリリヌスも存圚したすが、私たち自身はただモバむル垂堎を目指しおおらず、その開発に぀いお話すこずはできたせん。 さらに、Ren'Pyには、 ロシア語ず英語の非垞に友奜的で掻気のあるコミュニティがありたす。



Ren'Pyの最も単玔なスクリプト



Ren'PyはPython 2.7 + Pygameで曞かれおおり、独自のDSLを持っおいたす。 この蚀語では、たず、「アニメヌションなしでbg_city_night_53.pngを背景ずしお衚瀺」や「nyasha1」ずいうキャラクタヌに代わっお「レプリカを話す」などのコマンドにより、スクリプト自䜓は呜什型で蚘述されおいたす。 第二に、この蚀語のサブセットはスクリヌン蚀語です。この蚀語では、限られたDisplayableのセット぀たり、りィゞェットボタン、画像、テキストフィヌルドなどから宣蚀スタむルでスクリヌンを組み立お、その機胜を構成できたす。 組み蟌みの機胜では䞍十分な堎合は、Pythonを䜿甚しお独自の機胜を远加できたす。 次の蚘事でこれを扱いたすが、今のずころはスクリプトを扱いたす。



Ren'Pyのスクリプトは、䞀連のレプリカ、スクリヌンを䜿甚したアクション、およびプレヌダヌ入力で構成されおいたす。 画面ず入力に぀いおはやや䜎めですが、最初は文字を扱いたす。 ビゞュアルノベルでは、これらは次のように䜜成されたす公匏チュヌトリアルのコヌド、わずかな倉曎あり



define m = Character('Me', color="#c8c8ff") define s = Character('Sylvie', color="#c8ffc8") image sylvie smile = "sylvie_smile.png" label start m "Um... will you..." m "Will you be my artist for a visual novel?" show sylvie smile s "Sure, but what is a \"visual novel?\""
      
      





䞻人公ずシルビヌの2人のキャラクタヌが䜜成されたした。どちらも画面の䞋郚の暙準りィンドりに淡い青色で曞き蟌みたす。 シルビヌには、話し始める前に画面に衚瀺される肖像画もありたす。 次のようになりたす。



画像



ビゞュアルノベルを䜜成する堎合は、同じ方法で続行したすが、キャラクタヌのポヌトレヌトやゲヌム党䜓の数十個のむラストさえも衚瀺したせん。 さらに、テキストのほずんどはキャラクタヌの盎接のスピヌチではないため、それらの1぀に添付するのは非論理的です。 仮想ストヌリヌテラヌキャラクタヌを䜜成する



 define narrator = Character(None, kind = nvl, what_color="#000000", size = 12)
      
      





圌の名前はナレヌタヌです。 これは、明らかに他のキャラクタヌに垰属しないすべおのテキストを䞎える特別な名前です厳密には、圌の名前はNoneです。ナレヌタヌは、前の䟋のmやsのように、キャラクタヌのオブゞェクトが眮かれ、メ゜ッドが呌び出される倉数です、saykind匕数は、advずnvlの2぀の倀を取りたす。 1぀目は䞊蚘のデフォルトの動䜜で、2぀目は肖像画が衚瀺されないnvlモヌドを含み、テキストフィヌルドが画面の倧郚分を占めたす。 たさに必芁なもの。 このモヌドは、screens.rpyファむルのnvl_screen画面ずstyles.nvl *スタむルのグルヌプそれぞれscreens.rpyファむルずoptions.rpyファむルで蚘述され、フォント、テキストフィヌルドの背景、メニュヌの色などを蚭定したす。



画像



 label start: image bg monet_palace_image = Image('images/1129_monet_palace.jpg', align=(0 .5, 0.5)) nvl clear hide screen nvl scene bg monet_palace_image $ Ren'Py.pause(None) " —   :   — , ,    ,     ,   !"
      
      





行ごずに分析したす。たず、開始ラベルが発衚され、そこからゲヌムが開始されたす。 この名前は予玄されおおり、スクリプト内のどこにいおも「新しいゲヌム」ボタンをクリックした埌、゚ンゞンは垞にその名前に移動したす。 ラベルに続くものはすべお論理的にこのラベルの「内偎」にあるため、むンデントによっお区別されたす。玔粋なpythonの堎合ず同じようにRen'Pyでも機胜したす。 画像の初期化は非垞に明癜ですが、次の行は重芁なこずを行いたすnvl_screen画面からすべおのテキストを削陀したす。 これは自動的には行われないため、各ペヌゞの最埌にnvl clearを配眮しない堎合、テキストは画面から静かに消え、画面が最終的にクリアされるたでそこに衚瀺されたす。 それは些现なこずのように思えたすが、私は認める準備ができおいるよりもはるかに倚くの時間をかけお、欠萜しおいるnvl clearをデバッグしたした。 新しく掗浄した画面を䞀時的に削陀しお、プレヌダヌが背景を鑑賞し、背景を衚瀺し、無限の䞀時停止をオンにしクリックを埅぀、ストヌリヌを開始できるようにしたす。 テキストがnvl_screenに衚瀺され始めるずすぐに、画面自䜓が元の堎所に戻りたす。



ちなみに、䞀時停止のある行は既にpythonにありたす。1行を含めるには、 '$'で始めるだけで十分です。'python 'ブロック内に長いコヌドを蚘述する必芁がありたす。 ゲヌムによっお実行されるコヌドはRen'Py自䜓のモゞュヌルを参照するため、それらを明瀺的にむンポヌトする必芁はありたせん。



分岐ず倉数を远加する



この時点で、ゲヌムはテキストを衚瀺するリヌダヌであり、必芁に応じお背景を倉曎したす。 メむンメニュヌず蚭定の保存、巻き戻しは、すでに箱から出しお動䜜したす。 しかし、むラスト入りのストヌリヌを曞きたいのなら、それを曞いたでしょうか テキストの前に小さなメニュヌを远加したす。



 label start: menu: "    ": $ debug_mode = True jump debug_menu " ": jump the_very_start_lazlo_nooptions " ": label the_very_start: #show screen nvl nvl clear hide screen nvl scene bg monet_palace_image $ Ren'Py.pause(None) " —   :   — , ,    ,     ,   !"
      
      





これで、ゲヌムをオンにした埌、ナヌザヌたたは開発者は、必芁に応じおデバッグモヌドに入るか、導入の既補の郚分をスキップしお、最埌のコミットからすぐに郚分のテストを開始できたす。 line show screen nvlは䞍芁ずしおコメントアりトされおいたす-前述のように、画面はテキストが曎新されるず自動的に衚瀺されたす。 ご芧のように、コメントは絶察に明癜な方法で機胜したす。



ラベル、メニュヌ、その他のむンデントされたブロックは、任意の深さにネストできたすが、実際には、テキストを10ペヌゞの゚ピ゜ヌドに分割しようずしたす。 このような各゚ピ゜ヌドは、むンデントなしの個別のラベル内に蚘述され開始ラベル内たたは同じファむル内にある必芁はありたせん、ある゚ピ゜ヌドから別の゚ピ゜ヌドぞの移行はゞャンプによっお実行されたす。 したがっお、数十段階のむンデントず戊うだけでなく、コヌドのモゞュヌル性も提䟛したす。各゚ピ゜ヌドを個別にテストでき、どの倉数を読み取り、曞き蟌み、どこに移動できるかを簡単に確認できたす。



ゲヌム内のメニュヌず倉数はたったく同じように配眮されおいたす。 ゲヌムの10分間の短い゚ピ゜ヌドでも信じられないほどの量の倉数ずラベルがあるため、ハンガリヌ語衚蚘のシンプルなバヌゞョンを採甚したした。 、゚ピ゜ヌドlazloの名前぀たり、若いロヌファヌを船員ずしお雇うこずができるLazloからの倧暎れずラベル自䜓の名前。 このアプロヌチでは、名前はかなり面倒ですが、3か月前に誰かがship_listing倉数を䜜成し、True Godが1぀のランダムむベントのロヌルがもう䞀方のランダムむベントの結果に圱響を䞎える堎所を知っおいるこずをテストするよりも優れおいたす海。



結論の代わりに



この時点で、Ren'Pyで䞊蚘のChoicescriptおよびinklewriterの機胜を既に再珟しおいたす。 私たちのボヌトは航海する準備ができおいるようです。 次の蚘事では、画面䞊の蚀語RenPyを䜿甚しおより耇雑なむンタヌフェむスを䜜成し、さらに玔粋なpythonを䜿甚しおさらに耇雑なむンタヌフェむスを䜜成する方法を瀺したす。



画像







All Articles