QuakeCマニュアル
2.QuakeCの言語の記述
2.1 コメント文
コメント文は以下の例に示したC++その他多くのC言語で用いられている記述を導入しており、
コメント内容には日本語を使用可能である。当然、コメント文の内容はコンパイル時に無視さ
れる。
//これより後はこの行の終わりまでコメントとみなされる
/*この区間における全ての記述はコメントとみなされる*/
2.2 名前
変数名やフィールド名の長さは最大64文字迄である。名前の指定に関してはA〜Z、a〜z
及び_(アンダーバー)を使用し、2文字目からは0〜9の文字も使用可能である(つまり、数字は
名前の先頭に持ってくることはできない)。
2.3 新規構造体の定義について
QuakeCでは新たな構造体やオブジェクトの定義は行えず、C言語のtypedefのように変数等の型
名を別途定義する等の行為も許されていない。できるとすればentity型へフィールドを追加す
る程度のことだけである。
2.4 変数の定義
型 変数1,変数2 ;
例:
float a,b ;
上記は基本的な型の宣言とその例である。また、型の宣言と同時に変数の初期値を以下のよう
に指定することも可能。
型 変数 = 値 ;
例:
float a = 2 ;
注意:変数の使用範囲は2段階に分かれている。普通に宣言された変数はグローバル変数として
扱われ、多くの関数から参照及び変更が可能であり、全ての関数において共通の変数である(ネ
ットワークを介してサーバーからクライアントへ与えられる値も同様である)。しかし、関数内
でキーワードlocalと共に宣言される変数は宣言された関数内においてのみ機能する(恐らくスタ
ックへ変数をため込んでいく方式を使用しているのだろう)。
関数へ与えられたパラメータはローカル変数のように扱われ、その関数内でのみ機能する。しか
し、パラメータ変数の変更は可能である。
2.5 定数定義
多くのグローバル変数は実際のところプログラム全体を通して常に初期値を保ったままである。
これはグローバル変数を仮想変数の代りに使用しているからであり(qccに仮想変数を扱う機能が
無い)、決してこの値を変更しようなどと試みないように。そうしないとプログラムが正常に動
くかどうかは保証できない。
2.6 関数の定義
基本的な関数定義を以下に示す。
戻り値の型 ( 型 パラメータ1, 型 パラメータ2,...)関数名=
{
...コード...
};
括弧{...}の最後へ;の記述を加えることをくれぐれも忘れぬように。次にいくつかの例を示す。
void() think = {...};
entity() FindTarget = {...};
void(vector destination,float speed,void() callback) SUB_CalcMove = {...};
2. 7 関数の宣言
もしもある関数を定義する以前に呼び出したい場合、呼び出す前に関数の宣言を行う必要がある。
C言語で言うプロトタイプの宣言と考えてよい。
戻り値の型 ( 型 パラメータ1, 型 パラメータ2,...)関数名;
2.8 フレーム関数の定義
フレーム関数(ステート関数とも呼ぶ)は便利な特殊関数である。この関数は各フレームを使っ
たアニメーションの定義を易
読性の高い記述で行える。以下に例を示す。
void() フレーム名 = [ $フレーム番号 , 次回呼び出し関数名 ] {...コード...};
上記例は以下の記述と同じである。
void() フレーム名 =
{
self.frame= $フレーム番号; // 表示するモデルのフレーム番号
self.nextthink = time + 0.1; // 次のフレームは1/10秒後に表示
self.think = 次回呼び出し関数名; // 次回呼び出す関数名
...コード...
};
2.9 条件文
条件分は一般のC言語と同様の記述である。
if( 条件式 )
{
ステートメント
}
else
{
ステートメント
}
2.10 繰り返し文
while、do〜while文も一般のC言語と同様の記述である。
while( 条件式 )
{
ステートメント
}
または
do
{
ステートメント
}while( 条件式 )
2.11 関数の呼び出し
関数呼び出し:
関数名 ( パラメータ1, パラメータ2,...);
注:8つを超えるパラメータは指定することができない。
戻り値:
return 戻り値 ;
2.12 論理演算子
! 比較論理否定
&& 比較論理積
|| 比較論理和
これらの演算結果は真と偽のみである。
注:if文の条件式において2つ以上の条件が含まれている場合、真偽の判断を行うまでに条件式
全ての評価を行う(CよりもBASICに
近い方法)。もしも、一部の条件が常に真だと限らないのであれば、if文の中へ更にif文を置く
ように分割した方が処理は速い。
2.13 比較演算子
<= < >= > //関係演算子
== //左辺と右辺が等値、C言語と同じ表記
!= //左辺と右辺が不等値、C言語と同じ表記
これらの演算結果は真と偽のみである。
2.14 float及びinteger型に使用可能な演算子
* / - +
これらの混在する演算においては括弧を使用することにより演算の曖昧さを無くすこと。
2.15 ビット演算
& //論理積
| //論理和
これらの演算子はfloat及びinteger型に対して使用し、各ビットごとの論理積または論理和演
算を行う。主な使用目的はビットマスクである。Quakeの武器選択処理などに必要となるだろう。
e-mail:ponpoko@axcx.com