見出し画像

【StoneStoryRPG/Stonescript】7.カスタム関数

カスタム関数は、スクリプト内の処理を分割整理することで、読みやすく・使いやすくするために使われます。
関数は、宣言されただけでは実行されず、後で関数が呼び出された時に実行されます。


例1 関数の宣言方法

関数は「func [関数名]()」の形で宣言し、次のインデントされた行から
関数の処理内容を記入します。
補足:関数名は基本的に大文字から始めるのが通例です。

//毎フレーム1ずつ増加するカウンターを作成する
//beginに設定されたキーが入力されると、カウンターの値は0にリセットされる

var count = 0
count++
>カウンター = @count@

func ResetCounter()
  count = 0

?key=begin
  ResetCounter()

変数countを宣言し、0を格納する
countに1増加させた値を格納する
画面上に「カウンター = [count]」と表示する

関数ResetCounterを宣言する、内容は以下
 ┗ countに0を格納する

もしkeyがbeginなら?
 ┗ ResetCounterを実行する

【宣言】
func ResetCounter()
<実行> ↑    
ResetCounter()
【呼び出し】

例2 返り値(戻り値)

関数は、処理を行うだけでなく、処理を行って得られた値(返り値)を別の処理で使用することができます。

関数が値を返すようにするためには、関数内の最後に「return [返したい値]」を使用します。returnに到達したら、この関数の処理は終了します。

返り値を他の処理で使用する場合は、「[関数名]()」を使用します。変数を使う時と同じように使えます。

//非ボスステージにかかった時間をボスステージで表示する

func NonBossDuration()
  return totalTime - time

var duration
duration = NonBossDuration()
>かかった時間: @duration@

関数NonBossDurationを宣言する。内容は以下
 ┗ [totaltime] - [time] の答えを返して関数終了

変数durationを宣言する
durationにNonBossDurationの返り値を格納する
画面上に「かかった時間: [duration]」と表示する

【宣言】
func NonBossDuration()
  <実行> ↑  ↓ <値を返す>
NonBossDuration()
【呼び出し】

例3 引数

他の処理内で求めた値を関数内で使用したい場合は、関数を宣言する時に「func [関数名]([引数])」を使います。引数は複数使用することもできます。

関数を使用する際は、「func [関数名]([値])」の形で使用します。

//5から10の範囲内での乱数を生成する

func RandomRange(min, max)
  ?min >= max
    return min
  return min + rng % (max - min + 1)

var randomValue
randomValue = RandomRange(5, 10)
>乱数: @randomValue@

変数minとmaxを引数に持つ関数RandomRangeを宣言する。内容は以下
 ┣ もし[min]が[max]以上なら?
   ┗[min]を返して関数終了
 ┗ [min]~[max]の乱数を返して関数終了 ※

変数randomValueを宣言する
randomValueに、RandomRangeに(min=5,max=10)を代入した時の返り値を格納する
画面上に「乱数: [randomValue]」と表示する

※「return」に到達すると関数を抜けます。なので、この行はfalseの時に適用される処理です。

【宣言】
func RandomRange(min, max)
<値を代入して実行> ↑  ↓ <値を返す>    
RandomRange(5, 10)
【呼び出し】

例4 this

関数内と関数外に同じ名前の変数が定義されている場合は、「this」をつけることで、関数外の変数を使用できます。

基本的に、別々の名前を付けている場合は、thisについて考える必要はありません。便宜上、変数名が同じになってしまう場合はthisの出番です。

var a = 1
func TestScope(a)
  >スクリプト内でのa = @this.a@, 関数内でのa = @a@

TestScope(3)

変数aを宣言し、1を格納する
変数aを引数にもつ関数TestScopeを宣言する。内容は以下 ※
 ┗ 画面上に「スクリプト内でのa = [スクリプト内でのa], 関数内でのa = [a]」と表示する

TestScopeに(a=3)を代入して実行する

※この「a」は、最初に宣言した「a」とは異なる変数です。
なので、TestScopeに(a=3)を代入しても、最初に宣言したaの値は1のままです。


補足1:関数のイメージを図にしてみたよ。

補足2:関数はゲームが閉じられるまでに216個以上呼び出されるとエラーを吐きます。


(次回更新送れるかも)

この記事が気に入ったらサポートをしてみませんか?