従来のRSE3.5ではSphereScriptは単体の機能として存在していましたが、SphereEngine4(以下、SpE4と表記)になり、ゲームエンジンに取り込まれました。そのため、スクリプトだけを動かすということはなくなりました。 SpE4では以下の2つの方法で、スクリプトを動かすことが出来ます。
■SpE4.exeの起動時に動かすスクリプト
SpE4.exeが存在するフォルダそのもの、もしくはその中に作成したフォルダに、拡張子「*.rsp」というファイルを作ります。例えば「test.rsp」などです。そのファイルの中に以下の4行を書いてください。
=============== #include "SpeSystem/script/system.inc" function main(){ message_box("HelloWorld", "", 0); } ===============保存したら、SpE4.exeを起動してください。作ったファイルが「パッケージ」欄に追加されています。これを選んで「起動」ボタンを押してください。
■アンカーポイント内に記述するスクリプト
SphereEngine4開発講座の第4回で説明している方法で、アンカーポイントのスクリプトを入力できるところまで進めます。
マップやユニットの配置などは要らないので、"Island.map"と"Radar.plc"を読み込む作業は無視して、いきなり「PathEditor」を選んでください。そして、長ったらしいスクリプトをコピーする代わりに、以下の1行を入力してください。
=============== print_string("HelloWorld\n"); ===============Ctrl+Sで保存すると、以下のダイアログが表示されます。
何かを画面に表示しないと、何が起こったのかわかりません。まず最初に、画面に文字を表示する方法を紹介します。 上と似た内容になってしまいますが、エディットモードを起動し、以下のスクリプトを入力してF5キーで実行してください。なお、プログラムの記述そのもの、もしくはプログラムの記述が保存されたファイルを『ソースコード』と呼びます。
=============== print_string("この文字を画面に表示します。"); ===============
以上のようにすることで、コンソール風の画面に「この文字を画面に表示します。」と表示されます。このように文字は簡単に表示できますが、画像の表示をするのは結構大変です。しばらくは文字のみで我慢しましょう。
改行するには文字列の中に「\n」を入れてください。
=============== print_string("ここで改行\nします。\n\n\n\n\n\nたくさん改行を入れられます。"); ===============
一部例外がありますが、プログラムの各行の最後にセミコロン;が必要です。セミコロンまでが1行の命令文とみなされます。
=============== print_string("こうすれば"); print_string("1行に2命令書けます。\n"); print_string ("セミコロンを書かなければ2行に1つの命令を分けて書くことも出来ます。\n"); print_string ("入り組んだ条件判断式や演算を見やすく書くのに便利です。"); ===============
セミコロンまでを『文』と呼びます。 SphereScriptでは、改行はスペースなどと同様の単なる空白文字として扱われます。セミコロンまでが一つの文であり、処理単位です。 この『文』や後述の『式』、『値』、『演算子』といった概念とそれぞれの違いは、最初は分からなくても支障が無いですが、入り組んだプログラムを書こうとする場合には理解する必要がありますので、一通りの文法をマスターしたら戻って読み直してください。
プログラムに『コメント』を付与できます。コメントは実行時には自動的に無視されます。プログラムの説明を書いておくと、後で見るときに分かりやすくなるので、多少のコメントは書くようにしましょう。 コメントはスラッシュ二つ「//」から「改行」まで、または「/*」と「*/」で囲まれた範囲です。
// :行末までコメント /* 〜 */ :囲まれた範囲であれば複数行にわたってコメント
=============== //ここはコメントなので、プログラムの実行内容には一切影響を与えません /* こんな風にしてもコメントになります。 */ /* //複数行コメントの中に1行コメントをネストできます。 */ print_string("この文字を画面に表示します。"); ===============
デバッグなどで、プログラムの特定部分を無効にしたいが、消すと元に戻すのが大変だ、という場合、下記のように一時的にコメントにしてしまって無効にするテクニックが良く使われます。
=============== /* デバッグの目的などで、とりあえず以下の処理を無かったことにしたい。 if (size>450) { SetSize(450) } */ ===============
こうすると、見た目はプログラムの一部であっても、コメントになって実行されなくなります。このような使い方を『コメントアウト』と呼びます。
空白文字として扱われるのは半角スペース、タブ、改行の3つです。不意に全角スペースなどを入力してしまうとエラーが出てしまうので注意してください。全角スペースを点線の四角などで表示してくれるエディタを使用すると便利でしょう。 変数名や数値、演算子など、プログラムの最小単位となる一つの単語を『字句』と呼びます。 SphereScriptは正規表現の解釈を応用して字句の区切りを認識していますので、字句の区切りが明確であれば、空白文字があっても無くてもかまいません。以下の2行は全く同じ意味です。
=============== print_string("文字列の表示"); print_string ( "文字列の表示" ) ; ===============
ただし、字句の中に空白文字が入ると別の字句になってしまうため、次のように書くことは出来ません。
=============== print _ string("文字列の表示"); //コンパイルエラー ===============
コメントにある『コンパイルエラー』については、「コンパイルとランタイム」の項で説明します。
\マークが改行コードの表現として使われてしまっているため、文字として「\」を表示したい場合は「\\」と記述してください。 同様に、ダブルコーテーション「"」を表示したい場合は「\"」と記述してください。
=============== print_string("\"代金は\\1,500-です。\"\n"); ===============
このような使い方をする\マークのことを『エスケープシーケンス』と呼ぶことがあります。なお、全角の¥や”は通常の漢字と同じ扱いになりますので、エスケープシーケンスは不用です。 エスケープシーケンスは以下の種類があります。
\n : 改行を表す \t : タブを表す \\ : 半角円マーク「\」を表す \" : 半角ダブルコーテーション「"」を表す \' : 半角シングルコーテーション「'」を表す
SphereScriptでは、テキスト形式で書いたソースコードを読み込んで実行します。 1行目から順番に実行するのですが、実行を始める前に『コンパイル』と呼ばれる処理を行い、字句と構文の解釈をまとめて行います。 字句や構文が正しく解釈できない場合、実行を始める前にエラーになります。これが『コンパイルエラー』として表示されるものです。コンパイルエラーは字句や構文の間違いなので、エラーが発生した行の内容をよく確認して修正してください。 コンパイルエラーは画面に表示されるほかに、CompileError.txtというファイルに出力されます。エラーが発生した後にエディタに戻ると、ダイアログが表示されるので「はい」を選択するとそのスクリプトを含むアンカーポイントまで移動できるので、すぐに修正できます。
括弧の間違いなどの場合、間違えた行ではなく、その何行も後の行でエラーが発生することがあります。 「34行目にエラーがあるって言ってるけど、間違ってなんかねーよ!」 という場合、前の行のセミコロン忘れ、括弧忘れなどが無いか確認してください。 コンパイルエラーが発生しても、エラーをまとめて出力するために、強引にプログラムの解釈を続けようとします。 そのため、書き間違いは一箇所だけなのに、その間違いが雪ダルマ式に膨らんで何十件というエラーになる場合があります。 この場合は最初のエラーが発生した場所を修正するだけで、全てのエラーが解決することも多いため、メゲずにがんばってください。 このあたりは慣れの要素が大きいので、何度も失敗しながらコツをつかんでいってください。
エラーが一つも発生せずにコンパイルが成功したプログラムは直ちに実行を開始します。実行中のことを『ランタイム』と呼びます。 ここで、SphereScriptの文法上は正しいが、何らかの理由でプログラムを実行できなくなったという場合にはエラーが発生します。例えば、関数の引数が足りない場合や、ゼロで除算しようとした場合などです。このエラーを『ランタイムエラー』と呼びます。 ランタイムエラーが発生すると、コンパイルと異なり強制的にプログラムの実行が中断されます。 行数が表示されますが、単純な文法違いではないため、内容を確認してからプログラムを修正してください。 ランタイムエラーの内容は、RuntimeError.txtに出力されます。