|
/*========================================================*/ <<<あゆしゃの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 |