メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.518) UMLの状態遷移図でGIBS 2  2004/11/08


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第518回 UMLの状態遷移図でGIBS 2
 発行    2004年11月8日(月曜日)
 発行数   約2600

{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンは、主にまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・横60文字で作成し、インデントは大抵半角スペース4つです。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、メルマガのホームページでお願いします。
・過去ログはバックナンバー(下欄参照)を活用して下さい。
・内容は私が感じたもので、最新の技術も、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。
・セキュリティ突破のため、暗号化された単語があります。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

 まだインターネットシムシティに夢中になっているあゆしゃ。

 ホームページのトップのヒントから、公園を作ればオーケーと
いう技を伝授されたあゆしゃは、

★腐るほど公園を作りました。

 するとどうでしょう?

★シムシティプレイ史上初の、「黒字経営」を達成しました。

 「えー、こーやってプレイするんだ〜」と、目から何かが
落ちた気分でした。

 お金が余ってしょうがないので、スタジアムを3つも建設。

 空港も楽に作りました。

 公園は偉大です。

{magclick}
/*========================================================*/
 今回のお題  << UMLの状態遷移図でGIBS 2 >>
/*========================================================*/

 ああああああああああああああああああああああああああああ。

 。。。やってしまいました。

 現在、WindowsXP 上で VisualC++ 6.0 を元気に使っているの
ですが、この組み合わせ、保障されていないだけあって、最悪
です。

 ファイルを保存しようとすると、以下の現象が発生します。

・ファイルを削除する
・ファイルを作成する
・ファイルを保存する

 正常に保存処理が終了すればよいのですが、この削除がけっこう
遅いらしく、削除の途中でアプリケーション側が

 「良くわからんので失敗」

 というエラーになってしまいます。
 しかもこの状態だと、ファイルが削除されていますので、再度
保存を実行する必要があります、エラーが出るたびに。

 なので、再度の保存をしないでアプリケーションを終了すると、
ファイルと永遠におさらばです。

 必ず発生するわけではないので、なんとなく使っていますが。

 よく発生するので、気をつけてはいるのです。消えますから。

★今回、GIBSのメインプログラムを消してしまいました。

 ああああああああああああああああああああああああああああ!

/*========================================================*/

 HTML のファイルを何度か消したことはありますが、

 余り変化のないホームページのHTMLならば、バックアップから
簡単に復元できたりもします。

 が、GIBS は、ごりごり書き直しているので、バックアップが
ふるすぎて使い物になりませんでした。

 ゴミ箱にも何にも残っていないので、しょうがないから、

★半なき状態でプログラムしなおしました。

★再発防止対策として VisualC++7.0 で編集することにしました。

 今のところ、保存失敗問題は発生していません。
 これが保障という性能ですか。使い慣れていないので大変です。

/*========================================================*/

 さて、前回の続きですか? どうでもいいですが。。。

 状態遷移図における、状態の説明ですね。

/*========================================================*/
艦船タイプ

★ SHIP

 艦船タイプのユニットであることを示します。

 戦術アルゴリズムは艦船タイプとそのほかとでまったく違うので
艦船であることを判断するために状態として定義します。

★ NORMAL

 艦船タイプのユニットは、マップ中で戦闘を行う状態と、戦略
移動を実行している状態との2つに分かれます。

 NORMALは、マップ中にあり戦闘を行える状態であることを示し
ます。

★ MOVE

 戦略移動を実行している状態であることを示します。

 当初、戦略移動は戦略ターンの前後でループをまわして一括で
行うように考えていました。そうすると、原作と同じです。

 しかし、状態遷移の一環としてシーケンスを状態遷移図に
組み込んでしまったほうが、アルゴリズムとしては短くなり、
処理時間の短縮につながるだろうと考えました。

 また、指令艦などの従属関係がある場合、ループをまわす中で
自分に従属しているデータをネスト検索する必要があり、これが
「面倒だった」というのが本音です。

 戦略移動は、プレイヤーからの指示である場合と、耐久の低下
などによって自ら撤退する場合との2種類があります。

 どちらも、「移動先」というデータを更新します。

 プレイヤーが指定する場合は「隣接する1つのマップ」、
 撤退する場合は「移動もとのマップ」、

 となります。

 状態が「NORMAL」のとき、この「移動先」が指定されている
ならば、状態を「MOVE」に遷移します。

 MOVE はさらに「OUT」と「IN」の2つの状態があり、それぞれ
「マップを離脱中である」「マップに進入中である」という意味
になります。きっと戦闘ログにそのようにでてくるでしょう。

 「IN」の状態のとき、ユニットはどのマップにも存在しない状態
になります。

 「IN」の状態から無条件で「NORMAL」に遷移します。これが
「マップに進入した」という意味になり、戦略移動が完了します。

★ FIND

 戦闘可能な状態で、敵を発見していない状態です。

 敵のいないマップでさびしい思いをしているユニットの状態
でもあります。

★ TARGETとLONG

 敵を捕捉しており、攻撃可能な状態です。

 LONG は、遠距離攻撃が可能な状態です。

 艦船は遠距離攻撃のみ可能です。

/*========================================================*/
艦船以外のユニット

★ UNIT

 艦船以外のすべてのユニットです。

★ IN

 ユニットが艦船に格納されている状態です。

 名称は同じですが、SHIP_MOVE_IN とは別の状態です。

★ REST

 ユニットが艦船に格納され、補給を受けている状態です。

 十分な補給を受けたら、状態が READY に遷移します。

★ READY

 ユニットが艦船に格納され、出撃準備が整った状態です。

 この状態であり、艦船から指示を受けると、OUT に遷移します。

★ OUT

 ユニットが艦船の外に出撃している状態です。

 名称は同じですが、SHIP_MOVE_OUT とは別の状態です。

★ FIND

 ユニットが攻撃対象を探している状態です。

 SHIP_NORMAL_FIND と処理が似ています。

 攻撃対象が見つかれば、TARGET に遷移します。

★ TARGET と LONG と SHORT と CLOSE

 攻撃対象がいる場合、まずは遠距離から攻撃を仕掛けます。
 これが射程3以上の長距離射撃戦になります。
 普通のユニットは何もできずに、次の状態に遷移するでしょう。

 敵の反撃がなければ、近づいて、中距離から攻撃を仕掛けます。
 これが射程1〜2の射撃戦になります。

 敵の反撃がなければ、近づいて、近距離から攻撃を仕掛けます。
 これが射程0の格闘戦になります。

・あるイチャモン本に対する対応策
 ミノフスキー粒子が散布されている場合、遠距離攻撃はまず
当たりません。自発的に軌道修正を行うミサイルであっても、
遠距離から飛んでくるものならば、追尾の対象である熱などを
自動回避システムが変化させるなどの時間が十分にあります。
ビーム兵器や光学兵器は、ミノフスキー粒子散布域を直進すること
ができないので、アホなほど当たりません(ミノフスキー粒子を
過度に散布しすぎると、艦船が光学写真に写らなくなったり、
ビームの直撃を跳ね返したりすることができる)。としましょう。

★ RETURN

 ユニットが帰還する状態です。

 FIND の状態で、敵が見つからない場合や、
 自機の損傷が激しかったり弾薬がなくなったり、
 指令艦の MOVE 状態を検出したときに、OUT から遷移します。

 遷移した次のラウンドで、IN の状態になり、艦船に格納され
ます。

★ MOVE

 ユニットが艦船の中にあり、戦略移動で運ばれている状態です。

 このとき、常に指令艦のマップ番号を自分にコピーすることに
より、ゆらゆら運ばれていることを表現できるはずです。

 指令艦の状態が MOVE である場合、この状態を維持します。

{magclick}
/*========================================================*/
 さいごに
/*========================================================*/

 今後の予定です。あくまでも予定です。

 大型計算機「LC」の仕上げとシェアウェア登録

 グラフィックエディッタ「あいすドロワ」の作成
 ファイル比較ツール「あいすでふ」の作成
 C言語解析ツール「しーますた」の作成

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は11月10日(水曜日)に、第519回をお送りします。
 お題は「UMLの状態遷移図でGIBS 3」

 大事なことを忘れていました。
 戦略移動は、ずいぶんと時間がかかります。

 次回は移動などのシーケンスについての説明(整理)です。

 その次の回で、実際に作成した 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

ブラウザの閉じるボタンで閉じてください。