こんばんわ。ここのスレッドではお久しぶりでございます
自分は今回のプロコン向け作品が未完成で
資料として投稿いたしまして
そこよりテンプレートもどきの引用でございます
/////////////////////////////////////////////////////////////
//
// HSPモジュール機能。テンプレートもどき
//
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// #deffunc/#defcfunc の覚え書き
/////////////////////////////////////////////////////////////
#deffunc/#defcfunc スペース モジュール命令名 スペース 型 スペース 引数A "," 型 スペース 引数B・・・
関数/命令名と引数Aの型の区切りはスペース
引数Aの型と引数Aの名前の区切りもスペース
引数Aの名前と引数Bの型の区切りは ","
型の種類
int、整数値(値渡し)
str、文字列(値渡し)
double、実数(値渡し)
var、変数(参照渡し)
array、配列(参照渡し)
label、ラベル
local、ローカル変数
関数は値を渡す変数に代入していないとエラー
関数の引数は()で括っていないとエラー
/////////////////////////////////////////////////////////////
// モジュール/モジュール変数の覚え書き
/////////////////////////////////////////////////////////////
トークンの区切りはスペースと "," があるのでややこしい
/////////////////////////////////////////////////////////////
// "#module"
/////////////////////////////////////////////////////////////
"#module" スペース モジュール名 スペース モジュール変数 "," モジュール変数・・・
例 #module m a,b,c・・・
モジュール名と第一変数の区切りはスペースだが
第一変数と第二変数の区切りは ","
/////////////////////////////////////////////////////////////
// "#modinit"
/////////////////////////////////////////////////////////////
モジュールのコンストラクタは "#modinit"命令
"#modinit" スペース 型 スペース 引数A "," 型 スペース 引数B・・・
#modinit int l,int n,int m・・・
命令の名前は不要
"#modinit"と引数Aの型の区切りはスペース
引数Aの型と引数Aの名前の区切りもスペース
引数Aの名前と引数Bの型の区切りは ","
/////////////////////////////////////////////////////////////
// "#modfunc"
/////////////////////////////////////////////////////////////
モジュール命令の定義は "#modfunc"命令
"#modfunc" スペース モジュール命令名 スペース 型 スペース 引数A "," 型 スペース 引数B・・・
例 #modfunc mf int l,int n,int m・・・
モジュール命令名と引数Aの型の区切りはスペース
引数Aの型と引数Aの名前の区切りもスペース
引数Aの名前と引数Bの型の区切りは ","
"#modcfunc"
"#modcfunc" スペース モジュール命令名 スペース 型 スペース 引数A "," 型 スペース 引数B・・・
例 #modcfunc mf int l,int n,int m・・・
モジュール命令名と引数Aの型の区切りはスペース
引数Aの型と引数Aの名前の区切りもスペース
引数Aの名前と引数Bの型の区切りは ","
/////////////////////////////////////////////////////////////
// "newmod"命令
/////////////////////////////////////////////////////////////
オブジェクトの作成は"newmod"命令
"newmod" スペース オブジェクト名 "," モジュール名 "," 引数A "," 引数B・・・
例 newmod o,m,1,2,3・・・
オブジェクトを"newmod"命令で作成しないとモジュール命令は使用できない
"newmod" と オブジェクト名 の区切りはスペース
オブジェクト名と モジュール名 の区切りは ","
/////////////////////////////////////////////////////////////
// "newmod" モジュール変数版
/////////////////////////////////////////////////////////////
newmodで作成するオブジェクトをモジュール変数とすることで委譲が出来る
"newmod" スペース モジュール変数 "," 委譲のモジュール名 "," 引数A "," 引数B・・・
例 newmod mem_obj_m_somet,one_something
/////////////////////////////////////////////////////////////
// モジュール命令の使用
/////////////////////////////////////////////////////////////
モジュール命令 スペース オブジェクト名 "," 引数A "," 引数B・・・
例 mf o,1,2,3・・・
モジュール命令 と オブジェクト名 の 区切りは スペース
オブジェクト名 と 引数 の 区切りは スペース
/////////////////////////////////////////////////////////////
// モジュール関数の使用
/////////////////////////////////////////////////////////////
モジュール命令 "(" オブジェクト名 "," 引数A "," 引数B・・・")"
例 mf(o,1,2,3・・・)
モジュール命令 と オブジェクト名 の 区切りは "("
オブジェクト名 と 引数 の 区切りは スペース
最後の 区切りは ")"
/////////////////////////////////////////////////////////////
// local キーワード
/////////////////////////////////////////////////////////////
#modfuncとか local 命令名
例 #modfunc local hoge
/////////////////////////////////////////////////////////////
// "thismod" キーワード
/////////////////////////////////////////////////////////////
"thismod"キーワードは"#modfunc"の中で
同じモジュール内のモジュール命令を呼び出したい時に
オブジェクト名を指定するかわりに指定する
モジュール外から
mf o,1,2,3・・・
モジュール内から
mf thismod,1,2,3・・・
/////////////////////////////////////////////////////////////
// インスタンスの配列化
/////////////////////////////////////////////////////////////
オブジェクトの作成は"newmod"命令
"newmod" スペース オブジェクト名 "," モジュール名 "," 引数A "," 引数B・・・
を複数回実行する
例
newmod Player,player_chara_status
newmod Player,player_chara_status
/////////////////////////////////////////////////////////////
// 配列化したモジュール変数の使用
/////////////////////////////////////////////////////////////
#modfunc で定義した命令
命令 スペース オブジェクト ドット 配列の添え字
コンマ 引数 の繰り返し 省略しても良い
例
set_mem_ID_many_somet obj_common.tmp_i, 100
#modcfunc で定義した命令
命令 括弧 オブジェクト ドット 配列の添え字
コンマ 引数 の繰り返し省略しても良い
括弧閉じ
例
get_mem_ID_many_somet(obj_common.tmp_i)
配列をドットで記述しているが括弧で記述してもいい気もする
興味のある方は試してみてください
/////////////////////////////////////////////////////////////
// "newmod" モジュール変数版 配列化
/////////////////////////////////////////////////////////////
newmodで作成するオブジェクトをモジュール変数とすることで委譲が出来る
newmodを複数回使用すると配列化出来る
"newmod" スペース モジュール変数 "," 委譲のモジュール名 "," 引数A "," 引数B・・・
例
repeat MAX_OBJ
newmod mem_obj_m_somet,one_something
loop
/////////////////////////////////////////////////////////////
// モジュール変数 アクセサ
/////////////////////////////////////////////////////////////
setter の例
#modfunc set_mem_ID_data int __p
mem_ID_data = __p
return
getter の例
#modcfunc get_mem_ID_data
return mem_ID_data
/////////////////////////////////////////////////////////////
// モジュール変数 アクセサ インデックス使用 モジュール命令
/////////////////////////////////////////////////////////////
一つ一つsetterとgetterを書くのがめんどくさくなって
まとめて書いたサンプルです
例
// #moduleとモジュール変数は一行で記述して下さい
#module wep_class_kaisuu mem_ID_wep, mem_chara_name_wep, wep_kaisuu_nokori, wep_Fire, wep_Fire_cur, wep_Wind, wep_Wind_cur, wep_Thunder, wep_Thunder_cur, wep_Light, wep_light_cur
#enum WEP_KIND_FIRE = 1
#enum WEP_KIND_WIND = 2
#enum WEP_KIND_THUNDER = 3
#enum WEP_KIND_LIGHT = 4
// 略
#modfunc set_wep_kaisuu int __p, int __p_val
logmes "set wep kaisuu : " + mem_ID_wep
if __p == WEP_KIND_FIRE{
wep_Fire = __p_val : wep_Fire_cur = __p_val
return }
if __p == WEP_KIND_WIND{
wep_Wind = __p_val : wep_Wind_cur = __p_val
return }
if __p == WEP_KIND_THUNDER{
wep_Thunder = __p_val : wep_Thunder_cur = __p_val
return }
if __p == WEP_KIND_LIGHT{
wep_Light = __p_val : wep_Light_cur = __p_val
return }
dialog "error:wep_class_kaisuu:set_wep_kaisuu:__p " + __p,1
return
#modcfunc get_wep_kaisuu int __p
logmes "wep wep kaisuu : " + mem_ID_wep
if __p == WEP_KIND_FIRE{ return wep_Fire }
if __p == WEP_KIND_WIND{ return wep_Wind }
if __p == WEP_KIND_THUNDER{ return wep_Thunder }
if __p == WEP_KIND_LIGHT{ return wep_Light }
dialog "error:wep_class_kaisuu:get_wep_kaisuu:__p " + __p,1
return
// 略
#global
// 略
/////////////////////////////////////////////////////////////
// 呼び出し例
// インストラクタの例
newmod player_wep,wep_class_kaisuu
// setter使用例
set_wep_kaisuu player_wep.0,1,100
// getter使用例
get_wep_kaisuu(player_wep.0,1)
/////////////////////////////////////////////////////////////
// モジュール変数 アクセサ 委譲
/////////////////////////////////////////////////////////////
setter の例
#modfunc スペース アクセサ命令の名前 スペース int インデックス
コンマ 型 代入したい値
コンマ 型 引数 の繰り返し省略可 改行
委譲元の命令 スペース モジュール変数 ドット 配列の添え字
ドット インデックス コンマ 代入したい値
コンマ 引数 の繰り返し省略可 改行
return
#modfunc set_mem_ID_somet int __p_index,int __p
set_mem_ID_somet_mod mem_obj_m_somet.__p_index,__p
return
getter の例
#modfunc スペース アクセサ命令の名前 スペース int インデックス
コンマ 型 引数 の繰り返し省略可 改行
return 委譲元の命令 括弧 モジュール変数 ドット 配列の添え字
コンマ 引数 の繰り返し 括弧閉じ 改行
#modcfunc get_mem_ID_somet int __p_index
return get_mem_ID_somet_mod(mem_obj_m_somet.__p_index)
作成したモジュールの委譲がindex付きで操作しているが
indexなしのアクセサ版を作成したければ
試行錯誤してみれば動くと思われる