移行で一番戸惑うのは変数だと思います。
何せ数が多い。今回の変数の種類は
- グローバルオブジェクトの変数(整数・実数・文字列・0/非0)
- グローバルオブジェクトの配列変数(整数・実数・文字列・0/非0・構造体・関数)
- グローバルオブジェクトの参照変数(全部の変数)
- グローバルオブジェクトの定数変数(整数・実数・文字列・0/非0)
- 構造体オブジェクト
- ローカルオブジェクトの変数(整数・実数・文字列・0/非0)
- ローカルオブジェクトの配列変数(整数・実数・文字列・0/非0・構造体・関数)
- ローカルオブジェクトの参照変数(全部の変数)
- ローカルオブジェクトの定数変数(整数・実数・文字列・0/非0)
と、こんな具合。
とはいえ、
- グローバルオブジェクトの変数(整数・文字列)
- グローバルオブジェクトの配列変数(整数・文字列)
- ローカルオブジェクトの変数(整数・文字列)
だけでも、大抵のことは可能です。
さて、ソース上どこでも使える変数をグローバルオブジェクト、
ある一つの関数内でのみ使われる変数をローカルオブジェクトと呼びます。
変数は「宣言」することで使用可能になります。
このあたりSYS3.Xより不便です。
「宣言」は、最初にその変数を使う時、名前の前に「変数の型」をつけるということです。
つけるのは最初だけで、グローバルオブジェクトならそれ以降ずっと、
ローカルオブジェクトならその関数内で使う限り、
それ以上「宣言」をする必要はありません。
例:
SYS3.X場合
*ラベル1:
!day:7!
'これから'H0,day:'日以内に君は結婚する'A
&0.adv:
SYS4.xの場合
void game_main(void)
{
int day; //宣言 この場合はint(整数)
day = 7;
'これから'N(day);'日以内に君は結婚する'A;
}