|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第517回 UMLの状態遷移図でGIBS 1 発行 2004年11月5日(金曜日) 発行数 約2600 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンは、主にまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・横60文字で作成し、インデントは大抵半角スペース4つです。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、メルマガのホームページでお願いします。 ・過去ログはバックナンバー(下欄参照)を活用して下さい。 ・内容は私が感じたもので、最新の技術も、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 ・セキュリティ突破のため、暗号化された単語があります。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 まだシムシティに没頭しているあゆしゃ。 シムシティの攻略を探していたところ、そのホームページの冒頭 に、それがありました。 灯台下暗しです。 さて、それによりますと、攻略のポイントとしては、 ★公園をたくさん造る ★道路よりも線路 ★道路に交差点を造らない ★工場を一箇所に固めない ということでした。 ほほう。 これまでの私は、 ★公園いらない、緑のない街を造る ★線路いらない、道路で十分じゃ ★交通渋滞には道路を2本以上にする、ー>交差点を大量発生 ★工場は一箇所に固めて工場地帯完成! ・・・・ ・・・・・・・ ・・・・・・・・・・・駄目駄目? {magclick} /*========================================================*/ 今回のお題 << UMLの状態遷移図でGIBS 1 >> /*========================================================*/ 最近、状態遷移図をソースに起こす作業がよくあります。 最初は面倒だなぁと思っていましたが、 今では「UMLすごーい便利〜」モードになっています。 そこでふと、考えました。 GIBS の戦術プログラム、非常に複雑で、何度もやり直すはめに なっているのですが、 そこに UML を投入しようと考えました。 /*========================================================*/ UML とは、数年前に紹介したとおり、開発技法の1つです。 UML にはいくつかの技法があるのですが、その中で、 アルゴリズムの状態遷移に重点を置いたフローがあります。 それが UML の状態遷移図です。 そして今回、それを使い、GIBS の戦術アルゴリズムについて、 まとめてみました。 http://ayusya.hp.infoseek.co.jp/Image/UMLsample_GIBS.png 少しでっかいですが、がんばって表示してください。 小さくすると私の下手な字が読めなくなるので。。。 /*========================================================*/ さて。 画像の左上に、「SHIP」の文字が見えます。(読めますよね?) これが、状態の1つを表しています。 状態遷移図では、四角の中が1つの状態であるとします。 左上にある状態の名称が、「SHIP」です。 ユニットの中の、「艦船」タイプのユニットに関する状態を あらわしています。 ホワイトベースやガウ攻撃空母など、他のユニットを格納できる すべてのユニット、または原作で艦船に分類されるユニットです。 この「SHIP」の枠を下のほうにたどっていくと、「SHIP」の枠の 下に、もう1つ大きな枠があります。 そこには「UNIT」とかかれています、お上手な字で。 ユニットの中の、「艦船以外」タイプのユニットに関する状態を あらわしています。 ガンダムやフライマンタなど、モビルスーツや戦闘機などです。 戦術アルゴリズムでは、艦船であるかそうでないかで、大きく 2つに分けています。 それを、2つの大きな枠が示しています。 画像の右側、2つの枠の境の部分に、丸と2つの矢印がありま す。 状態遷移図では、1つの状態の中に複数の状態がネストして存在 しています。 この場合は、全体について「SHIP」と「UNIT」の2つの状態が 存在します。 しかし、プログラムとして処理を始めようとするときに、2つ またはそれ以上複数の状態について、何からはじめたらいいのかが 分からなくなります。 状態遷移図では、丸印で状態の開始位置を示します。 矢印が2本、2つの状態のどちらにも伸びいているのは、 「どちらかに分岐する」という意味になります。 ユニットを生産して戦術フェイズが始まる最初の状態では、 ユニット情報が初期化されていません。 としましょう。そのほうが楽です。 そういう状態とき、この処理が実行され、SHIP または UNIT の どちらかの状態に遷移します。 具体的にいうと、どちらかの状態を示すビットを ON にします。 たったそれだけのことで、1ラウンド(1戦術ターン)を消費 します。しかしそれが大事です。 プログラムでいうと、こんな感じです。 int unit_max = 200; // ユニットの総数 int data[ 200 ][ 50 ]; // 各ユニットの現在データ int unit_data[ 100 ][ 50 ]; // ユニットのデータベース for( int i = 0; i < unit_max; i++ ) { int state = data[ i ][ unit_state ]; // ロード if( state & state_ship ) { // STATE SHIP } else if( state & state_unit ) { // STATE UNIT } else { // STATE INITIALIZE int id = data[ i ][ unit_id ]; if( unit_data[ id ][ unit_data_type ] == SHIP ) { state |= state_ship; } else { state |= state_unit; } } data[ i ][ unit_state ] = state; // 戻す } 戦術プログラムは、死ぬほど大量のデータを高速に扱う必要が あります。 なので、状態に合わせて、適切で最小限の処理だけを行う 必要があります。 しかし状態というのは非常にたくさんあるわけで、これを 闇雲にやり始めると、全然成功しませんでした。 しかし。 今回は、なんだかいい感じです。 {magclick} /*========================================================*/ さいごに /*========================================================*/ 今後の予定です。あくまでも予定です。 大型計算機「LC」の仕上げとシェアウェア登録 グラフィックエディッタ「あいすドロワ」の作成 ファイル比較ツール「あいすでふ」の作成 C言語解析ツール「しーますた」の作成 {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は11月8日(月曜日)に、第518回をお送りします。 お題は「UMLの状態遷移図でGIBS 2」 各状態について説明(私が頭の中を整理)します。 その次の回で、実際に作成した Perl プログラムを提示します。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 公園、公園、公園だよ〜 なんて大歓迎です。 {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 |