yaneuraoGameScript のマニュアルの丸写しになってしまいますが、文字列はメモリのどこかに格納され、 その場所を指すポインタを使って取り扱います。 スクリプト中ではポインタも整数(long型)として扱っているので、
str s; s = "文字列";と書くのと
long s; s = "文字列";と書くのとは同じ意味になります。しかし一応文字列へのポインタ型として"str"というキーワードが使えるので、 本マニュアルでは文字列を指す変数の前に"str"と書いて区別しています。
スクリプト中で二重引用符で囲まれた部分は定数としての文字列になります。
これだけでは不十分なので変数としての文字列型が欲しいところですが、スクリプトでは事実上
変数の型が long しかないので、あらかじめ文字列を扱うための領域を用意しています。
この領域には string という名前の配列でアクセスします。配列には文字列領域へのポインタが入っています。
スクリプトでの文字列やポインタの扱いは、本物のC言語のように本格的なものではないので、
「具体的にはこういう記述をする」という例を示すにとどめます
(むしろAKAHO自身もやねうらおさんのコードをそのまま使っているだけなので深くは分かっていない)。
文字列を扱う関数としては、strcpy(),strncpy(),strcat(),sprintf() があります。
strcpy(string[0], "おはよう"); // 文字列"おはよう"を string[0] にコピーする。 strcat(string[0], "ございます"); // string[0] に文字列"ございます"をくっつける。 strncpy(string[1], string[0], 7); // string[0] の先頭から7文字を string[1] にコピーする。 sprintf(string[2], "朝のあいさつ:%s", string[1]); // string[2] の内容は"朝のあいさつ:おはようござい"になる。これらの関数の機能は、C言語の同名関数と同じです。 C言語を扱ったことがない人は……インターネットで適当に調べてください(^^; ただし、strncpy で指定する文字数は、半角でも全角でも1文字と数えます。
整数: long型の整数を渡せます。 long f(x) { return x*2; } void g() { long i; i = f(i); } 文字列: 文字列を指すポインタを(整数で)渡せます。 void f(x) { window_msg_out(x); } void g() { str s = "moe"; f(s); } 配列: 配列を指すポインタを渡せます。 C言語と違って配列名に&を付ける必要があります。 long f(*array) { return array[0] + array[1]; } void g() { long list[10]; f(&list); }
構造体は無いので、まとまったデータを受け渡す時は配列を使います。 配列のサイズと、データの入っているインデックスはあらかじめ存在する変数を使ってアクセスします。 例えば ks_get_sidestatus() の説明を見てください。配列へのアクセスは数字ではなく、 SIDESTATUS_UNITCOUNT といった変数で指定して下さい。
1次元の配列しかないので、
long array[100*100]; array[x*100+y] = 1;という形で使うことになります。