基本コマンド
INCLUDE : #INCLUDE .DBA Flie name
DarkBASICソースファイルを取り込む。
実態はファイルの挿入と同様なので、type名や関数名、変数名の衝突に注意すること。
主に、メインソースに対してサブソースファイルを取り込むのに使う。
機能別にサブソースを作っておくと見通しが良くなる。
255個まで使用可能。
INCLUDEされたソースの中でさらにINCLUDEする事は可能だが、
あくまでも最終的には1つに合体したソースでコンパイルされるため、
取り込まれるソースが重複しないように注意が必要。
他言語に見られるようなソース毎のスコープは無い。
したがって、サブルーチンもGOSUB~RETURNではなく、FUNCTIONで記述することが推奨される。
FUNCTION内ではGLOBAL指定された変数以外はFUNCTION内の局所的なローカル変数として扱われるため、
変数の衝突危険性が少なくなる。
CONSTANT : #CONSTANT Constant name=Value
定数定義を行う。
記述例:
#CONSTANT TYPE_MAX=16
この場合はTYPE_MAXが16という値の別名として扱われる。
定義された定数はDIMコマンドの配列添え字にも使用できる。
簡単に言えば、変更できない変数のようなもの。
プログラムの可読性や可変性に貢献する。
定数名にコマンド名などの予約語は使用できない。
REM : REM
コメント文を記す為のコマンド。
実行されても影響を与える事は一切無い。
プログラムの可読性に貢献する。
ソースリスト内の備忘録や何かの目印として使用することが推奨される。
「`」という記号で置き換え可能
プログラマの間ではコメント記述の重要性を示すものとして、
「一週間後の自分は他人と思え」という格言がある。
REMSTART : REMSTART
複数行コメント文の開始を指定する。
REMENDコマンドまでコメント文の扱いになる。
実行されても一切影響を与えることは無い。
プログラムの可読性に貢献する。
ソースリスト内の備忘録や何かの目印として使用することが推奨される。
REMSTART~REMENDの中にREMSTART~REMENDを内包する事は出来ない。
プログラマの間ではコメント記述の重要性を示すものとして、
「一週間後の自分は他人と思え」という格言がある。
REMEND : REMEND
複数行コメントの終了を示す。
REMSTARTと対で使用する。
REMSTART~REMENDの中にREMSTART~REMENDを内包する事は出来ない。
REMSTARTコマンド参照。
SYNC ON : SYNC ON
このコマンドによってSYNCコマンドによる画面更新に設定する。
画面の自動表示を行わない。
この時は画面描画は全てフレームバッファにとどまりその場で表示されなくなる。
画面をフレーム毎描画にしたい時に使う。
まとめて画面を更新するのでゲーム処理速度には有利。
SYNC OFF : SYNC OFF
このコマンドによってSYNCコマンドによる画面更新ではなく描画処理ごとの更新になる。
画面の自動表示を行う。
デフォルトではSYNC OFF。
SYNC RATE : SYNC RATE Rate
画面の1秒間に書き換えるレート数の設定をする。
SYNC SLEEP : SYNC SLEEP Slep Flag
SYNC MASK : SYNC MASK DWORD Mask Value
SYNC : SYNC
画面の更新。
SYNC ONによる手動更新を選択時には、
前回SYNC後からの画面の更新結果を一斉に表示する。
SYNC ON SYNC RATE 30 do SET CURSOR 0,0 print GET TIME$() sync loop
FASTSYNC : FASTSYNC
SYNCに同じ画面更新。
ただし、Windowsのメッセージを処理しないのでその分処理が速い。
一時的な画面更新に適する。
フレーム毎の画面更新には絶対使用禁止。
CLS : CLS
画面の消去。
inkコマンドの背景色で塗る。
SET CURSOR : SET CURSOR X,Y
PRINTコマンドのカーソル位置を設定する。
PRINT : PRINT Print-Statements
Basicの基本構文と記述方法は同じ
文字を連結したい場合はコンマ(,)やセミコロン(;)で繋げて、
改行したく無い場合はセミコロン(;)を最後に付ける。
例)
PRINT topscores(x).name," "; PRINT topscores(x).score
PRINTC : PRINTC Print-Statements
Basicの基本構文と記述方法は同じ
文字を連結したい場合はコンマ(,)やセミコロン(;)で繋げる。
表示は1行のみで改行には対応していない。文字列中の改行コードは無視される。
改行は、PRINTを使う。
次のPRINTやPRINTC文で改行したく無い場合はセミコロン(;)を最後に付ける。
倍精度実数にも対応。
例)
PRINTC topscores(x).name," " PRINTC topscores(x).score
INPUT : INPUT Print Statements, Input Variable
変数へキーボードからの値を代入する。同時に文字列を表示することも可能。
DIM : DIM
配列の宣言を行う。
DIM array(10)
変数の宣言は異なる。
a AS integer
UNDIM : UNDIM
DO : DO
LOOPコマンドとの間で無限ループを行う。
LOOPコマンド実行で処理が移る目印。
a=3 DO print a a=a-1 if a=0 then EXIT ` EXITはループを脱出する。 LOOP wait key end
EXIT : EXIT
ループからの脱出。
ループを形成する下側コマンドの次に実行が移る。
説明書にはfor~nextループについて触れられてないが、
少なくとも最新の英語版では、for~nextループからの脱出にも使える。
LOOP : LOOP
DOコマンドとの間で無限ループを行う。
前方のDOコマンドの位置に処理が移る。
END : END
プログラムの実行を終了しOSへ戻る。
IF : IF
条件分岐
rem IFは2種類ある a=1 IF a=1 THEN print "a=1"
IF a=1 print "a=1 desu" ELSE print "not a=2 desu" ENDIF
wait key
ELSE : ELSE
ENDIF : ENDIF
REPEAT : REPEAT
条件付ループ
a=3 REPEAT print "hello !! ",a a=a-1 UNTIL a=0 ` a=0 の時、ループを脱出する。 print "a=0 then exit" wait key
UNTIL : UNTIL
WHILE : WHILE
条件付ループ
a=3 WHILE a<>0 ` ループの継続条件、a=0の時ループを脱出する。 print "hello !!",a a=a-1 ENDWHILE print "a=0 then exit" wait key
ENDWHILE : ENDWHILE
FOR : FOR
回数指定ループ
rem 例 FOR i=1 TO 12 STEP 2 print i NEXT i wait key
STEP : STEP
NEXT : NEXT
GOTO : GOTO Label
指定されたラベルの位置に処理が移る。
GOSUB : GOSUB Label
指定されたラベルの所に処理を移す。
加えてRETURNコマンドで戻るために、実行されたGOSUBコマンドの位置を内部的に保持する。
FUNCTIONコマンドによって関数定義が自由に出来る以上、
従来のBASICプログラムとの互換以外の意味は無いものの、
サブルーチン内でDIMによるグローバルの配列確保を行う場合はGOSUB~RETURNの方が適している。
rem subrutine a=1 print a GOSUB sub print a wait key end
sub: a=2 print a RETURN
RETURN : RETURN
前回実行されたgosubコマンドの次に処理を戻す。
実行されたgosubコマンドの位置を内部的に保持するためgosubと一対に対応する。
functionコマンドによって関数定義が自由に出来る以上、
従来のBASICプログラムとの互換以外の意味は無い。
SELECT : SELECT
条件分岐
Variable = 1 SELECT Variable CASE 1 print "Hello 1" ENDCASE CASE 2 print "Hello 2" ENDCASE CASE 3,4 print "Hello 3,4" ENDCASE CASE DEFAULT print "Hello Anything Else" ENDCASE ENDSELECT wait key
CASE : CASE
CASE DEFAULT : CASE DEFAULT
ENDCASE : ENDCASE
ENDSELECT : ENDSELECT
FUNCTION : FUNCTION(Parameter)
関数定義の開始。
Parameter=関数が受け取る引数。
ENDFUNCTIONと対になって関数を定義する。
引数は0個から複数個持てる。
例)
FUNCTION POWER(NO) IF NO=0 THEN EXITFUNCTION 0
NO = NO * NO ENDFUNCITON NO
関数内でDIMによる配列確保を行うのはお勧めできない。
rem function test a=1 print a test() print a wait key end
function test() rem 関数の内部はローカル変数にになる。 a=2 print a endfunction
EXITFUNCTION : EXITFUNCTION Return
関数処理の途中終了。
Return=関数の返り値。(省略可)
関数内の処理をEXITFUNCTIONに至る前に終わらせたい時に使う。
EXITFUNCTIONで返り値を指定した時は、EXITFUNCTIONでも返り値を指定する必要がある。
返り値は数値または変数のみ。計算式は記述できない。
ENDFUNCTION : ENDFUNCTION Return
関数定義の終了。
Return=関数の返り値。(省略可)
関数処理の全体はFUNCTION~ENDFUNCTIONで囲まれる必要がある。
返り値は数値または変数のみ。計算式は記述できない。
RESTORE : RESTORE Label
次にreadコマンドを実行する時に読み込みたいdataの位置をラベルで指定する。
READ : READ Varable
dataコマンドとして記述してある数値や文字列データを変数に読み込む。
データ読み込み位置は内部的に管理されているので、
readコマンドを繰り返すだけで順次、変数に読み込まれる。
予め、restoreコマンドで読み込みたいdataのラベルを指定しておくこと。
DATA : DATA Value or String,Value or String,Value or String,…
数値や文字列のデータを保持する。
実行しても何も起こらない。
readコマンドによってデータが変数に代入される。
データの先頭行にはラベルを付けておかないと、
読み込み位置が指定できない。
RESTORE label READ a print a DATA 1,2,3 label: DATA 4,5,6,7 wait key end
SAVE ARRAY : SAVE ARRAY Filename, Array Name(0)
配列データをファイルに保存する
配列名は、二次元以上の配列であっても一次元で指定すること
例)
× SAVE ARRAY "new.map",map(20,22)
○ SAVE ARRAY "new.map",map(20)
LOAD ARRAY : LOAD ARRAY Filename, Array Name(0)
WAIT : WAIT Integer Value
SLEEP : SLEEP Number
WAIT KEY : WAIT KEY
キーボードの入力待ちをする。
いずれかのキーが押されたら、次へ進む。
WAIT MOUSE : WAIT MOUSE
SUSPEND FOR KEY : SUSPEND FOR KEY
SUSPEND FOR MOUSE : SUSPEND FOR MOUSE
BREAK : BREAK
デバッグモード専用コマンド
DRAW TO BACK : DRAW TO BACK
テキスト、イメージ、ビットマップなどの描画を3Dより先に描画します。
DRAW TO FRONT : DRAW TO FRONT
テキスト、イメージ、ビットマップなどの描画を3Dの後に描画します。
これは標準設定です。
DRAW SPRITES FIRST : DRAW SPRITES FIRST
DRAW SPRITES LAST : DRAW SPRITES LAST
RANDOMIZE : RANDOMIZE Seed Value
rnd関数が返す乱数の基本値を設定する。
randomizeが実行されない場合は同一の乱数列になる。
(暗黙の初期設定値が採用される)
さらに同じ値からは同じ乱数列が得られる事になる。
バグの再現性の点からは完成までは設定しないほうが良い。
INC : INC Variable,Value
指定した変数に加算する。
加算値を省略した場合は1。
i=i+1
DEC : DEC Variable,Value
指定した変数から値を引く。
減算値を省略した場合は1。
MAKE MEMORY : Return DWORD=MAKE MEMORY(Size In Bytes)
DELETE MEMORY : DELETE MEMORY Memory Address
FILL MEMORY : FILL MEMORY Memory Address, FillByte, Size In Bytes
COPY MEMORY : COPY MEMORY Memory Destination, Memory Source, Size In Bytes
EMPTY ARRAY : EMPTY ARRAY Array Name(0)
配列の要素を全消去する。
BASICの文法上、配列名は渡せないので配列の0番要素を引数にする。
ARRAY INSERT AT TOP : ARRAY INSERT AT TOP Array Name(0)
ARRAY INSERT AT BOTTOM : ARRAY INSERT AT BOTTOM Array Name(0)
ARRAY INSERT AT ELEMENT : ARRAY INSERT AT ELEMENT Array Name(0), Index
ARRAY DELETE ELEMENT : ARRAY DELETE ELEMENT Array Name(0)
NEXT ARRAY INDEX : NEXT ARRAY INDEX Array Name(0)
PREVIOUS ARRAY INDEX : PREVIOUS ARRAY INDEX Array Name(0)
ARRAY INDEX TO TOP : ARRAY INDEX TO TOP Array Name(0)
ARRAY INDEX TO BOTTOM : ARRAY INDEX TO BOTTOM Array Name(0)
ARRAY INDEX TO QUEUE : ARRAY INDEX TO QUEUE Array Name(0)
ADD TO QUEUE : ADD TO QUEUE Array Name(0)
REMOVE FROM QUEUE : REMOVE FROM QUEUE Array Name(0)
ARRAY INDEX TO STACK : ARRAY INDEX TO STACK Array Name(0)
ADD TO STACK : ADD TO STACK Array Name(0)
REMOVE FROM STACK : REMOVE FROM STACK Array Name(0)
COS : Return Float=COS(Value)
三角関数の余弦。
角度から余弦を得る。
SIN : Return Float=SIN(Value)
三角関数の正弦。
角度から正弦を得る。
TAN : Return Float=TAN(Value)
三角関数の正接。
角度から正接を得る。
ACOS : Return Float=ACOS(Value)
三角関数の逆余弦。
余弦値から角度を得る。
ASIN : Return Float=ASIN(Value)
三角関数の逆正弦。
正弦値から角度を得る。
ATAN : Return Float=ATAN(Value)
三角関数の逆正接。
正接値から角度を求める。
ATANFULL : Return Float=ATANFULL(Distance X, Distance Y)
atan関数による方角計算の全方位対応版。
原点0,0から指定座標への方角を得る。
HCOS : Return Float=HCOS(Value)
値の双曲線余弦を得る。
HSIN : Return Float=HSIN(Value)
値の双曲線正弦を得る。
HTAN : Return Float=HTAN(Value)
値の双曲線正接を得る。
SQRT : Return Float=SQRT(Value)
値の平方根を得る。
ABS : Return Float=ABS(Value)
値の絶対値を得る。
INT : Return Integer=INT(Value)
Valueの小数点下を切り捨てた整数を返す。
正数ではfloor関数と同じで、負数ではceil関数と同じ。
EXP : Return Float=EXP(Value)
自然対数の底(ネイピア数)のValue乗を返す。
Valueは整数にすること。
RND : Return Float=RND(Range Value)
0から指定された整数の範囲内で乱数を返す。
指定された数が有り得る最大値となる。
返り値も整数。
rnd(5)+1でサイコロと同じ1から6の乱数が得られる。
TIMER : Return Integer=TIMER()
Windows起動からのカウントタイマー値を得る。
値の単位はms。
INKEY$ : Return String=INKEY$()
CL$ : Return String=CL$()
実行ファイルに渡されたコマンドライン文字列を得る。
GET DATE$ : Return String=GET DATE$()
GET TIME$ : Return String=GET TIME$()
FLOOR : Return Float=FLOOR(Value)
数学でいう「床」。
Valueを超えない最大の整数を返す。
CEIL : Return Float=CEIL(Value)
数学で言う「天井」。
Valueより小さくない最小の整数を返す。
CURVEVALUE : Return Float=CURVEVALUE(Destination Value, Current Value, Speed Value)
WRAPVALUE : Return Float=WRAPVALUE(Angle Value)
与えられた角度を360度内に丸める。(360の剰余)
負数にも対応する。(例:-1→359)
NEWXVALUE : Return Float=NEWXVALUE(Current X Value, Angle Value, Step Value)
NEWYVALUE : Return Float=NEWYVALUE(Current Y Value, Angle Value, Step Value)
NEWZVALUE : Return Float=NEWZVALUE(Current Z Value, Angle Value, Step Value)
CURVEANGLE : Return Float=CURVEANGLE(Destination Value, Current Value, Speed Value)
ARRAY COUNT : Return Integer=ARRAY COUNT(Array Name(0))
配列の最大要素番号を返す。
配列は0番から始まるので要素が1個の場合は0が返る。
配列が空の場合は-1が返る。
BASICの文法上、配列名は渡せないので配列の0番要素を引数にする。
ARRAY INDEX VALID : Return Integer=ARRAY INDEX VALID(Array Name(0))
FREE STRING$ : Return String=FREE STRING$()
バージョン7.0拡張関数
GET DX VERSION$ : Return String=GET DX VERSION$()
DirectXのバージョンを得る
Return=バージョン文字列
バージョン7.0拡張関数
PERFTIMER : Return Double Integer=PERFTIMER()
システムタイマーを返す。
Return=システムタイマー
TIMER()の高精度版。
バージョン7.0拡張関数
GET ARRAY TYPE : Return String=GET ARRAY TYPE(Array Name(0))
バージョン7.0拡張関数
GET TYPE PATTERN$ : Return String=GET TYPE PATTERN$(Type Name$)
バージョン7.0拡張関数