ホストプログラムに組み込む軽量言語が欲しいくまくま
|
|
↑(絵柄の中で一番苦労したBIGBONUSの7絵柄。
スロットには独特の7の形があるけど、目押しの基準にしやすいようにコマいっぱいに大きく描かなきゃいけないっていう必然性のもとに産まれたデザインらしいよ。)
くまです。
ようやく土日が来た!万歳!
仕事してると土日のありがたみが身に染みます。
で、今日はプログラムの話題でも書こうかと・・・
絶対おもしろくないけど、読みたい人だけどうぞ~
アイマススロのゲームシステム部が5月はじめに完成したので、今は3D処理とかエフェクトとか、絵柄とか、グラフィック系の開発してます。
で。
いままでくまはC++にデータを与えてやる際、超適当な記述形式を作ってやってたのです。
例えば、リール配列だとこんなの。
//-------------------------------------------
//1左リール配列 2中 3右
//0チェリー 1特殊子役 2ベル 3リプレイ 4ボーナス 5REG
//6青チェリ 7黄チェリー
@reel_array1
21
4,5,4,3,2, 6,2,1,3,5, 3,2,4,7,3, 1,2,5,0,3, 2
@reel_array2
21
2,4,1,3,2, 0,0,0,3,2, 6,6,3,2,7, 7,3,2,1,5, 3
@reel_array3
21
4,5,4,2,3, 7,1,2,3,5, 0,2,3,1,2, 3,6,1,6,2, 3
//-------------------------------------------
ようは。
@変数名
サイズ
データ1,データ2・・・
こういう形式です。
で。
これからグラフィックとかエフェクトを大量に作らなきゃいけないんですけど、今のままだと不便だなあと感じ始めたのでした。
動作確認して、スクリプトなどを書き換えて、プログラムを走らせたまま更新内容をリロードしたいのです。
だって・・・エフェクトを確認するのにいちいちリコンパイルとか時間かかりすぎ!無理!
でもあのしょぼい形式じゃエフェクトとかの定義、無理だし!演算も欲しいよ!
うん・・・
そういうのはさっさと外部に出せやコラとGame Programing Gemsにも書いてあったような気がします。でもめんどいので適当にやってました!
うん・・・さっさとやればよかった・・・
で、くまくま軽量言語導入。の巻。
■Lua
やっぱ有名なluaかなあ?
コンシュマーでよく使われてるらしい。C++言語との通信、引数が専用スタックに入る、んでそれをpopしまくるみたい。ふむう・・・
C言語側で用意した構造体にもっと簡単にアクセスできれば何も言うことはないんだけどな~。
■Python
一番詳しいのはPythonなんだよなー。
制御文書くのに括弧やらbeginやらendやら書かなくていいのが楽チンでいいよね。
でも、ライセンスどうなんだろう?
python, GTK, PyGTKで作成したアプリケーションのライセンス
http://d.hatena.ne.jp/jkani4/20071031/1193767376
なんか大丈夫そう。
んでも確か、いちいち変数&関数の型を指定しなきゃいけない~、みたいなめんどくささがあった気がします。
boost::python使えば楽に出来るみたいだけど、boostのリコンパイルしなきゃいけなかった記憶が。うむうううううう・・・・・・・・
つまりは、どっちにしろ、データのバインディングが大変そう~なのです。
で、バインディング楽チン候補を探した。
■squirrel
Luaの後継的存在らしい。
SqPlusとかと合わせるとデータバインディングも楽なんだって。
■xtal
http://d.hatena.ne.jp/xtalco/
近年できたゲーム用の組み込み言語。xtal!・・・えっくす樽?
1.0になるまで待つかな~とか思ってたんだけど、いつのまにか0.9.9.0になってた。
お手軽お気楽超強力。イカすなあこれ。
MITライセンス。和製。いいねえ、気に入っちゃったよオレ!
てなわけでX樽に決定!
■さっそく組み込み開始!(in VS2005EE or VS2008EE)
1.xtal-0.9.9.0をダウンロード
2.使いたいプロジェクトにsrcフォルダ内をコピー
3.srcのixmain.cpp main.cpp testmain.cppを削除
4.srcフォルダをソリューションエクスプローラにドラッグアンドドロップでぶちこめ!
(もしくはlibをスタティックリンク)
下準備おわり。
//init.xtal
"kuma".p;
export class{
test:1;
bar_loc: [2.0f, 3.0f, 0];
add: fun(a, b){
return a + b;
}
}
// C++
#include
#include "xtal/xtal.h"
using namespace xtal;
int main(){
initialize();
try{
AnyPtr ret = load("init.xtal");
printf("%d\n", ret->member("test")->to_i());
printf("%f\n", ret->member("bar_loc")[0]->to_f());
printf("%f\n", ret->member("bar_loc")[1]->to_f());
printf("%f\n", ret->member("bar_loc")[2]->to_f());
printf("%d\n", (ret->member("add"))(123, 321)->to_i() );
}catch(AnyPtr e){
fprintf(stderr, "%s\n", e->to_s()->c_str());
}
uninitialize();
}
結果:
kuma
lib::builtin::UnsupportedError: filelocal::export 'op_or'
init.xtal:2: in
出たー!ってあれ、なにこれ・・・
export文がつ、つかえない
http://d.hatena.ne.jp/xtalco/20071103#1194057162
あ、ひでえw return文にこっそり置き換わってました。最新のヘルプみたのに・・・っ
プル((;-;))プル
正しくは。
//init.xtal
"kuma".p;
return class{
test:1;
bar_loc: [2.0f, 3.0f, 0];
add: fun(a, b){
return a + b;
}
}
結果:
kuma
1
2.000000
3.000000
0.000000
444
でした。
まあ・・・returnのほうが自然だと思うけど!まだまだこれからの言語っぽいのでこういうことはいっぱいありそう。
だけど、気に入ったっ!むしろx樽最高!オライリー本になったら樽が描かれるといいな!
あ、xtalの作者様って、物理シミュ系のゲームいっぱい作ってる方だ。遊んだことあるな~、おむすびころりんゲームとか。
http://ishi.blog2.fc2.com/
↑あいかわらず猫がいっぱい・・・これはオライリー本になったら猫なんだろうか・・・=w=
ともかく晴れてこれでデータ系定義は外部に追い出せましたとさ。ヒャッハー
早くやればよかった・・・ホント。
リロードは
uninitialize();
initialize();
ret = load("kuma.xtal");
でいいのかな。明日検証してみます。