|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第520回 UMLの状態遷移図でGIBS 4 発行 2004年11月12日(金曜日) 発行数 約2600 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンは、主にまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・横60文字で作成し、インデントは大抵半角スペース4つです。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、メルマガのホームページでお願いします。 ・過去ログはバックナンバー(下欄参照)を活用して下さい。 ・内容は私が感じたもので、最新の技術も、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 ・セキュリティ突破のため、暗号化された単語があります。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 ハードディスクを使いたいがため、何気なくはじめたFFX。 ★ブリッツボールやりまくりです。 そのときふと、気がつきました。 画面左端に「テクニック」と出てきたとき、○ボタンを押すと、 その技がラーニングできます。 ★へー、知らなかった。。。! 普通にプレイしていて、ブリッツボールはルカ戦しかやっていま せんでしたから。新鮮な驚きがいっぱいです。 {magclick} /*========================================================*/ 今回のお題 << UMLの状態遷移図でGIBS 4 >> /*========================================================*/ というわけで、GIBSのソースをCode2Htmlを通してページに まとめ、アップしました。 その周辺のページも、すこしコーディネイトしました。 プログラムの世界 http://ayusya.hp.infoseek.co.jp/AboutProgram.html あゆしゃのCGI一覧 http://ayusya.hp.infoseek.co.jp/AboutCGI.html GIBS戦術プログラム http://ayusya.hp.infoseek.co.jp/Perl_GIBS_sample1.html /*========================================================*/ 前のほうと後のほうは、私のもやもやとした思惑なので、 気にしないでください。 真ん中辺りにある「ラウンドループ」が戦術ターンを処理する ループになります。 その中でユニットのループとサイド(プレイヤーの先行・後攻) ループがあり、 ループの中の冒頭ではデータを読み込むなどの煩雑な処理が あり、 さらにその後に、状態遷移図で示した処理が続きます。 状態遷移図の流れが、「なんとな〜く」プログラミングされて います。 /*========================================================*/ 「SHIP」や「NORMAL」といった、状態遷移図で示した状態の 名前をコメントでちまちまと入れているので、ソースはやや大きい ですが、追っかけやすいかと思います。 $log は、そのときの処理を記録して、後でユーザが見るための テキストです。 このテキストは「MSBS」っぽいものにしようと考えています。 /*========================================================*/ 状態の保持は、ビット単位で行っています。 よって、状態の判定は、ビットの論理積、 状態の設定は、ビットの論理和、 状態の消去は、ビットの全反転論理積で行っています。 状態を値で持ってしまうと、状態がネストしたときに変数管理が チンプンカンプンになってしまう恐れがありますので、ビットの ほうがお手軽なはずです。 ビットならば、複雑なネストも怖くありません。 状態もそれほど数があるわけではありませんので、数値型1個の 変数で賄(まかな)えます。 状態遷移を行うとき、論理演算を逐一書くのは面倒、もとい、 記号の記述ミスが怖いので、CHG_STATE という関数で一括して 行っています。 C言語ならば、ビット変数を使用することにより、論理演算を 行う必要がなく、設定の変更も0と1を代入するだけなので、 もっと楽に記述できるはずです。 /*========================================================*/ 各状態の最後のほうに、「INITIALIZIE」という状態があり ます。 状態の中にいくつかの小さな状態がある形のとき、 どれかの小さな状態が「ON」であってほしいのですが、 それらの小さな状態がすべて「OFF」である場合、 その大きな状態に初めて遷移してきたものとして、 状態のコンストラクタとしての処理を記述しています。 逆に、デストラクタの処理を記述する場合は、 この例では使用していませんが、 if( state & state_alpha ) { if( state & state_a ) { CHG_STATE( state_alpha, state_omega ); } else if( state & state_b ) { } else { // INITIALIZE state |= state_a; } if( ! ( state & state_alpha ) ) { // DESTRUCTOR } } このように、最後で「現在の状態ではなくなった」ことを判定 すると、 小さな状態の、どこかわからないけどきっとどこかで遷移したの だろうなー、ということを判断することができるので、 この場所にデストラクタのような、状態が終わってしまうときの 処理を記述すればオーケーです。 どこにいくつあるか分からない状態遷移処理とペアで書くのは、 きっと面倒です。 {magclick} /*========================================================*/ さいごに /*========================================================*/ 今後の予定です。あくまでも予定です。 大型計算機「LC」の仕上げとシェアウェア登録 グラフィックエディッタ「あいすドロワ」の作成 ファイル比較ツール「あいすでふ」の作成 C言語解析ツール「しーますた」の作成 {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は11月15日(月曜日)に、第521回をお送りします。 お題は「Code2Html改造案」 Code2Html にいくつかの機能を追加したいです。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 金天ボ なんて大歓迎です。 {magclick} /*========================================================*/ /*========================================================*/ 発行者 あゆしゃ ホームページ::あゆしゃの世界 http://ayusya.hp.infoseek.co.jp/ ご意見・ご感想・ご質問メール mailto:ayusya@flamenco.plala.or.jp まぐまぐ::アイディー 0000020674 まぐまぐ::登録と解除 http://www.mag2.com/m/0000020674.htm まぐまぐ::バックナンバー http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674 めーらっくす::アイディー MM3E1AEE285AB4F めーらっくす::登録と解除 http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F めーらっくす::バックナンバー★最近のものならこちらが便利★ http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F |