本シリーズでは、Ren'Pyユーザーが知っておきたいPythonの使い方をご紹介しています。
詳細および事前準備などは「00.はじめに」をご確認ください。
今回は「関数」の紹介です。何度も使う数式や処理などがある場合に、関数として定義して必要な時に呼び出すことができます。毎回同じコードをコピー&ペーストする必要も無くなりますし修正したいときも一か所直せばOKなので、スクリプトの管理も楽になりミスも減らすことができます。
準備
今回はコンソールではなくRen'Pyスクリプトで説明を進めます。
今回の記事で出てくるスクリプトのスクリーンショットは、テキストエディター「Atom」を使用した場合の表示となります。同様にAtomを使用したい方は、ランチャーの右下「設定」→「テキストエディター」で「Atom」を選択しておいてください(下図参照)。
※本記事の時点ではAtomを使用していますが、現在はVisual Studio Code推奨です(2023年1月追記)
また、スクリプトの起動時にはランチャーから「script.rpy」を選択してください。上記で設定したエディターで開くことができます。
それでは、始めましょう。
まずは使ってみる
お手元のscript.rpyファイルに次のスクリプトを書いてみてください。
※script.rpyに既に記入されているスクリプトがあれば削除またはコメントアウトしてください
# 関数を定義
init python:
def func_sample(f_str):
f_str_new = "こんにちは、" + f_str
return f_str_new
# # startラベル
label start:
"関数テスト"
$ tmp_str = func_sample("タロウ")
"結果は「 [tmp_str] 」となりました。"
"サンプル終了"
return
cf. Atom上での表示
スクリプトを書き終わったらプロジェクトを起動してみてください。
次のように表示されましたでしょうか。
変数の中身を確認する方法
本題に入る前に、ゲーム進行中に変数の中身(値)を確認する方法について説明します。
その1)
「Shift + O」でコンソールを起動し、変数名を入力してエンターを押すと確認できます。
その2)
「Shift + D」を押すと開発者メニューを開くことができます。
ここにある「変数ビューアー」を開くと、使用されている変数の名前と値を一括で確認できます。
但し、日本語の文字列が文字化けしたり、(どういうわけか)あるはずの変数が見つからない場合などもあります。表示されないときは前述のコンソールでも確認してみてください。
その3)
セリフ内のカッコ [] の中に変数名を記入することで、その部分に変数の値を表示させることができます。
$ tmp_str = "こんにちは、タロウ"
"結果は「 [tmp_str] 」となりました。"
今回の記事ではこの方法を使用します。
関数の使い方
いよいよ本題に入ります。冒頭のスクリプトはお手元にございますでしょうか?
関数は
最初に定義する
必要なところで呼び出す
の2段階で使用します。
関数の定義
冒頭のスクリプトの中で、関数を定義しているのはこちらの部分です。
関数を定義するときは「init python」ステートメントの中に記述してください。
まず「def [関数名] ( [引数] ):」の形で始めます。
インデントを下げ、好きな処理内容を書き、最後に「return [戻り値]」と書きます。
ところで、関数特有の単語がいくつか登場しています。
引数(ひきすう): 関数を使うときに与える値(変数)
戻り値(返り値): 関数を使った結果として返す値(変数)
少々ピンとこないかもしれませんが、ひとまず呼び方だけ覚えておいてください。
ここで一旦整理すると、今回の例は
引数: f_str
戻り値: f_str_new
処理の内容: f_str_new = "こんにちは、" + f_srt
という関数です。
言い換えると、引数の値の頭に「こんにちは、」を付けて返す関数です。
続いて、この関数を呼び出す方法について紹介します。
関数の呼び出し
冒頭のスクリプトの中で、関数を呼び出しているのは下図の中央「$」で始まる行です。
「 関数名( [何らかの値] ) 」と入力すると、その部分の値が戻り値に化けます。
従って変数「tmp_str」には「"こんにちは、タロウ"」が入ります。
練習
引数"タロウ"の部分を、あなたの名前に変更してみてください。
結果はどのようになりますか?
※複数の引数・戻り値を設定する場合
下図のように、カンマ区切りで複数の引数・戻り値を指定することもできます。
但し、複数の戻り値を設定するとtuple(リストのようなもの)として戻ってくるため取り扱いに少し注意が必要です。
なお、引数や戻り値を0個にすることもできます。
関数を使う意味?
ここまで関数の説明をするために敢えて関数を使いましたが、Ren'Py内であれば次のような書き方でも構いません。
こちらは、所定の処理を記述したラベルを必要なときにcallする例です。
# startラベル
label start:
"ラベル呼び出しテスト"
$ tmp_name = "タロウ"
# ラベル「ex_sub」を呼び出す
call ex_sub
"結果は「 [tmp_name_new] 」となりました。"
"サンプル終了"
return
# call用のラベルを定義
label ex_sub:
$ tmp_name_new = "こんにちは、" + tmp_name
return
冒頭の例と同じ結果になるはずです。
筆者も制作時に頻繁に関数を使うわけではあまりありません。
全エンドクリアの判定用や、画像の重ね合わせ用として幾つか作ったことがある程度です。
上の例のようにcall用のラベルを作ってcallする方が、Ren'Pyの文法がそのまま使えることもあり使用頻度としては高いです。
ですが関数はPythonプログラミングの基本の1つ(恐らく)ですし、練習しておくと何かと有益なはずなので本連載で取り上げました。
関数を使うことになるのは主に次のような場合です。
1行Python($で始まる行)やPythonステートメント内で呼び出す場合
Ren'Py本体の機能をもじるなど、高度なカスタマイズを行う場合
そもそもRen'Pyとは全く関係ない用途でPythonを使う場合
3つ目について、00.はじめにの補足で紹介しているAnacondaなどの開発環境でPythonを使用することができます。Pythonは汎用のプログラミング言語なので様々な用途に使用できます。個人的にはテキストファイルの一括編集やcsvデータの編集などにしばしば使います。
今回はここまでです。
ところで、この「Ren'Pyユーザー向けPython講座」シリース全体に共通することですが…記事内で扱われていないことで「これはできるのか?」と思った際にはぜひ「 Python + やりたいこと 」で検索してみてください。既に述べた通り、Pythonはメジャーな汎用プログラミング言語の1つなので様々な情報がネット上に転がっています。
それでは、ここまでお疲れ様でした。
皆様のRen'PyライフとPythonライフが楽しいものになりますように。
cf. 関連ページ
Ren'Py部屋 @crAsmビジュアルノベル情報部屋
お問合せフォーム - ご質問・ご要望はこちら