[過去ログ]
親父PGがゲームを作り始めるスレッド (668レス)
親父PGがゲームを作り始めるスレッド http://mevius.5ch.net/test/read.cgi/gamedev/1080582036/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
197: 144 [sage] 04/04/09 04:56 ID:d03K47Nx トランスレータを書く前提で、スクリプトで上記を書き直してみよう。 青い宝石のある位置に、イベント名 BlueJewl の文字列が定義されている(もちろん識別番号でも良い)としよう。 [シーンファイル] <event BlueJewel> [CounterCheck BlueJewelCounter] 0 「台座に青い宝石が置かれている」 1 「青い宝石からは高い音が発せられている」 2 「青い宝石を手に入れた。どこかで音がした」 *get BlueJewel ただし、[ ] 内の CounterCheck は、スイッチのようなものだが、カウンタを参照して、一致したらイベントを起動して、 カウンターをカウントアップする。Cの switch でいう default は別に考える。 * は、システムコマンドを呼び出す。 もちろん、シーンファイルは事前に仮想マシン用のバイトコードにコンバートしておいて構わない。 例に最適化した文法を作ったわけで、かなりズルしてるけど、トランスレータを前提にすれば、こういうズルも必要なときにできる。 親父PGタン のトリガファイルの文法へのトランスレータも問題なく書ける。 しかし、これに多少の工夫をしても、まだ分かりにくいし、人為的ミスの混入も減らないかもしれない。 すると、結局シナリオ編集サポートツールを作ることになるわけで、ならば最初からスクリプトに任せてしまえ、ということですよ。 で、スクリプトをアセンブラライクなバイトコードに変換すると(逐次解釈でもいいけど)。 だから、スクリプトライクなトリガテーブルには疑問を抱くのですよ。 > std::map< std::string, TriggerAndProcess >を使用する場合、 > プログラム内で「このデータ−をMAP(STL)にPUSHしてくれ」という、コードを入れなければなりません。 > そういったレベルでスクリプトを組めるのはPGレベルの人だと思いますorz... 違う違う。 シリアルナンバを使用するのは、配列のアドレッシングのためでしょ? 文字列で連想配列をアドレッシングすることを勧めてるの。 編集時や使い回しの柔軟性のために。 ID みればわかるけど、>>194 も俺。 http://mevius.5ch.net/test/read.cgi/gamedev/1080582036/197
198: 親父PG [] 04/04/09 07:10 ID:Ihr7T82R >>194-197 144氏さん 考察ありがとうございます。今回のケースはswitch文の構文が適していますね。 switch (fg){ case 0:{seen1;++fg;break;} case 1:{seen2;++fg;break;} case 2:{seen3;++fg;break;} default:{NonOp} } Cで書くとこうなります。これを置き換えます。 777 (MAPposition) X,Y EQ (価)a ,b start switch 4 778 (fg)A eq 0 CALL シーン1(fg A) 779 (fg)A eq 1 CALL シーン2(fg A) 780 (fg)A eq 2 CALL シーン3(fg A) 781 CALL シーン4(fgA) 782 return(0) シーン0 deviceWait() KEYUP:メッセージ出力1、++FG KETLEFT:メッセージ出力2、FG=0 return (next) http://mevius.5ch.net/test/read.cgi/gamedev/1080582036/198
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.659s*