共同目的ゲーム制作室1/スクリプトの標準化

Last-modified: 2008-02-22 (金) 14:27:18

スクリプトの標準化

Easy3Dユーザ同士が協力してプログラムする場合のスクリプトの書き方や構成の仕方の基準を決めましょう。

書き方

参考例

雛形のHSPコーディングルールの部分です。雛形

作業変数の名前は_で始める

_cntや_varや_posxなど。

  • 変数の前に_をつけるのはどういった意味があるのでしょうか -- ぶち? 2008-02-10 (日) 17:31:25
  • 作業変数であることが一目で分かって良いと思っています。因みに、私が今思い付く作業変数の役割りをまとめてみたいと思います。
    1. 用いないパラメータを受け取る
    2. どこでまた変数が用いられるかを把握しないで済む
    例:E3DWaitByFPS FPS, _var
    良い例が思い浮かびませんでしたけど、_varなどの作業変数でなくてretfpsなどの変数で受け取ると、スクリプトを読むことを考えた場合、retfpsがかなり離れたどこかでまた用いられるかも知れないことを踏まえて読むことになってしまうと思います。_varなどの作業変数にすると、用いられる場合でもその近くの処理だけで用いられることが分かるので、スクリプトに出てくる色々な変数を把握しやすいと思います。計算の途中の結果も作業変数で扱うと良いと思います。 -- ジオ? 2008-02-10 (日) 23:36:07
    • 仮変数・・・よくtmpなどとして軽く計算する際に使うのと同様でしょうか?なるほど~わかり易そうですね。 -- ぶち? 2008-02-11 (月) 20:37:59
  • 仮変数や一時変数などとも呼ばれる変数と同じですね。何のための変数かが名前から分かる方がなるべく良いと思って_の後に自由に付けられる方が良いかなとも思いますけど、Window(WINDOW_SIZE_X)などのように変数を階層で管理すれば、こういうのは要らないのかなとも思います。あまりはっきり分かりません。 -- ジオ? 2008-02-11 (月) 22:35:31

コメントの範囲を表す

  • コメントは「//」統一でどうでしょう。//で説明部分を囲んで厚く書くこともできますし。 -- ぶち? 2008-02-11 (月) 21:00:08
  • //で説明部分を囲んで厚く書くというのは具体的にどういうことでしょうか。 (^^; -- ジオ? 2008-02-11 (月) 22:37:30
  • /////////////////////////////////////////
    //こんな感じですΣ(゜ω゜;)
    ///////////////////////////////////////// -- ぶち? 2008-02-11 (月) 23:08:17

構成の仕方

変数やルーチンを階層で管理する

	#enum global POSX = 0	; X座標
	#enum global POSY		; Y座標
	#enum global POSZ		; Z座標
	#enum global DCI_MAX	; DCIの要素の数
	ddim DCI, hs_num, DCI_MAX	;hs_numは読み込んだ形状モデルの数
	*draw
		*draw_model
		*draw_text
  • #enum globalって使ったことがないのですが、どういうふうに使うのでしょうか。利点などがわかりません -- 26℃? 2008-02-08 (金) 23:18:42
  • 通常は#enum POSX = 0でおk。globalは全スクリプト内で使う場合。使い方は実際に使用例を見た方が早いかと思います (^^; -- ぶち? 2008-02-09 (土) 00:44:09
  • HSPのHELPでは
    #enum KAZU_A = 0	; KAZU_Aは0になる
    #enum KAZU_B		; KAZU_Bは1になる
    #enum KAZU_C		; KAZU_Cは2になる
    a=KAZU_B
    ↓(展開後)
    a=1
    と書いてますが、連続した値をどういうときに使うのかわからなかったんです-- 26℃? 2008-02-09 (土) 01:08:37
  • キャラ変数にHPや座標などをまとめて入れるときのインデックス(整理番号)によく使ってます。 -- ぶち? 2008-02-09 (土) 01:12:08
  • ソースの構成についてですが、メインループ内はなるべくgosub命令ばかりにして構成を見やすくするのがいいでしょうか。
    あとMOAのモーション遷移はキャラのキー操作の後に持ってきてはどうでしょう。 -- ぶち? 2008-02-10 (日) 17:36:41
    • ソースの構成については、把握や変更をしやすいと思うので、私もそのようにすると良いと思います。 -- ジオ? 2008-02-10 (日) 23:38:31
  •  
    	;実数型の変数の初期化
    	#enum dCI_MIN = 0
    	#enum dCI_POSX	; X座標
    	#enum dCI_POSY	; Y座標
    	#enum dCI_POSZ	; Z座標
    	#enum dCI_MAX	; dCIの要素の数
    	ddim dCI, hs_num, dCI_MAX	;hs_numは読み込んだ形状モデルの数
	;整数型の変数の初期化
	#enum iCI_MIN = 0
	#enum iCI_HP
	#enum iCI_MOTION_ID
	#enum iCI_FRAME_NO
	#enum iCI_MAX	; iCIの要素の数
	dim iCI, hs_num, iCI_MAX	;hs_numは読み込んだ形状モデルの数
	;文字列型の変数の初期化
	#enum sCI_MIN = 0
	#enum sCI_NAME
	#enum sCI_MAX	; sCIの要素の数
	sdim sCI, hs_num, sCI_MAX	;hs_numは読み込んだ形状モデルの数
	#enum WINDOW_MIN = 0
	#enum WINDOW_SIZE_X
	#enum WINDOW_SIZE_Y
	#enum WINDOW_MAX
	dim Window, WINDOW_MAX : Window(WINDOW_SIZE_X) = 800 : Window(WINDOW_SIZE_Y) = 150

CIのように変数に整数型以外の型がある場合、小文字でiやdやsなどの接頭辞を付ける。Windowのように整数型だけの型がある場合は、特にiを記さない。

#enum
というのを考えてみました。 -- ジオ? 2008-02-11 (月) 07:29:00

  • なるほど~こういう表記方法がありましたか。頭文字が識別しやすそうです。 -- ぶち? 2008-02-11 (月) 20:49:34

処理を一般化する

データを取得する部分を一ヵ所にする

例えば、スクリプトの色々な所で形状モデルの位置を同じ変数に取得すると、壁に当たる前の修正されていない位置なのか壁に当たった後の修正された位置なのかなどが分かりません。データを取得する部分を一ヵ所にすることで、取得した変数をどこからでも分かりやすく参照できます。

ルーチンの名前とルーチンでする処理を合わせる

  • *controlなどの入力に係わるルーチンで例えば形状モデルの位置を指定する。
    • 例えば形状モデルの位置について言えば、入力に係わるルーチンでは形状モデルの位置に係わる変数を操作するだけにして、形状モデルの位置の指定は*moveなどの位置に係わるルーチンでする。

エディタ

構造化エディタ

ぶちさんお薦めのエディタです。前に便利だと思っていましたけど、わざわざhsed3.1からスクリプトを読み込むのが面倒だと思っていたので、用いていませんでした。でも、Shift+Ctrl+Sの保存して実行をすればhsed3.1にスクリプトが読み込まれて起動するので、面倒でないことが分かりました。お薦めです。 -- ジオ? 2008-02-08 (金) 22:25:11

  • そんな機能あったんですかorz私はランチャにhsed3.1登録してダブルクリックで指定ファイルを自動起動してデバグしてます。 -- ぶち? 2008-02-09 (土) 00:49:21
    • 横道それますが、ステルスランチャーというソフトを使ってます。もし他におすすめのランチャーなどありましたらお願いします (^^; -- ぶち? 2008-02-11 (月) 20:54:45

テンプレート

ここで決めた基準で書いたスクリプトのテンプレートです。
これから新しく何かを作る場合に、テンプレートから作ることで早く作れます。